|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Параметр -Path в New-ADUser, как подставлять если структура AD большая. |
|
PowerShell - [решено] Параметр -Path в New-ADUser, как подставлять если структура AD большая.
|
Пользователь Сообщения: 63 |
Товарищи, доброго времени суток.
Есть скрипт для добавления пользователя в 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". Указанный метод не поддерживается. Впр логично, то, что объект не может преобразоваться в строку, поэтому прошу помощи, а то я завис ![]() По любому, кто-то, да сталкивался. Как сделать правильно? |
|
Отправлено: 10:25, 03-10-2018 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать $SetOU - возращает несколько OU( "System.Object[]" - массив) , поэтому и ошибка. Указывайте более четкий фильтр.
|
Отправлено: 10:50, 03-10-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 63
|
Профиль | Отправить PM | Цитировать Kazun, да, Вы правы, почему-то двоит запись. Не понятно кстати почему.
Подскажите пожалуйста, какой более четкий фильтр чем 'Name -like $x', это же указание четкого имени OU в домене. |
------- Отправлено: 11:02, 03-10-2018 | #3 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Цитата dyshes90:
1. Ограничить область действия или добавить в фильтр доп.параметр, скажем описание OU. -SearchScope 'Subtree' -SearchBase "ou=base,dc=domain,dc=ru" - Ограничить область поиска 2. Придумать фильтр по свойствам $SetOU = $SetOU | Where-Object {фильтр} |
|
Отправлено: 11:11, 03-10-2018 | #4 |
Пользователь Сообщения: 63
|
Профиль | Отправить PM | Цитировать Kazun, Вы знаете, дело в том, что у меня куча OU с одинаковыми названиями в разных подразделениях по местоположению, поэтому возвращается двойное значение, из-за этого и ошибка.
Подскажите, как через where-object выбрать именно то OU где находится Instance-сотрудник, т.е. сотрудник с которого я делаю копию нового. |
|
------- Отправлено: 11:44, 03-10-2018 | #5 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 11:49, 03-10-2018 | #6 |
Пользователь Сообщения: 63
|
Профиль | Отправить PM | Цитировать Путь есть, но он постоянно другой, так как сотрудники создаются в разных OU, через 2-3 колена друг от друга. Я не совсем понял выражение .split(",",2)[1]
Я думал, как бы выцепить у сотрудника образца значение атрибута "distinguishedName", в нем же указан полный путь, но что-то так и не разобрался. Это было бы вообще идеально. |
------- Отправлено: 11:54, 03-10-2018 | #7 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата Kazun:
|
|
Отправлено: 12:03, 03-10-2018 | #8 |
Пользователь Сообщения: 63
|
Профиль | Отправить PM | Цитировать Kazun, Все, разобрался. Получилось еще лучше чем надо
![]() Спасибо огромное за помощь!!!!! +10 в карму |
------- Отправлено: 12:03, 03-10-2018 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - [решено] Test-Path некорректно работает если в имени файла есть знаки [ или ] | dosperados | Скриптовые языки администрирования Windows | 2 | 14-04-2016 08:55 | |
CMD/BAT - Цикл в цикле. Подставлять параметр skip | splin0000 | Скриптовые языки администрирования Windows | 2 | 05-06-2015 21:07 | |
Загрузка - Как выключить компьютер если он не вошел в ad | SharkKZ | Microsoft Windows 2000/XP | 14 | 08-04-2014 02:10 | |
Параметр LastLogonTimestamp В AD. | ГрМакс | Microsoft Windows NT/2000/2003 | 5 | 04-12-2008 18:12 | |
структура AD подразделений + GPO | exo | Microsoft Windows NT/2000/2003 | 18 | 07-10-2008 11:25 |
|