![]() |
Параметр -Path в New-ADUser, как подставлять если структура AD большая.
Товарищи, доброго времени суток.
Есть скрипт для добавления пользователя в AD. Структура AD очень большая, с большим количеством OU для пользователей в 4 и 5 колене. Есть окно формы - Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $form = New-Object System.Windows.Forms.Form $form.Text = 'Новый сотрудник' $form.Size = New-Object System.Drawing.Size(300,160) $form.StartPosition = 'CenterScreen' $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Point(40,70) $OKButton.Size = New-Object System.Drawing.Size(75,23) $OKButton.Text = 'OK' $OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK $form.AcceptButton = $OKButton $form.Controls.Add($OKButton) $CancelButton = New-Object System.Windows.Forms.Button $CancelButton.Location = New-Object System.Drawing.Point(170,70) $CancelButton.Size = New-Object System.Drawing.Size(75,23) $CancelButton.Text = 'Cancel' $CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel $form.CancelButton = $CancelButton $form.Controls.Add($CancelButton) $label = New-Object System.Windows.Forms.Label $label.Location = New-Object System.Drawing.Point(10,20) $label.Size = New-Object System.Drawing.Size(280,20) $label.Text = 'Подразделение' $form.Controls.Add($label) $textBox = New-Object System.Windows.Forms.TextBox $textBox.Location = New-Object System.Drawing.Point(10,40) $textBox.Size = New-Object System.Drawing.Size(260,20) $form.Controls.Add($textBox) $form.Topmost = $true $form.Add_Shown({$textBox.Select()}) $result = $form.ShowDialog() if ($result -eq [System.Windows.Forms.DialogResult]::OK) { $x = $textBox.Text $x } куда вводим название нужной OU, например UIT.GK, вот полный путь до нее в AD - ou=uit.gk,ou=ui,ou=users,ou=base,dc=domain,dc=ru Далее есть переменная - $SetOU = get-ADOrganizationalUnit -filter 'Name -like $x' -SearchScope 'Subtree' -SearchBase "ou=base,dc=domain,dc=ru" Она вроде как находит OU, но не может подставить в параметр -Path Ошибка - New-ADUser : Не удается преобразовать "System.Object[]" в тип "System.String", необходимый для параметра "Path". Указанный метод не поддерживается. Впр логично, то, что объект не может преобразоваться в строку, поэтому прошу помощи, а то я завис =) По любому, кто-то, да сталкивался. Как сделать правильно? |
$SetOU - возращает несколько OU( "System.Object[]" - массив) , поэтому и ошибка. Указывайте более четкий фильтр.
|
Kazun, да, Вы правы, почему-то двоит запись. Не понятно кстати почему.
Подскажите пожалуйста, какой более четкий фильтр чем 'Name -like $x', это же указание четкого имени OU в домене. |
Цитата:
1. Ограничить область действия или добавить в фильтр доп.параметр, скажем описание OU. -SearchScope 'Subtree' -SearchBase "ou=base,dc=domain,dc=ru" - Ограничить область поиска 2. Придумать фильтр по свойствам $SetOU = $SetOU | Where-Object {фильтр} |
Kazun, Вы знаете, дело в том, что у меня куча OU с одинаковыми названиями в разных подразделениях по местоположению, поэтому возвращается двойное значение, из-за этого и ошибка.
Подскажите, как через where-object выбрать именно то OU где находится Instance-сотрудник, т.е. сотрудник с которого я делаю копию нового. |
Зачем тогда поиск OU,если у сотрудника уже есть путь.
Код:
$SetOU="CN=UserInstance,OU=MyComapny,OU=RU,DC=contoso,DC=com".split(",",2)[1] |
Путь есть, но он постоянно другой, так как сотрудники создаются в разных OU, через 2-3 колена друг от друга. Я не совсем понял выражение .split(",",2)[1]
Я думал, как бы выцепить у сотрудника образца значение атрибута "distinguishedName", в нем же указан полный путь, но что-то так и не разобрался. Это было бы вообще идеально. |
Цитата:
|
Kazun, Все, разобрался. Получилось еще лучше чем надо =)
Спасибо огромное за помощь!!!!! +10 в карму |
Время: 00:49. |
Время: 00:49.
© OSzone.net 2001-