如何在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.shellSendKeys 方法可能有点古怪,所以如果遇到问题,请将上面的第四行替换为:

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中执行击键?的主要内容,如果未能解决你的问题,请参考以下文章

powershell 模拟powershell中的击键

applescript:如何在多个窗口中执行击键

如何使用Windows Power Shell

如何在Windows Server 2008 R2上开启Windows Power Shell ISE

powershell 更新power shell中的帮助系统。第二个文件在Windows中显示帮助文件。第三个文件显示来自在线来源的帮助。

SQL Server自动化运维系列——批量执行SQL脚本(Power Shell)