PowerShell do-until循环未按预期工作 非Y/N输入仍继续执行脚本
故障根因
原代码循环终止条件存在两个错误,直接导致输入校验完全失效:
- 变量语法错误:PowerShell单引号内的内容不会做变量解析,原代码写的
'$null'是普通字符串,不是代表空值的内置变量$null,判断条件从「输入不为空」变成了「输入不等于字符串$null」,空值判断逻辑完全失效。 - 校验逻辑缺失:终止条件没有判断输入是否为合法的Y/N值,只要用户输入的内容不是字符串
$null,不管输入乱码、数字、其他字母,都会直接满足退出条件跳出循环,不会重新提示。
修正后代码
$msg = 'Does this Share contain Sensitive Data? [Y/N]' do { $response = Read-Host -Prompt $msg # 自动忽略输入前后的空格,兼容大小写输入 $cleanResponse = $response.Trim().ToLower() if ($cleanResponse -eq 'n') { $sdata = "No" } elseif ($cleanResponse -eq 'y') { $sdata = "(Sensitive)" } else { # 非法输入时清空响应值,触发继续循环 $cleanResponse = $null } } until ($null -ne $cleanResponse)
修正后逻辑:用户输入前后带空格、输入大写Y/N都能正常识别,输入非法内容、直接回车留空时会重复展示提示,只有输入Y/y/N/n时才会退出循环继续执行后续逻辑。
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

