понедельник, 14 ноября 2011 г.

Заведение пользователей в домене из сторонних систем по средствам 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

Комментариев нет: