Подтвердить что ты не робот

Как выполнить нажатие клавиши внутри powershell?

У меня есть ps1 script, чтобы получить некоторую информацию из среды кластера vmware.

В некотором месте ps1 script требуется клавиша ВВОД.

Итак, как это сделать?

-Спасибо

4b9b3361

Ответ 1

Если я правильно понял, вы хотите, чтобы PowerShell отправил нажатие клавиши ВВОД в какое-то интерактивное приложение?

$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('title of the application window')
Sleep 1
$wshell.SendKeys('~')

Если это интерактивное приложение является PowerShell script, просто используйте все, что находится в строке заголовка окна PowerShell, в качестве аргумента AppActivate (по умолчанию путь к powershell.exe). Чтобы избежать двусмысленности, вы можете вернуть script свое собственное окно с помощью команды title 'new window title'.

Несколько примечаний:

  • Тильда (~) представляет нажатие ВВОД. Вы также можете использовать {ENTER}, хотя они не идентичны - клавиатура ВВОД. Полный список доступен здесь: http://msdn.microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx.
  • Причиной оператора Sleep 1 является ожидание 1 секунда, потому что для активации окна требуется некоторое время, и если вы немедленно вызовете SendKeys, он отправит ключи в PowerShell окна или в никуда.
  • Имейте в виду, что это может быть сработано, если вы введете что-либо или щелкните мышью во время второго ожидания, чтобы предотвратить активацию окна с помощью AppActivate. Вы можете поэкспериментировать с уменьшением времени, чтобы найти минимум, который достаточно надежен для вашей системы ( Сон принимает десятичные знаки, поэтому вы можете попробовать 0,5 в течение половины секунды). Я нахожу, что на моем 2,6 ГГц ядровом ноутбуке i7 Win7, менее 0,8 секунды имеет значительный уровень отказов. Я использую 1 секунду, чтобы быть в безопасности.
  • ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ: Будьте особенно осторожны, если вы используете этот метод для отправки пароля, потому что активируете другое окно между вызовом AppActivate и вызывая SendKeys приведет к тому, что пароль будет отправлен в другое окно в виде обычного текста!

Иногда метод wscript.shell SendKeys может быть немного причудливым, поэтому, если вы столкнулись с проблемами, замените четвертую строку выше:

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait('~');