# Поля УЗ и описания # # Название и описание # <Имя атрибута AD> | <Имя поля CSV> | [<Имя соответствующего параметра New-ADUser, Set-ADUser>] # # Имя - имя сотрудника # givenName | FirstName | -GivenName # Фамилия - фамилия сотрудника # sn | LastName | -Surname # Инициалы - первая буква отчества сотрудника # initials | MiddleName[1] | -Initials # Полное имя - Фамилия Имя Отчество сотрудника (именно в таком порядке) # name | LastName + FirstName + MiddleName | -Name # Выводимое имя - Фамилия Имя Отчество сотрудника (именно в таком порядке) # displayName | LastName + FirstName + MiddleName | -DisplayName # Комната - номер кабинета сотрудника # physicalDeliveryOfficeName | Room | # Номер телефона - внутренний номер телефона сотрудника # telephoneNumber | IPPhone | -OfficePhone # IP-телефон - городской номер телефона сотрудника в формате (код_города)ХХХХХХХ # ipPhone | Phone | # Факс (при наличии) - номер факса, если имеется факсимильный аппарат, в формате (код_города)ХХХХХХХ # facsimileTelephoneNumber | Fax | -Fax # Электронная почта - поле заполняется после подключения сотрудника к сервису электронной почты, осуществляемого только по заявке, вручную не заполняется # mail | Mail | -EmailAddress # Почтовый индекс # postalCode | PostalCode | -PostalCode # Регион # st | Region | -State # Адрес - обязательно заполнять для сотрудников территориальных подразделений # streetAddress | StreetAddress | StreetAddress # Должность - должность сотрудника # title | Title | -Title # Отдел (department) - структурное подразделение, к которому принадлежит сотрудник (Руководство, Управление, Отдел). Начальникам управлений писать сюда название управления; некоторые названия подразделений могут не входить, их следует однообразно для всех работников подразделения сокращать. Для новых работников - просто скопируйте у уже работающих # department | DepartmentShort | -Department # departmentNumber - структурное подразделение, к которому принадлежит сотрудник (Руководство, Управление, Отдел). Начальникам управлений писать сюда название управления; предназначено для ПОЛНОГО наименования подразделения. Именно оно отображается в заявках и записывается в журнале учета # departmentNumber | Department | # division - Управление, в котором работает сотрудник, если нет - ничего не пишем # division | Division | -Division # Описание - Группа, в которой работает сотрудник, если нет - ничего не пишем # description | Group | -Description # Руководитель - непосредственный руководитель сотрудника. Если сотрудник входит в группу внутри отдела - это руководитель группы. Для руководителя группы указывается начальник отдела. Для начальника отдела указывается начальник управления, если отдел входит в управление, или курирующий заместитель генерального директора; для заместителя генерального директора указывается генеральный директор # # Расположение - поле "l" - город нахождения сотрудника (Красноярск, Тюмень, Иркутск и т.д., без "г.") # l | City | -City # destinationIndicator - Может принимать значения: "Администрация", "Подразделения при администрации", "Обособленные подразделение" # destinationIndicator | DivisionType | Param( [Parameter(Mandatory=$true, HelpMessage="Domain name like 'example.com'")] [ValidateNotNull()] [String]$DomainName, [Parameter(Mandatory=$true, HelpMessage="OU like 'OU=Temp,OU=Users,OU=MyCompany,DC=example,DC=com'")] [ValidateNotNull()] [String]$OU, [Parameter(Mandatory=$true, HelpMessage="CSV file path'")] [ValidateNotNull()] [String]$CSVPath, [Parameter(Mandatory=$false, HelpMessage="Just print debug and exit")] [Switch]$DryRun, [Parameter(Mandatory=$false, HelpMessage="Plain text password")] [String]$Password ) $CSVtempfile = "temp.csv" $DefaultPassword = "1qaz2wsx#EDC" #Функция транслитерации function global:Translit { param([string]$inString) $Translit = @{ [char]'а' = "a" [char]'А' = "A" [char]'б' = "b" [char]'Б' = "B" [char]'в' = "v" [char]'В' = "V" [char]'г' = "g" [char]'Г' = "G" [char]'д' = "d" [char]'Д' = "D" [char]'е' = "e" [char]'Е' = "E" [char]'ё' = "yo" [char]'Ё' = "Yo" [char]'ж' = "zh" [char]'Ж' = "Zh" [char]'з' = "z" [char]'З' = "Z" [char]'и' = "i" [char]'И' = "I" [char]'й' = "j" [char]'Й' = "J" [char]'к' = "k" [char]'К' = "K" [char]'л' = "l" [char]'Л' = "L" [char]'м' = "m" [char]'М' = "M" [char]'н' = "n" [char]'Н' = "N" [char]'о' = "o" [char]'О' = "O" [char]'п' = "p" [char]'П' = "P" [char]'р' = "r" [char]'Р' = "R" [char]'с' = "s" [char]'С' = "S" [char]'т' = "t" [char]'Т' = "T" [char]'у' = "u" [char]'У' = "U" [char]'ф' = "f" [char]'Ф' = "F" [char]'х' = "h" [char]'Х' = "H" [char]'ц' = "c" [char]'Ц' = "C" [char]'ч' = "ch" [char]'Ч' = "Ch" [char]'ш' = "sh" [char]'Ш' = "Sh" [char]'щ' = "sch" [char]'Щ' = "Sch" [char]'ъ' = "" [char]'Ъ' = "" [char]'ы' = "y" [char]'Ы' = "Y" [char]'ь' = "" [char]'Ь' = "" [char]'э' = "e" [char]'Э' = "E" [char]'ю' = "yu" [char]'Ю' = "Yu" [char]'я' = "ya" [char]'Я' = "Ya" } $outCHR="" foreach ($CHR in $inCHR = $inString.ToCharArray()) { if ($Translit[$CHR] -cne $Null ) { $outCHR += $Translit[$CHR] } else { $outCHR += $CHR } } Write-Output $outCHR } Import-Module activedirectory # Конвертация кодировки Get-Content $CSVPath | Set-Content -Encoding UTF8 $CSVtempfile # Импорт CSV $Objects = Import-Csv -Delimiter ';' $CSVtempfile # Обработка строк foreach ($Object in $Objects) { Write-Output "" Write-Output "-----" Write-Host -ForegroundColor DarkGreen "Запрошенный пользователь:" Write-Output $Object # Вычисляемые параметры $FullName = $Object.LastName + " " + $Object.FirstName + " " + $Object.MiddleName $DisplayName = $FullName $Initials = $Object.MiddleName.Substring(0, 1) $SamAccountName = $($(Translit($Object.FirstName)).Substring(0, 1).ToLower() + "." + $(Translit($Object.LastName)).ToLower()) $UPN = $SamAccountName + “@” + $DomainName.ToLower() if ($Password -eq "") { $Password = $DefaultPassword } #if ($Object.Manager -ne "") { $Manager = Get-ADUser -Filter {(cn -eq $Object.Manager)} } else { $Manager = "" } # Проверка существующей УЗ по полному имени $User = Get-ADUser -Filter {(cn -eq $FullName)} -Properties DistinguishedName if ($User -ne $null) { Write-Warning "Совпадение полного имени с существующей учетной записью:" Write-Output $User Write-Warning "Пропускаем." continue } # Проверка совпадения логина $User = Get-ADUser -Filter {(sAMAccountName -eq $SamAccountName)} if ($User -ne $null) { Write-Warning "Совпадение логина ($SamAccountName) с существующей учетной записью:" Write-Output $User Write-Warning "Пробуем второй вариант:" $SamAccountName = $($(Translit($Object.FirstName)).Substring(0, 1).ToLower() + $(Translit($Object.MiddleName)).Substring(0, 1).ToLower() + "." + $(Translit($Object.LastName)).ToLower()) $User = Get-ADUser -Filter {(sAMAccountName -eq $SamAccountName)} if ($User -ne $null) { Write-Warning "Совпадение второго варианта логина ($SamAccountName) с существующей учетной записью:" Write-Output $User Write-Warning "Невозможно создать УЗ в автоматическом режиме. Пропускаем." continue } } Write-Output $($FullName + "|" + $SamAccountName + "|" + $UPN + "|" + $Password) # Ничего не делаем, если DryRun if ($DryRun) { continue } # Создание учетной записи New-ADUser ` -UserPrincipalName $UPN ` -SamAccountName $SamAccountName ` -Enabled $false ` -AccountPassword (ConvertTo-SecureString $Password -AsPlainText -force) ` -ChangePasswordAtLogon $true ` -Path $OU ` -Name $FullName ` -DisplayName $DisplayName ` -GivenName $($Object.FirstName + " " + $Object.MiddleName) ` -Surname $Object.LastName ` -Initials $Initials ` -Title $Object.Title ` -OfficePhone $Object.IPPhone ` -MobilePhone $Object.MobilePhone ` -Fax $Object.Fax ` -EmailAddress $Object.Mail ` -Country $Object.Country ` -PostalCode $Object.PostalCode ` -City $Object.City ` -StreetAddress $Object.StreetAddress ` -Company $Object.Company ` -Division $Object.Division ` -Department $Object.DepartmentShort ` -Description $Object.Group ` -Manager $Manager ` -OtherAttributes @{ ipPhone = $Object.Phone; physicalDeliveryOfficeName = $Object.Room; destinationIndicator = $Object.DivisionType; departmentNumber = $Object.Department } } if ($DryRun) { Write-Output "" Write-Warning "Использован ключ DryRun, изменений не произведено." }