#powershell #active-directory
Вопрос:
В настоящее время у меня есть скрипт powershell, который я использую для добавления пользователей в определенные группы объявлений, и он предлагает мне ввести имя пользователя, а затем добавить эти группы в рекламную учетную запись пользователей. Что я хотел бы сделать, так это добавить еще одно приглашение в этот скрипт для запроса ввода для групп объявлений, специфичных для региона. Например, я хочу добавить группу (Регион) — Прием, но для региона я хочу, чтобы мне было предложено указать фактический регион. Ниже приведен сценарий, который у меня сейчас есть :
"Group - 1","Group - 2" |
Add-ADGroupMember -Members `
(Read-Host -Prompt "Enter User Name")
В идеале я бы хотел, чтобы он функционировал и выглядел точно так же, но просто добавьте больше групп вверху, а затем сценарии подсказок будут ниже этого. Есть какие-нибудь идеи о том, как это вообще сделать? Я не очень хорош в таких вещах, ха-ха
Примером того, как будут выглядеть группы, являются :
"Group - 1","Group - 2", "(Region) Admissions", "(Facility) Admissions" |
Add-ADGroupMember -Members `
(Read-Host -Prompt "Enter User Name")
Где (Region)
и (Facility)
что я хочу, чтобы он запрашивал у меня информацию об этом, и ввод заменит эти слова
Ответ №1:
Вы можете Read-Host
прочитать значения от пользователя, а затем использовать расширяемую строку или -f
оператор, чтобы добавить их в строку шаблона:
# Ask for variable input form user
$regionName = Read-Host 'Give me a region!'
$facilityName = Read-Host 'Give me a facility!'
# Construct group names based on input
$regionGroupName = "${regionName} Admissions"
$facilityGroupName = "${facilityName} Admissions"
# Define the static group names
$staticGroups = "Group 1", "Group 2"
# Add the group memberships
@(
$staticGroups
$regionGroupName
$facilityGroup
) |Add-ADGroupMember -Members (Read-Host "Input user name")
Но лучшим решением может быть параметризация этих переменных:
param(
[Parameter(Mandatory)]
[string]$RegionName,
[Parameter(Mandatory)]
[string]$FacilityName,
[Parameter(Mandatory)]
[string]$UserName
)
# Construct group names based on input
$regionGroupName = "${regionName} Admissions"
$facilityGroupName = "${facilityName} Admissions"
# Define the static group names
$staticGroups = "Group 1", "Group 2"
# Add the group memberships
@(
$staticGroups
$regionGroupName
$facilityGroup
) |Add-ADGroupMember -Members $UserName
В этот момент мы можем начать заставлять PowerShell накладывать ограничения на входные значения:
param(
[Parameter(Mandatory)]
[ValidateSet("North", "East", "South", "West", "Center")]
[string]$RegionName,
[Parameter(Mandatory)]
[ValidateSet("HQ", "Satelite", "Mobile")]
[string]$FacilityName,
[Parameter(Mandatory)]
[string]$UserName
)
# ...
Теперь пользователь не будет случайно вводить название региона или объекта, которого не существует 🙂