Powershell 似乎存储了多次按下 Enter 键

Powershell 似乎存储了多次按下 Enter 键

我正在编写一个 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

相关内容