Как выполнить нажатие клавиши внутри 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('~');