我有ps1脚本从vmware集群环境中获取一些信息。在ps1脚本的某些地方需要按ENTER键。那么,如何做到这一点?
ecbunoof1#
如果我理解正确的话,您希望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'命令让脚本重新命名自己的窗口。几点注意事项:
title 'new window title'
{ENTER}
Sleep 1
有时候wscript.shell的SendKeys方法可能有点古怪,所以如果你遇到问题,用下面的代码替换上面的第四行:
Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.SendKeys]::SendWait('~');
ioekq8ef2#
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 '{TAB}{TAB}' Do-SendKeys -WINDOWTITLE Print Do-SendKeys -SENDKEYS '%{f4}'
h6my8fg23#
向应用程序发送“Enter”键,例如按“OK”。Works great:
Add-Type -AssemblyName microsoft.VisualBasic Add-Type -AssemblyName System.Windows.Forms
#获取所需进程:
$ProcessName = Get-Process -Name Calculator
开始-睡眠-秒数1
#如果该进程实际运行,则将其置于最前面:
If ($ProcessName) { (New-Object -ComObject.Wscript.Shell).AppActivate((Get-Process $ProcessName -ErrorAction SilentlyContinue).MainWindowTitle) }
#向应用发送回车键:
[Microsoft.VisualBasic.Interaction]::AppActivate($ProcessName.ProcessName) [System.Windows.Forms.SendKeys]::SendWait({'~'})
rm5edbpk4#
此外,$wshell = New-Object -ComObject wscript.shell;帮助了一个在后台运行的脚本,它只需要添加$wshell就可以正常工作。固定它从运行作为背景![Microsoft.VisualBasic.Interaction]::AppActivate("App Name")
$wshell = New-Object -ComObject wscript.shell;
$wshell
[Microsoft.VisualBasic.Interaction]::AppActivate("App Name")
am46iovg5#
对于用户名和密码验证后的远程桌面连接,它根据公司策略要求提供警告消息,输入命令不接受它,如何给予它
5条答案
按热度按时间ecbunoof1#
如果我理解正确的话,您希望PowerShell将ENTER键发送到某个交互式应用程序?
如果该交互式应用程序是PowerShell脚本,则只需使用PowerShell窗口标题栏中的任何内容作为AppActivate的参数(默认情况下为powershell.exe的路径)。为了避免歧义,可以使用
title 'new window title'
命令让脚本重新命名自己的窗口。几点注意事项:
{ENTER}
,尽管它们不完全相同-这是键盘的Enter键。完整的列表可在这里:http://msdn.microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx。Sleep 1
语句的原因是等待1秒,因为窗口需要一段时间才能激活,如果您立即调用SendKeys,它会将密钥发送到PowerShell窗口,或者发送到任何地方。****重要警告:***如果您使用此方法发送密码,请格外小心,因为在调用AppActivate和调用SendKeys之间激活不同的窗口将导致密码以纯文本形式发送到不同的窗口!
有时候wscript.shell的SendKeys方法可能有点古怪,所以如果你遇到问题,用下面的代码替换上面的第四行:
ioekq8ef2#
h6my8fg23#
向应用程序发送“Enter”键,例如按“OK”。Works great:
#获取所需进程:
开始-睡眠-秒数1
#如果该进程实际运行,则将其置于最前面:
#向应用发送回车键:
rm5edbpk4#
此外,
$wshell = New-Object -ComObject wscript.shell;
帮助了一个在后台运行的脚本,它只需要添加$wshell
就可以正常工作。固定它从运行作为背景![Microsoft.VisualBasic.Interaction]::AppActivate("App Name")
am46iovg5#
对于用户名和密码验证后的远程桌面连接,它根据公司策略要求提供警告消息,输入命令不接受它,如何给予它