Как выполнить нажатие клавиши внутри powershell?
У меня есть сценарий ps1, чтобы получить некоторую информацию из кластерной среды vmware.
в каком-то месте сценария ps1 требуется 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.исполняемый.) Чтобы избежать двусмысленности, вы можете заставить свой скрипт ретировать собственное окно с помощью .
несколько Примечания:
- Тильда (~) обозначает ENTER клавиш. Вы также можете использовать
{ENTER}
, хотя они не идентичны - это клавиатуры ENTER ключ. Полный список доступен здесь: http://msdn.microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx. - причина
Sleep 1
оператор должен ждать 1 секунду, потому что для активации окна требуется мгновение, и если вы вызываете sendkeys будет сразу же он отправит ключи в окно PowerShell или в никуда. - имейте в виду, что это может быть споткнулся, если вы вводите что-нибудь или нажмите кнопку мыши во время второго, что он ждет, предотвращая окно вы активируете с AppActivate быть активным. Вы можете поэкспериментировать с уменьшением количества времени, чтобы найти минимум, который надежно достаточен в вашей системе (сон принимает десятичные дроби, так что вы можете попробовать .5 для полсекунды.) Я нахожу, что на моем ноутбуке 2.6 GHz Core i7 Win7 ничего меньше .8 секунд имеет значительную интенсивность отказов. Я использую 1 секунду, чтобы быть безопасным.
- ПРЕДУПРЕЖДЕНИЕ: будьте очень осторожны, если вы используете этот метод для отправки пароля, потому что активация другого окна между вызовом AppActivate, а вызов sendkeys будет вызовет пароль, что разные окна в обычный смс!
иногда wscript.Шелл!--7--> ' s sendkeys будет метод может быть немного изворотливым, поэтому, если вы столкнетесь с проблемами, замените четвертую строку выше следующим:
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait('~');