Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Параметр -Path в New-ADUser, как подставлять если структура AD большая.

Ответить
Настройки темы
PowerShell - [решено] Параметр -Path в New-ADUser, как подставлять если структура AD большая.

Пользователь


Сообщения: 63
Благодарности: 6

Профиль | Отправить PM | Цитировать


Товарищи, доброго времени суток.

Есть скрипт для добавления пользователя в 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
Благодарности: 861

Профиль | Отправить PM | Цитировать


$SetOU - возращает несколько OU( "System.Object[]" - массив) , поэтому и ошибка. Указывайте более четкий фильтр.

Отправлено: 10:50, 03-10-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 63
Благодарности: 6

Профиль | Отправить PM | Цитировать


Kazun, да, Вы правы, почему-то двоит запись. Не понятно кстати почему.

Подскажите пожалуйста, какой более четкий фильтр чем 'Name -like $x', это же указание четкого имени OU в домене.

-------
Человек человеку - друг, а зомби зомби - зомби


Отправлено: 11:02, 03-10-2018 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Цитата dyshes90:
Kazun, да, Вы правы, почему-то двоит запись. Не понятно кстати почему.
Подскажите пожалуйста, какой более четкий фильтр чем 'Name -like $x', это же указание четкого имени OU в домене. »

1. Ограничить область действия или добавить в фильтр доп.параметр, скажем описание OU.
-SearchScope 'Subtree' -SearchBase "ou=base,dc=domain,dc=ru" - Ограничить область поиска

2. Придумать фильтр по свойствам
$SetOU = $SetOU | Where-Object {фильтр}

Отправлено: 11:11, 03-10-2018 | #4


Пользователь


Сообщения: 63
Благодарности: 6

Профиль | Отправить PM | Цитировать


Kazun, Вы знаете, дело в том, что у меня куча OU с одинаковыми названиями в разных подразделениях по местоположению, поэтому возвращается двойное значение, из-за этого и ошибка.

Подскажите, как через where-object выбрать именно то OU где находится Instance-сотрудник, т.е. сотрудник с которого я делаю копию нового.

-------
Человек человеку - друг, а зомби зомби - зомби


Отправлено: 11:44, 03-10-2018 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Зачем тогда поиск OU,если у сотрудника уже есть путь.

Код: Выделить весь код
$SetOU="CN=UserInstance,OU=MyComapny,OU=RU,DC=contoso,DC=com".split(",",2)[1]
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:49, 03-10-2018 | #6


Пользователь


Сообщения: 63
Благодарности: 6

Профиль | Отправить PM | Цитировать


Путь есть, но он постоянно другой, так как сотрудники создаются в разных OU, через 2-3 колена друг от друга. Я не совсем понял выражение .split(",",2)[1]

Я думал, как бы выцепить у сотрудника образца значение атрибута "distinguishedName", в нем же указан полный путь, но что-то так и не разобрался. Это было бы вообще идеально.

-------
Человек человеку - друг, а зомби зомби - зомби


Отправлено: 11:54, 03-10-2018 | #7


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Kazun:
Придумать фильтр по свойствам
$SetOU = $SetOU | Where-Object {фильтр} »
Оно же всё равно будет возвращать массив, но только из одного элемента. И всё-равно надо писать $SetOU[0]

Отправлено: 12:03, 03-10-2018 | #8


Пользователь


Сообщения: 63
Благодарности: 6

Профиль | Отправить PM | Цитировать


Kazun, Все, разобрался. Получилось еще лучше чем надо

Спасибо огромное за помощь!!!!! +10 в карму

-------
Человек человеку - друг, а зомби зомби - зомби


Отправлено: 12:03, 03-10-2018 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Параметр -Path в New-ADUser, как подставлять если структура AD большая.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход