Сокращение строки на единицу, пока в AD Powershell не будет найден пользователь - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь создать цикл Powershell, который сократит строку до двадцати символов, а затем сравнивает ее с текущими пользователями Active Directory, и, если она существует, удаляет один символ с конца, а затем проверяет снова.Он будет продолжать делать это, пока не найдет строку, которая не является текущим пользователем.Это то, что у меня есть в настоящее время:

$uName = (Read-Host "New User Name")
if ($uName.length -gt 20) {
    $uNameSAM = $uName.SubString(0, 20)
    foreach ($uNameSAMCheck in $uNameSAM) {
    Write-Host "`nDue to length limitations shortening Name to:  $uNameSAM`n" -Foreground Red
}else {
    $uNameSAM  = $uName
}
}

Это хорошо работает для сокращающей части, но я не уверен, как пройти проверку на соответствие AD, если введенное имя уже существует и, если это так, сокращает егоснова и снова проверяя и т. д.

1 Ответ

0 голосов
/ 07 мая 2019

Как упоминает Райли, это своего рода необычная схема, которую нужно применять, но не позвольте мне остановить вас.

Самый простой способ сделать это - использовать цикл в некоторой форме, здесь я думаю, что цикл while может быть уместным.

$Username = Read-Host -Prompt "New User Name"
if ($Username.length -gt 20) {
    $SamAccountName = $Username.SubString(0, 20)
    Write-Warning "Due to length limitations shortening Name to: $uNameSAM"
}
else {
    $SamAccountName = $Username
}

while (Get-ADUser -Filter "SamAccountName -eq $SamAccountName") {
    $SamAccountName = $SamAccountName.Substring(0, $SamAccountName.Length - 1)
}

Write-Host -ForegroundColor Green "'$SamAccountName' is available!"

Есть много возможных подходов. Этот конкретный использует тот факт, что вы можете использовать принуждения родного типа PS в свою пользу. Цикл while (а также операторы if, циклы until и т. Д.) Ожидают логического результата. Если командлет вообще возвращает любой сложный объект, он обычно будет приведен к $true. Если он возвращает пустой / нулевой результат, он будет приведен к $false.

Это поведение немного сложнее при работе с базовыми типами данных, такими как целые числа, строки и т. П., Но для работы со сложными объектами это очень простой способ спросить "дала ли мне эта команда любой выход". В случае Get-ADUser -Filter, если фильтр не соответствует пользователю, выходные данные не генерируются.

Мы не хотим использовать Get-ADUser -Identity, потому что это, к сожалению, приведет к завершающей ошибке, если он не найдет запрошенного пользователя. Это может немного раздражать, поэтому я выбрал метод -Filter.

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