Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Добавление информации из csv-файла в AD с обработкой (http://forum.oszone.net/showthread.php?t=211075)

IvanXXL 13-07-2011 09:55 1712312

Добавление информации из csv-файла в AD с обработкой
 
Доброго времени суток.

Прошу помочь в решении посредством PowerShell следующей задачи:
Есть users1s.csv - содержащий два поля - полное ФИО (name) и табельный номер (tabnum), необходимо в AD найти сотрудника с таким ФИО (при условии, что в AD вместо полного отчества есть только инициал) и добавить в поле почтового индекса табельный номер, удалив при этом запись об этом сотруднике из users1s.csv, чтобы в итоге в файле остались только необработанные сотрудники.
P.S. Обращение к AD необходимо реализовать с помощью командлетов PowerGUI.

amel27 14-07-2011 09:42 1712992

Цитата:

Цитата IvanXXL
при условии, что в AD вместо полного отчества есть только инициал »

по каким конкретно атрибутам сравнивать?

Цитата:

Цитата IvanXXL
Обращение к AD необходимо реализовать с помощью командлетов PowerGUI. »

AFAIK PowerGUI использует ActiveRoles Management Shell for Active Directory

IvanXXL 14-07-2011 10:18 1713011

Цитата:

Цитата amel27
по каким конкретно атрибутам сравнивать? »

По фамилии, имени и инициалу отчества.
Цитата:

Цитата IvanXXL
P.S. Обращение к AD необходимо реализовать с помощью командлетов PowerGUI. »

Цитата:

Цитата amel27
AFAIK PowerGUI использует ActiveRoles Management Shell for Active Directory »

В домене присутствует только серверы с Windows Server 2003.

amel27 14-07-2011 14:05 1713214

примерно так:
Код:

$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 и не содержит заголовка

IvanXXL 15-07-2011 06:46 1713766

Цитата:

Цитата amel27
примерно так: »

Скрипт не работает в части внесения табельного номера в 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


amel27 15-07-2011 08:13 1713785

Цитата:

Цитата IvanXXL
сообщение об ошибке »

Это штатная ошибка - говорит о том, что объект с заданными условиями не найден, соответственно операция установки параметра проваливается. Для конкретики нужен пример исходного CSV в несколько строк.

IvanXXL 15-07-2011 08:30 1713789

Цитата:

Цитата amel27
Это штатная ошибка - говорит о том, что объект с заданными условиями не найден, соответственно операция установки параметра проваливается. Для конкретики нужен пример исходного CSV в несколько строк. »

Вот пример csv-файла:
Код:

Иванов Петр Сергеевич;1234567890
Петров Сергей Иванович;0987654321


amel27 15-07-2011 08:42 1713795

Цитата:

Цитата IvanXXL
пример 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


IvanXXL 15-07-2011 08:53 1713800

Цитата:

Цитата amel27
дык, разделителем по умолчанию является запятая, другие нужно явно указывать »

Я - птица, долбящая дерево ;)

Скрипт работает, спасибо огромное!

Dead_Of_Fantasy7 22-07-2014 17:42 2379816

Вложений: 3
Очень нужна помощь! Как перезапустить службу в Power Shell на локальном компьютере, сделал только это, а дальше заплутал. Помогите, плизззззз!

Kazun 22-07-2014 18:26 2379849

Dead_Of_Fantasy7, используйте Restart-Service

Dead_Of_Fantasy7 23-07-2014 08:49 2380087

Я пробовал :
PS C:\Users\Руслан>restart-service spooler-PassThru после чего он выдал массив (т.е. параметры сравнения массива) и не дал ни каких результатов .

Iska 23-07-2014 10:49 2380122

Цитата:

Цитата Dead_Of_Fantasy7
после чего он выдал массив »

Restart-Service:
Цитата:

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» есть? Наконец, покажите, что именно:
Цитата:

Цитата Dead_Of_Fantasy7
он выдал »



Время: 15:30.

Время: 15:30.
© OSzone.net 2001-2025