我正在编写一个 PowerShell 脚本,通过从用户的名字和姓氏生成用户名,从 csv 文件将用户添加到 Active Directory。在创建初始用户名(首字母 + 姓氏)后,它会检查此用户名是否已存在。如果存在,它会要求确认尝试首字母 + 中间字母 + 姓氏。目前,我使用以下代码执行此操作:
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")
{
...
}
这似乎有效,但如果我不小心按了两次回车键,它不仅会确认当前提示,还会确认下一个提示。我对 PowerShell 还很陌生,所以我猜有更好的方法可以做到这一点。有什么建议吗?
答案1
您可以弹出某种消息框。有几种不同的方法可以做到这一点。以下是一种简单的方法:
$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 的解释,请参阅Popup 方法。
答案2
您可以修改脚本,使输入为 y/yes 或 n/no。如果不是其中之一,请再次提示。
这将消除意外确认更改的情况,但需要您专门按下一个键然后按回车键确认或跳过。
可能有更好的方法来做到这一点,但这是我的初步想法。
顺便说一句,您可以跳过该$PROMPT = $PROMPT.ToLower()
行。-eq
不区分大小写,因此以下内容有效:
PS C:\> 'NO' -eq 'no'
True
如果希望字符串比较区分大小写,请查找以 ac 开头的运算符,例如-ceq
。