Powershell + AD, изменение вывода на основе первой буквы имени пользователя - PullRequest
0 голосов
/ 30 мая 2018

Я создаю сценарий PowerShell для создания учетной записи Active Directory.Домашний каталог для пользователя основан на первой букве имени пользователя в определенном диапазоне:

  • AC = Users_01 $ \ username
  • DH = Users_02 $ \ username
  • .. и т.д.

Я изо всех сил пытаюсь реализовать что-то, что выводит их необходимый каталог.Мне удалось заставить его работать с одним набором каталогов, однако я не могу понять, как изменить вывод, основываясь на первой букве их имени.

$SAMAccountName = $Surname+$Initial
$SAMAccountLower = $SAMAccountName.ToLower()
$UserPrincipalName = $Surname+$Initial
$HD = "U"
$HDir = "\\RBHFILRED002\"
$AC = "Users_01$\"
$DH = "Users_02$\"
$IM = "Users_03$\"
$NS = "Users_04$\"
$TZ = "Users_05$\"

New-ADUser -path "REDACTED" -SamAccountName $Surname$Initial -Name $DisplayName -DisplayName $DisplayName -GivenName $GivenName -Surname $Surname -EmailAddress $Mail -UserPrincipalName $Surname$Initial@REDACTED -Title $title -HomeDrive $HD -HomeDirectory $HDir$Surname$Initial -Description $Description -ChangePasswordAtLogon $true -PasswordNeverExpires $false -AccountPassword $defpassword -Enabled $true -PassThru

Я думаю, что мне в основном нужно уточнить по первой буквефамилии и отсортируйте ее в одной из групп, чтобы затем вывести нужную папку «Пользователи» для домашнего каталога.

1 Ответ

0 голосов
/ 30 мая 2018

Вы можете сделать это:

$AC = 97..99 | ForEach-Object { [char]$_ }
$DH = 100..104 | ForEach-Object { [char]$_ }
$IM = 105..109 | ForEach-Object { [char]$_ }
$NS = 110..115 | ForEach-Object { [char]$_ }
$TZ = 116..122 | ForEach-Object { [char]$_ }

$HomePath = Switch ($Surname[0]) {
    {$_ -in $AC} { 'Users_01$\' }
    {$_ -in $DH} { 'Users_02$\' }
    {$_ -in $IM} { 'Users_03$\' }
    {$_ -in $NS} { 'Users_04$\' }
    {$_ -in $TZ} { 'Users_05$\' }
}

При этом используются коды символов ASCII для (строчных букв) a..z для создания различных массивов букв, а затем используется блок Switch для сравнения первогобуква $Surname (с помощью оператора массива [0]) для каждого массива для указания пути к домашнему каталогу (который затем назначается $HomePath).

В качестве альтернативы вы также можете сделать это:

$HomePath = Switch ([byte][char]$Surname[0]) {
    {$_ -in 97..99} { 'Users_01$\' }
    {$_ -in 100..104} { 'Users_02$\' }
    {$_ -in 105..109} { 'Users_03$\' }
    {$_ -in 110..115} { 'Users_04$\' }
    {$_ -in 116..122} { 'Users_05$\' }
}

Преобразует первую букву фамилии в ее кодовый номер ASCII, а затем использует диапазоны кодов ascii для определения правильного пути.Это решение короче, но, возможно, менее прозрачно / понятно для всех, кому может потребоваться изменить / сохранить ваш код в будущем.

Также (к вашему сведению), если вы используете PowerShell Core, теперь вы можете создать массивсимволы с оператором .. напрямую.Например, вы можете сделать: 'a'..'z' в PowerShell Core.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...