1

Я работал над сценарием PowerShell для добавления пользователей в Active Directory из CSV-файла путем создания имен пользователей по их именам и фамилиям. После создания начального имени пользователя (первое имя + фамилия) он проверяет, существует ли это имя пользователя. Если это так, он запрашивает подтверждение, чтобы попробовать первый инициал + средний инициал + фамилия. В настоящее время я делаю это с помощью следующего кода:

write-host "Default username is already taken. Please press enter tocontinue or type NO to skip importing this user.
$PROMPT = Read-Host '>'
$PROMPT = $PROMPT.ToLower()

#If not skipped, continue with logic
if ($PROMPT -ne "no")
{
    ...
}

Кажется, это работает, но если я случайно нажму Enter, например, два раза, это не только подтвердит текущее приглашение, но и следующее. Я довольно новичок в PowerShell, поэтому я предполагаю, что есть лучший способ сделать это. Любой совет?

2 ответа2

3

Вы можете открыть какое-то окно сообщения. Есть несколько разных способов сделать это. Вот один простой способ:

$wshell = New-Object -ComObject Wscript.Shell
$msg = "Default username is already taken. Continue?"
$r = $wshell.Popup($msg, 0, "Warning", 4)
if ($r -eq 6)
{
    # Continue ...
}

Для объяснения таинственных чисел 4 и 6 см. Метод всплывающих окон.

1

Вы можете изменить свой сценарий так, чтобы ввод был y/yes или n/no. Если это не так, подскажите еще раз.

Это исключило бы случайное подтверждение изменения, но потребовало бы, чтобы вы специально нажали клавишу, а затем введите, чтобы подтвердить или пропустить.

Возможно, лучшие способы сделать это, но это моя первоначальная мысль.

Кроме того, вы можете пропустить строку $PROMPT = $PROMPT.ToLower() . -eq не чувствителен к регистру, поэтому работает следующее:

PS C:\> 'NO' -eq 'no'
True

Если вы хотите, чтобы сравнение строк учитывало регистр символов , ищите операторы, начинающиеся с ac, например -ceq .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .