Использование цикла ForEach для создания пользовательских объектов
Циклы PowerShell ForEach обычно используются для чтения массива строк. Например, следующий код считывает список контроля доступа (ACL) для каждой папки в дереве каталога c: \ accounts.
$FolderPath = Get-ChildItem -Directory -Path "c:\accounts" -Recurse -Force ForEach ($Folder in $FolderPath) {$Acl = Get-Acl -Path $Folder.FullName}
Но если у вас нет массива данных для чтения, как в примере выше, вы можете использовать диапазон номеров, чтобы повторить команду указанное количество раз. Это полезно, если мы хотим создать определенное количество пользователей Active Directory. Все, что нам нужно сделать, это указать диапазон, а затем использовать цикл ForEach для запуска командлета New-ADUser. Не забудьте, что модуль AD для PowerShell должен быть установлен на устройстве, на котором вы запускаете командлет New-ADUser. Вы можете установить средства удаленного администрирования сервера (RSAT) для доменных служб Active Directory, чтобы установить модуль AD PowerShell.
Создание нового пользователя Active Directory с помощью PowerShell
Давайте кратко рассмотрим создание нового пользовательского объекта AD с помощью командлета New-ADUser.
В приведенном ниже коде создается новый пользователь с именем employee1. Нельзя передать пароль в виде открытого текста с помощью параметра -AccountPassword, поэтому сначала нужно конвертировать его в безопасную строку. Пользователь должен будет изменить пароль при первом входе в систему (-ChangePasswordAtLogon), учетная запись включена по умолчанию (-Enabled).
New-ADUser -Name employee1 -AccountPassword (ConvertTo-SecureString Pas$W0rd!!11 -AsPlainText -Force) -UserPrincipalName employee1@$env:userdnsdomain -ChangePasswordAtLogon $True -Enabled $True
Но что, если нужно создать более одного пользователя? Начинаем с определения диапазона объектов. В этом случае, к примеру, создать 25 пользователей, поэтому 1..25. Затем каждый цикл создает новый объект пользователя AD, используя New-ADUser. Обратите внимание, что я добавляю номер текущего объекта в конец имени учетной записи, используя $ _, и делаю то же самое в параметре -UserPrincipalName.
1..25 | ForEach-Object {New-ADUser -Name employee$_ -AccountPassword (ConvertTo-SecureString Pas$W0rd!!11 -AsPlainText -Force) -UserPrincipalName employee$_@$env:userdnsdomain -ChangePasswordAtLogon $True -Enabled $True}
Вы можете проверить, что пользователи были созданы с помощью командлета Get-ADUser. Здесь перечисляются учетные записи, которые придерживаются стандартного формата имени, а затем перечисляются результаты, чтобы сделать вывод легче для чтения.
Get-ADUser -Filter 'Name -like "employee*"' | Format-List Name, UserPrincipalName
Этот способ прекрасен своей простотой, и вы можете изменить цикл ForEach, чтобы повторять любую команду, которая вам нравится, определенное количество раз.