Заведение пользователей в домене из сторонних систем по средствам powershell
Ниже приведен пример скрипта при помощи которого можно забыть про ручное заведение пользователей если у вас есть нормальная программа по кадрам или возможность прицепить триггер к SQL
cls
Add-PSSnapin Quest.ActiveRoles.ADManagement
#Используем входные параметры от триггера для создания учетной записи
#Input Data
#Param ([string]$Param)
#Использование параметров из текстового файла
$Param = Get-Content 'H:\NewUsers\new_pip.log'
#Транслитерация (Отдельное спасибо PuzzleW за функцию)
Function Transliteral ([String]$InStr)
{
$ConvRules=@{"а"="a";"б"="b";"в"="v";"г"="g";"д"="d";"е"="e";"ё"="e";"ж"="zh";"з"="z";"и"="i";"й"="y";"к"="k";"л"="l";"м"="m";"н"="n";"о"="o";"п"="p";"р"="r";"с"="s";"т"="t";"у"="u";"ф"="f";"х"="h";"ц"="ts";"ч"="ch";"ш"="sh";"щ"="shch";"ъ"="";"ы"="y";"ь"="";"э"="e";"ю"="yu";"я"="ya"};
$s = $InStr
for ($i=0; $i -le $s.Length-1; $i++)
{
$ch = $ConvRules[$s[$i].ToString().ToLower()]
if ( $s[$i].ToString().ToUpper() -ceq $s[$i].ToString() ) { $ch=$ch.Replace($ch[0],$ch[0].ToString().ToUpper()); }
$trn=$trn+$ch;
}
$trn
}
#Список орг единиц
#Получаем полный список организационных едениц
Function GetOU ()
{
Get-QADObject -Type organizationalUnit | Format-Wide -Column 1 | Out-File C:\Temp\temp.txt
#Удаляем пустые сроки в файле
gc c:\Temp\temp.txt | where {$_ -ne ""} > c:\Temp\temp1.txt
$OUList = Get-Content c:\Temp\temp1.txt
return $OUList
}
#Получаем полное доменное имя выбранного отдела
function TakeDN ([string]$N)
{
$Nn = $N.TrimEnd(1,' ')
$TempDN = ''
[string]$TempDN = Get-QADObject -Type 'organizationalUnit' -Name $Nn | Select-Object -Property DN
$tempDN=$tempDN.Remove(0,5)
$tempDN=$tempDN.TrimEnd('}')
return [string]$tempDN
}
#Получаем список допустимых орг. единиц в домене
Function GetOU ()
{
$TempOU = Get-QADObject -Type organizationalUnit | Select-Object -Property Name
foreach($item in $TempOU)
{
$temp = ''
[string]$temp=$item
$temp=$temp.Remove(0,7)
$temp=$temp.TrimEnd('}')
[array]$Oulist = $Oulist + $temp
}
return $OUList
}
#Ищем подразделение в которое будем добавлять учетную запись
function SearchOU ( [string] $UD2 )
{
# Ищем совпадения в списке и записываем их в отдельный массив
$ListOfOU2=@()
$ArOu2 = GetOU
$UD2 = $UD2
foreach ($item in $ArOu2)
{
if (($item -eq $ud2))
{
[Array] $ListOfOU2=$ListOfOU2 + $item
}
}
return $ListOfOU2
}
# Теперь необходимо определить правильно ли мы нашли подразделение
# Существует ли оно вообще, и получаем полный путь. Если определить подразделение не удалось используем временный контейнер
function ParentFolder ( [string] $UD)
{
do
{
$can_exit=$true
#Ищим совпадения в списке
[Array] $ListOfOU = SearchOU $UD
switch ($ListOfOU.count) {
$null{
$body1 = "No of dapartment create user int tempusers, please check " + $ud
$DN = TakeDN 'TempUsers'
$DPN = 'TempUsers'
$can_exit = $true
}
1{ # Если совпадение одно возвращаем результат
$DN = TakeDN $ListOfOU[0]
$DPN = $ListOfOU[0]
$can_exit = $true
}
default {
$body1 = "Many of case in dapartment create user int tempusers, please check " + $UD
$DN = TakeDN 'TempUsers'
$DPN = 'TempUsers'
$can_exit = $true
}
}
}until($can_exit)
return $DN, $DPN
}
#------------------------------------------------------------------------------
#Основное тело
#В моем случае при ошибке работы триггера будет возвращаться сообщении содержащее текст
# error. Данное сообщение необходимо обработать и отправить администраторам
$Param
if ($Param -like '*error*')
{
Write-Host 'error'
send-mailmessage -from "PowerShell " -to "admin1 " -subject "Error work whit triger" -body "Error Resive Data From KominTeh Call " -priority High -smtpServer 192.168.0.1
break
}
# Обработка входящих параметров. Разбор строки содержащей ; и обрезка пробелов
foreach ($item in $Param){
[array]$str = $item.split(';')
$str
$tmp = $str[0].Remove(0,19);
$UserName = [string]$str[2].TrimStart(' ');
$UserFname = [string]$str[3].TrimStart(' ');
$UserLastname = [string]$str[1].TrimStart(' ');
switch ($trigger){
default {
#Создаем логин пользователя
$Tname = Transliteral $UserName
$TFname = Transliteral $UserFname
$TLName = Transliteral $UserLastname
$UserLogin = $TLName+'_'+$Tname.substring(0,1)+$TFName.substring(0,1)
$UserPassw = 'Temp$#Passwod$Tohcange'
$UserW = [string]$str[5].TrimStart(' ');
$UserDepartment = [string]$str[6].trimstart(' ');
$MailDomain = '@roga.ua'
$TabNamber = [string]$str[4].TrimStart(' ');
#Собираем почтовый адрес
$UserMail = $UserLogin+$MailDomain;
$UserCompany = 'ПАО "РОГА И КОПЫТА"'
$UserPrincipalName = $UserLogin+'@local'
#Создаем фильт поиска
# Получаем имя отдела и полное доменное имя оушки
$res = ParentFolder $UserDepartment
[string]$distinguishedName = $res[0]
[string]$UserDepartment =$res[1]
$distinguishedName
$UserDepartment
$UserDepartment=$UserDepartment.TrimEnd(1,' ')
$distinguishedName=$distinguishedName.TrimEnd(1,' ')
#Отрезаем инициал
$UserFname2 = $UserFname
$UserFname2 = $UserFname2.Substring(0,1)
#Генерируем CN и Отображаемое имя
$CN=$UserName+" "+$UserFname2+". "+$UserLastname
$DisplayName = $UserLastname+" "+$userName+" "+$UserFName
$nl = [System.Environment]::NewLine
$Subject = 'Create new User: ' + $DisplayName + ' ' + $UserLogin
$body = $body1+$nl+'User parametrs: ' + $DisplayName +$nl+ ' Отдел: ' + $UserDepartment +$nl+ ' Должность: '+ $UserW +$nl+' Логин и пароль, пароль необходимо изменить: '+ $UserLogin+'/'+$UserPassw +$nl+' Почтовый адрес, изменить если необходимо: ' + $UserMail +$nl+ 'Табельный номер'+$TabNamber + $nl+$distinguishedName + $nl
#+ 'Учетная запись почты (необходимо переместить из Contacts' + $UserMail
#Добавляем пользователя в домен
new-QADUser -FirstName $UserName -LastName $UserLastname -Initials $UserFname2 -DisplayName $DisplayName -Name $CN -SamAccountName $UserLogin -UserPrincipalName $UserPrincipalName -UserPassword $UserPassw -ParentContainer $distinguishedName -Email $UserMail -ObjectAttributes @{department = $UserDepartment; company = $UserCompany; title = $UserW; employeeNumber = $tabnumber}
# -Email $UserMail
#Переопределяем выводимое имя
$CN=$UserLastname+" "+$UserName+" "+$UserFname
# Добавляем контакт
new-QADOBject -Type 'contact' -ParentContainer 'OU=Contacts,DC=bank,DC=local' -Name $CN -DisplayName $CN -ObjectAttributes @{mail=$UserMail; givenName=$UserName; initials=$UserFname2; Sn=$UserLastname; department = $UserDepartment; company = $UserCompany; title = $UserW}
Send-MailMessage -from "PowerShell " -to "Admin1 " -subject $Subject -body $body -priority High -smtpServer 192.168.0.1 -Encoding ([System.Text.Encoding]::UTF8)
}
}
}
move /Y h:\NewUsers\new_pip.log h:\NewUsers\old_pin.log
Комментарии