У меня странная проблема. Хотите создать сценарий, который вводит пользователя для вставки строки, а затем повторяет цикл во входном запросе, пока не останется пустым.
Сценарий хорошо работает в PowerGUI, продолжая запрашивать входной запрос, пока я не нажму только [Enter], после чего сценарий продолжится. Проблема возникает, когда я пытаюсь использовать скрипт в оболочке PowerShell. Нажатие только [Enter] позволяет циклу DoWhile продолжать предлагать мне запрос на ввод без возможности его остановить, если это не CTRL-Z.
Некоторые идеи почему?
[Int] $num = 1
[Array] $conts = @()
do {
$a = read-host "Indirizzo mail Contatto $num`?"
if ($a -ne $null) {
$num++
$conts += $a
}
} while($a -ne $null)
Function CreaContatto {
$mailContact = $args
$aliasContact = $args -replace ("@","_")
New-MailContact -ExternalEmailAddress $mailContact -Name $mailContact -Alias $aliasContact
}
ForEach ($cont in $conts) {CreaContatto $cont}
2 ответа
Я предполагаю, что PowerGUI реализует настраиваемый хост и возвращает ноль из read-host
, когда нет ввода. Стандартный хост PowerShell этого не делает, он возвращает пустую строку (если вы не нажмете ctrl-z, что сигнализирует об окончании файла). Поскольку оба являются ложными, вы можете сделать это:
do {
$a = read-host "Indirizzo mail Contatto $num`?"
if ($a) {
$num++
$conts += $a
}
} while($a)
Дело в том, что $a
не равно нулю при нажатии Enter, это новая строка. Вы можете убедиться в этом, если добавите write-host $a
под своим if
выпиской.
В этом случае я бы предложил использовать регулярное выражение:
do {
$a = read-host "Indirizzo mail Contatto $num`?"
if ($a -ne $null) {
$num++
$conts += $a
}
} while($a -match '.+')
Это говорит о том, что $a
должен быть одним или несколькими символами.
Похожие вопросы
Новые вопросы
powershell
PowerShell - это кроссплатформенная утилита командной строки и сценариев от Microsoft. Используйте этот тег только для вопросов о написании и выполнении сценариев PowerShell. Вопросы программирования, относящиеся к кроссплатформенной версии PowerShell Core (Windows, macOS и Linux), должны быть помечены [powershell-core]. Вопросы о системном администрировании следует задавать в случае сбоя суперпользователя или сервера.