Войти

Показать полную графическую версию : [решено] Массовое изменения информации в AD


Fantastish
13-07-2016, 13:50
Доброго времени суток.
Коллеги окажите помощь в решении тривиальной задачи.
Цель:
1 скрипт:
Необходимо выгрузить в csv(txt) для дальнейшей обработки поля разделенный запятой (табуляцией) в формате представленном ниже с возможностью выбора OU (без лишних добавок)
Пример: Иванов Иван Иванович, Отдел строительных решений, Главный специалист, Главный специалист Отдела строительных решений
$_.directreports | Foreach {
$server = $_.split(",") -match "DC=" -replace "DC=" -join "."
ФИО (или для дальнейшей обработки проще "cn") Отдел, Должность, Описание
2 скрипт:
Далее будут изменены поля Отдел, Должность, Описание и их необходимо обновить в AD игнорируя значения которые не изменялись.
Если проще добавить тока измененные данные отредактированного csv (txt) пойдет
Изменения так же должны происходить в определенной OU
Спасибо большое.

Kazun
13-07-2016, 14:11
# Выгрузить
$prop = Write-Output samaccountname displayname department title description
Get-ADUser -Filter * -SearchBase "OU=Test,DC=Contoso,DC=Com" -Properties $prop | Select $prop | Export-Csv users.csv -NoTypeInformation -Encoding UTF8

# Обновление
$prop = Write-Output samaccountname displayname department title description
Import-CSV users.csv | Foreach {
$cuser = $_
$user = Get-ADUser -Filter "SamAccountName -eq '$($_.samaccountname)'" -Properties $prop
if($user) {
$prop | Where {$user."$_" -ne $cuser."$_"} | Foreach {
Set-ADUser $user -Replace @{"$_" = $cuser."$_"}
}
}
}

Fantastish
13-07-2016, 14:24
Спасибо огромной, как всегда быстро среагировали, буду тестировать.

Fantastish
13-07-2016, 15:27
Странно но выдал ошибку
Select-Object : Не удается преобразовать System.Management.Automation.PSObject в один из следующих типов {System.String, System.Management.Automation.ScriptBlock}.
строка:3 знак:93
+ Get-ADUser -Filter * -SearchBase "OU=Users,DC=exp,DC=ru" -Properties $prop | Select <<<< $prop | Export-Csv d:\users.csv -NoTypeInformation -Encoding UTF8
+ CategoryInfo : InvalidArgument: (:) [Select-Object], NotSupportedException
+ FullyQualifiedErrorId : DictionaryKeyUnknownType,Microsoft.PowerShell.Commands.SelectObjectCommand

Kazun
13-07-2016, 15:53
В следующий раз уточняйте версию PowerShell:
$prop = "samaccountname","displayname","department","title","description"

Fantastish
13-07-2016, 15:55
Прощу прощения мало в этом разбираюсь еще, во втором скрипте на обновление так же использую кавычки?

Проверяю обновление
Import-Module ActiveDirectory
$prop = "samaccountname","displayname","department","title","description"
Import-CSV D:\users.csv | Foreach {
$cuser = $_
$user = Get-ADUser -Filter "SamAccountName -eq '$($_.samaccountname)'" -Properties $prop
if($user) {
$prop | Where {$user."$_" -ne $cuser."$_"} | Foreach {
Set-ADUser $user -Replace @{"$_" = $cuser."$_"
}
}
}
}
Get-ADUser : Фильтр поиска не опознан
строка:5 знак:20
+ $user = Get-ADUser <<<< -Filter "SamAccountName -eq '$($_.samaccountname)'" -Properties $prop
+ CategoryInfo : NotSpecified: (:) [Get-ADUser], ADException
+ FullyQualifiedErrorId : Фильтр поиска не опознан,Microsoft.ActiveDirectory.Management.Commands.GetADUser

Kazun
13-07-2016, 16:43
Вывод Import-CSV users.csv

Fantastish
13-07-2016, 17:25
Однако

samaccountname,"displayname","department","title","description"
---------------------------------------------------------------
i.ivanov,"������� ������ ����������","����� ������������� �������������� ������","������� ����������","������� ���������� ������ ������������� �������������� ������"

пере сохранил в UTF8 и ошибка та же
Import-CSV d:\users.csv

samaccountname,"displayname","department","title","description"
---------------------------------------------------------------
i.ivanov,"Иванов Иван Викторович","Отдел сопровождения информационных систем","Ведущий специалист","Ведущий специалист Отдела сопровождения информационных систем"

Fantastish
14-07-2016, 08:48
Уважаемый Kazun, есть ли возможность подправить скрипт?

Kazun
14-07-2016, 10:13
Я не вижу проблем в скрипте. Обновите powershell и .Net до актуальной версии на машине. При выгрузке точно выполняли команду ? Export-Csv users.csv -NoTypeInformation -Encoding UTF8

Fantastish
14-07-2016, 10:19
да, концовку не изменял, лишь потом открыл csv и отредактировал
А можно пару ссылку откуда что обновить, я ставил пакет администрирования для win7
по поводу краказябр, это я глупость совершил в Excel открыл файл и отредактировал
Мне надо обновиться до версии 4.0?

Fantastish
14-07-2016, 11:59
Обновился до 4 версии но ошибка осталось не обновляет данные
Get-ADUser : Фильтр поиска не опознан
строка:5 знак:10
+ $user = Get-ADUser -Filter "SamAccountName -eq '$($_.samaccountname)'" -Propert ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ADUser], ADException
+ FullyQualifiedErrorId : Фильтр поиска не опознан,Microsoft.ActiveDirectory.Management.Commands.GetADUser

Fantastish
14-07-2016, 13:35
Во общем я понял в чем была проблема, отредактировав csv я убрал из него все ""
тогда при выводе
Import-CSV users.csv
samaccountname : i.ivanov
displayname : Иванов Иван Викторович
department : Отдел сопровождения информационных систем
title : Ведущий специалист
description : Ведущий специалист Отдела сопровождения информационных систем
а далее скрипт уже отработал без проблем




© OSzone.net 2001-2012