Показать полную графическую версию : [решено] Добавление информации из csv-файла в AD с обработкой
Доброго времени суток.
Прошу помочь в решении посредством PowerShell следующей задачи:
Есть users1s.csv - содержащий два поля - полное ФИО (name) и табельный номер (tabnum), необходимо в AD найти сотрудника с таким ФИО (при условии, что в AD вместо полного отчества есть только инициал) и добавить в поле почтового индекса табельный номер, удалив при этом запись об этом сотруднике из users1s.csv, чтобы в итоге в файле остались только необработанные сотрудники.
P.S. Обращение к AD необходимо реализовать с помощью командлетов PowerGUI.
при условии, что в AD вместо полного отчества есть только инициал »по каким конкретно атрибутам сравнивать?
Обращение к AD необходимо реализовать с помощью командлетов PowerGUI. »AFAIK PowerGUI использует ActiveRoles Management Shell for Active Directory (http://www.oszone.net/5777/)
по каким конкретно атрибутам сравнивать? »
По фамилии, имени и инициалу отчества.
P.S. Обращение к AD необходимо реализовать с помощью командлетов PowerGUI. »
AFAIK PowerGUI использует ActiveRoles Management Shell for Active Directory »
В домене присутствует только серверы с Windows Server 2003.
примерно так:
$file="file.csv"
$temp="temp.csv"
Get-Content $file|Out-File $temp -Encoding "Unicode"
$header = "FIO","Index"
$csv = Import-CSV $temp -header $header
$csv | Select-Object @{Name="FIO"; Expression={($_.FIO).Split(" ")}}, Index | ForEach-Object {
$index = $_.Index
$user = get-QADUser -SearchRoot 'domain.local/Users' -LastName $_.FIO[0] -FirstName $_.FIO[1] -Initials ($_.FIO[2]).Substring(0,1) -ErrorVariable errs 2>&1
$user | set-QADUser -PostalCode $index -ErrorVariable errs 2>&1
If ($errs.Count -gt 0) { Out-File $file -InputObject ($_.FIO[0]+" "+$_.FIO[1]+" "+$_.FIO[2]+","+$_.Index) -Encoding "Default" }
} | Out-Null
в 1-м блоке исходный файл перекодируется в Unicode (для Import-CSV)
во 2-м блоке полученный файл загружается в переменную $csv
ну и 3-й блок - собственно конвейер обработки
P.S. предполагается, что исходный CSV в ANSI и не содержит заголовка
примерно так: »
Скрипт не работает в части внесения табельного номера в AD. После того как закоментировал строку "| Out-Null" получаю при выполнении сообщение об ошибке:
Set-QADUser : Не удается проверить аргумент для параметра "Identity". Аргумент пустой или имеет значение NULL. Укажите не п
устой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.
O:\_ps\TabNumInAD.ps1:12 знак:22
+ $user | set-QADUser <<<< -PostalCode $index -ErrorVariable errs 2>&1
+ CategoryInfo : InvalidData: (:) [Set-QADUser], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Quest.ActiveRoles.ArsPowerShellSnapIn.Powershell.Cmdlets.Se
tUserCmdlet
сообщение об ошибке »Это штатная ошибка - говорит о том, что объект с заданными условиями не найден, соответственно операция установки параметра проваливается. Для конкретики нужен пример исходного CSV в несколько строк.
Это штатная ошибка - говорит о том, что объект с заданными условиями не найден, соответственно операция установки параметра проваливается. Для конкретики нужен пример исходного CSV в несколько строк. »
Вот пример csv-файла:
Иванов Петр Сергеевич;1234567890
Петров Сергей Иванович;0987654321
пример csv-файла »
дык, разделителем по умолчанию является запятая, другие нужно явно указывать:
$file="file.csv"
$temp="temp.csv"
Get-Content $file|Out-File $temp -Encoding "Unicode"
$header = "FIO","Index"
$csv = Import-CSV $temp -header $header -delimiter ";"
$csv | Select-Object @{Name="FIO"; Expression={($_.FIO).Split(" ")}}, Index | ForEach-Object {
$index = $_.Index
$user = get-QADUser -SearchRoot 'domain.local/Users' -LastName $_.FIO[0] -FirstName $_.FIO[1] -Initials ($_.FIO[2]).Substring(0,1) -ErrorVariable errs 2>&1
$user | set-QADUser -PostalCode $index -ErrorVariable errs 2>&1
If ($errs.Count -gt 0) { Out-File $file -InputObject ($_.FIO[0]+" "+$_.FIO[1]+" "+$_.FIO[2]+";"+$_.Index) -Encoding "Default" }
} | Out-Null
дык, разделителем по умолчанию является запятая, другие нужно явно указывать »
Я - птица, долбящая дерево ;)
Скрипт работает, спасибо огромное!
Dead_Of_Fantasy7
22-07-2014, 17:42
Очень нужна помощь! Как перезапустить службу в Power Shell на локальном компьютере, сделал только это, а дальше заплутал. Помогите, плизззззз!
Dead_Of_Fantasy7, используйте Restart-Service
Dead_Of_Fantasy7
23-07-2014, 08:49
Я пробовал :
PS C:\Users\Руслан>restart-service spooler-PassThru после чего он выдал массив (т.е. параметры сравнения массива) и не дал ни каких результатов .
после чего он выдал массив »
Restart-Service (http://technet.microsoft.com/en-us/library/hh849823.aspx):
Outputs
The output type is the type of the objects that the cmdlet emits.
None or System.ServiceProcess.ServiceController
When you use the PassThru parameter, Restart-Service generates a System.ServiceProcess.ServiceController object that represents the restarted service. Otherwise, this cmdlet does not generate any output.
т.е., как Вы и хотели своим «-PassThru».
Права есть:
Notes
Restart-Service can control services only when the current user has permission to do so. If a command does not work correctly, you might not have the required permissions.
? Зависимые службы от «spooler» есть? Наконец, покажите, что именно:
он выдал »
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.