Добавление групп объявлений на основе местоположения с помощью Powershell, который будет запрашивать ввод информации о том, какое местоположение следует разместить

#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
)

# ...
 

Теперь пользователь не будет случайно вводить название региона или объекта, которого не существует 🙂