如何在powershell中执行击键?
Posted
技术标签:
【中文标题】如何在powershell中执行击键?【英文标题】:How to perform keystroke inside powershell? 【发布时间】:2013-07-24 20:16:10 【问题描述】:我有 ps1 脚本可以从 vmware 集群环境中获取一些信息。
在 ps1 脚本的某些地方需要 ENTER 键击键。
那么,该怎么做呢?
-谢谢
【问题讨论】:
这是我写的脚本,需要 ENTER 键击。而不是一直按 enter 按钮,我只是想自动化。 为什么需要按回车?你在执行 read-host 吗? Myscript 从多台机器连续登录/注销。注销时需要确认,所以我必须点击 enter 按钮。这就是我想要自动化的原因。 【参考方案1】:如果我理解正确,您希望 PowerShell 将 ENTER 击键发送到某个交互式应用程序吗?
$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('title of the application window')
Sleep 1
$wshell.SendKeys('~')
如果该交互式应用程序是 PowerShell 脚本,只需使用 PowerShell 窗口标题栏中的任何内容作为 AppActivate 的参数(默认为 powershell.exe 的路径)。为避免歧义,您可以使用title 'new window title'
命令让您的脚本重新命名自己的窗口。
几点说明:
波浪号 (~) 表示 ENTER 击键。您也可以使用ENTER
,尽管它们并不相同 - 这是键盘的 ENTER 键。此处提供完整列表:http://msdn.microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx。
Sleep 1
语句的原因是等待 1 秒,因为激活窗口需要一点时间,如果您立即调用 SendKeys,它会将密钥发送到 PowerShell窗口,或无处可去。
请注意,如果您在等待的那一秒内键入任何内容或单击鼠标,这可能会发生故障,从而阻止您使用 AppActivate 激活的窗口处于活动状态。您可以尝试减少时间以找到系统上可靠足够的最小值(Sleep 接受小数,因此您可以尝试 0.5 半秒)。我发现在我的 2.6 GHz Core i7 Win7 笔记本电脑上,任何小于 0.8 秒的故障率都很高。为了安全起见,我使用 1 秒。
重要警告: 如果您使用此方法发送密码,请格外小心,因为在调用 AppActivate 之间会激活不同的窗口并调用 SendKeys 将导致密码以纯文本形式发送到不同的窗口!
有时 wscript.shell 的 SendKeys 方法可能有点古怪,所以如果遇到问题,请将上面的第四行替换为:
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait('~');
【讨论】:
感谢您在末尾添加了 Add-Type。把我的头撞在墙上一个小时试图让我的脚本正常工作。 使用Wscript.Shell
和使用SendKeys.SendWait
有什么区别?一个比另一个更好吗?【参考方案2】:
function Do-SendKeys
param (
$SENDKEYS,
$WINDOWTITLE
)
$wshell = New-Object -ComObject wscript.shell;
IF ($WINDOWTITLE) $wshell.AppActivate($WINDOWTITLE)
Sleep 1
IF ($SENDKEYS) $wshell.SendKeys($SENDKEYS)
Do-SendKeys -WINDOWTITLE Print -SENDKEYS 'TABTAB'
Do-SendKeys -WINDOWTITLE Print
Do-SendKeys -SENDKEYS '%f4'
【讨论】:
【参考方案3】:此外,$wshell = New-Object -ComObject wscript.shell;
还帮助了一个在后台运行的脚本,它只需要添加$wshell
就可以正常工作。修复它作为后台运行! [Microsoft.VisualBasic.Interaction]::AppActivate("App Name")
【讨论】:
以上是关于如何在powershell中执行击键?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Windows Server 2008 R2上开启Windows Power Shell ISE
powershell 更新power shell中的帮助系统。第二个文件在Windows中显示帮助文件。第三个文件显示来自在线来源的帮助。