Войти

Показать полную графическую версию : [решено] Windows Server R2 + PowerShell + CSV + AD


rox33
03-07-2012, 16:36
Добрый день.
Есть такая проблема. Нужно :
1. Из файла CSV (созданного сторонним продуктом), где находятся имена, почтовые ящики и телефоны пользователей, импортировать список в ActiveDirectory. Пробовал разными способами (dsadd, ps, csvde). Успеха не добился.
2. Вставить в скрипт создания пользователя проверку данных по каждому пользователю (пользователя по полю email определять) и при нестыковках заносить данные из csv в AD.
Итак.
1. Есть CSV файл такого вида:
name;displayname;Password;EmailAddress;MobilePhone; Description
ivan;ivan.ivanov;Qw12345;ivan.ivanov@test.ru;8-999-999-9999;test

Пытаюсь сделать запустить скрипт вида:

Import-CSV -Path "C:\list.csv" | ForEach-Object -process {New-ADuser -Name $_.Name -Description $_.Description -DisplayName $_.DisplayName -EmailAddress $_.EmailAddress -MobilePhone $_.MobilePhone-Path "ou=Test,dc=Test,dc=ru" -CannotChangePassword $true -ChangePasswordAtLogon $false -PasswordNotRequired $true -AccountPassword $_.Password -Company TEST}

Взят и слегка исправлен отсюда (http://parafoxer.livejournal.com/106150.html).

При выполнении скрипта выдаёт:


New-ADUser : Не удается проверить аргумент для параметра "Name". Аргумент пустой или имеет значение NULL. Укажите не пустой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.
C:\3.ps1:1 знак:76
+ Import-CSV -Path "C:\short.csv" | ForEach-Object -process {New-ADuser -Name <<<< $_.Name -DisplayName $_.DisplayName
-EmailAddress $_.EmailAddress -MobilePhone $_.MobilePhone -Path "ou=Users,dc=test,dc=ru" -CannotChangePassword $true -ChangePasswordAtLogon $false -PasswordNotRequired
$true -AccountPassword $_.Password -Company TEST}
+ CategoryInfo : InvalidData: ( [New-ADUser], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.N ewADUser



На самом деле не привязан к PS. Если есть более доступные способы - готов выслушать.

2. Тут ещё ничего не сделано, т.к. сначала надо бы занести юзверей в AD.

Molchune
04-07-2012, 11:31
Вот смотри

Add-PSSnapin Quest.ActiveRoles.ADManagement
# Импортируем пользователей из csv файла, где разделителем является ";"
$userCSV=import-csv -Path d:\user.csv -Delimiter ";"
#$userCSV
# Импортируем пользователей из АД
$userAD = Get-QADUser -SizeLimit 0 -SearchRoot test.ru/OU
#$userAD
#сравниваем Пользователей из АД с пользователями в csv файле по свойству Email и выбираем пользователей которых надо добавить в АД
$compare = Compare-Object -ReferenceObject $userAD -DifferenceObject $userCSV -Property Email | Where-Object {$_.SideIndicator -eq "=>"}
$compare
#Проверяем что есть пользователи которых надо добавить
if ($compare.Count -ge '1' ) {
foreach ($usercompare in $compare) {
$user = $userCSV| Where-Object {$_.Email -match $usercompare.email}
$user
#Добавляем пользователей
New-QADUser -name $user.name -DisplayName DisplayName -UserPassword $user.Password -email $user.email -MobilePhone $user.MobilePhone -Description $user.Description -ParentContainer test.ru/OU -WhatIf
}
} else {
'Новых пользователей нет'
}


Примечения:
- в csv файлк поле EmailAddress изменил на Email
- для работы с AD исползуется модуль ActiveRoles Management Shell for Active Directory. Его надо сначало скачать и подключается он второй строчкой Add-PSSnapin Quest.ActiveRoles.ADManagement.
- оставил закоменченные строки с отображением всех перменных. Для просмотра прото раскомменть их.
- в строчке New-QADUser.... для создания пользователей убери -WhatIf




© OSzone.net 2001-2012