我有一个奇怪的问题。 想要创建一个脚本,输入用户插入一个字符串,然后再在输入请求中循环,直到留空。
脚本在PowerGUI中运行良好,继续提示输入请求,直到我只按[Enter]而不是脚本继续。 当我尝试在powershell shell上使用脚本时出现问题。 仅按[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}
答案 0 :(得分:2)
事情是,按Enter键时$a
不为空,它是换行符。如果您在write-host $a
声明下方添加if
,则可以看到此消息。
在这种情况下,我建议使用正则表达式:
do {
$a = read-host "Indirizzo mail Contatto $num`?"
if ($a -ne $null) {
$num++
$conts += $a
}
} while($a -match '.+')
这表示$a
必须是一个或多个字符。
答案 1 :(得分:2)
我的猜测是,PowerGUI实现了一个自定义主机,并且在没有输入时从read-host
返回null。标准PowerShell主机不这样做,它返回一个空字符串(除非你点击ctrl-z,它发出文件结束信号)。由于两者都是假的,你可以这样做:
do {
$a = read-host "Indirizzo mail Contatto $num`?"
if ($a) {
$num++
$conts += $a
}
} while($a)