Powershell似乎存储了多次按Enter键


1

我正在开发一个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的新手,所以我猜这是有更好的方法。有什么建议?

Answers:


3

在此输入图像描述

你可以弹出某种消息框。有几种不同的方法可以做到这一点。这是一个简单的方法:

$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的解释,请参阅弹出方法


1

您可以更改脚本,使输入应为y / yes或n / no。如果它不是其中之一,请再次提示。

这将消除意外确认更改,但需要您专门按一个键然后输入以确认或跳过。

可能更好的方法来做到这一点,但这是我最初的想法。

顺便说一句,你可以跳过这$PROMPT = $PROMPT.ToLower()条线。-eq不区分大小写,因此以下工作:

PS C:\> 'NO' -eq 'no'
True

如果您希望字符串比较区分大小写,请查找以ac开头的运算符,例如-ceq


谢谢,我不知道!我想我可以做这样的事情,只是想知道它为什么要保存多个输入 - 我觉得如果我多次键入“y”可能会做同样的事情,虽然这很难意外
Krixvar 2015年

@Krixvar,Read-Host在你按下回车键的同时输入你输入的所有内容,所以如果你按两次y键,你最后会得到一串'yy'等着你按回车键(如果你确实按了回车键就会失败,因为它不是这是一个有效的回应。)至于为什么......我不知道。我甚至不知道它是否是PowerShell独有的。你可以通过运行一个长时间运行的命令来看到这一点,在它运行时点击输入几次,然后当它完成时你会看到一堆提示在它处理这些按键时弹出。
Windos 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.