PowerShell не имеет встроенных функций для эмуляции нажатий клавиш.
Практически у вас есть два варианта: COM-Automation и Interop.
- SendKeys через COM
Как и в VB(S)) вы можете создать Shell-Object и SendKeys. Вот способ PowerShell сделать это.
$wshell = New-Object -ComObject wscript.shell;
$wshell.SendKeys('a')
Если вы хотите отправить нажатие клавиши в окно, вы должны сначала активировать его:
$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('title of the application window')
Sleep 1
$wshell.SendKeys('~')
Некоторые нажатия клавиш имеют специальные переменные, такие как ~ для возврата. Вот полный список.
После активации окна часто необходимо подождать секунду, пока оно не станет отзывчивым, в противном случае оно отправит ключ в окно PowerShell или в никуда.
Метод SendKeys хоста сценариев может быть ненадежным, но, к счастью, есть лучший подход.
- SendKeys через Interop
Как и в C #, вы можете использовать метод SendWait из .NET Framework в PowerShell.
[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("x")
Если вы хотите активировать окно, его можно сделать так:
[void] [System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic")
[Microsoft.VisualBasic.Interaction]::AppActivate("Internet Explorer - Windows")
Для сна вы можете использовать командлет Start-Sleep .
Что касается вашей первоначальной проблемы, я бы предложил следующее решение:
# Open a Telnet window
Start-Process telnet.exe -ArgumentList 10.84.10.85
# Run the keystrokes
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait('myPassword{ENTER}')
Start-Sleep 1
[System.Windows.Forms.SendKeys]::SendWait('7{ENTER}')
Start-Sleep 1
[System.Windows.Forms.SendKeys]::SendWait('1{ENTER}')
Start-Sleep 1
[System.Windows.Forms.SendKeys]::SendWait('{ENTER}')
Start-Sleep 1
[System.Windows.Forms.SendKeys]::SendWait('{ENTER}')
Start-Sleep 1
[System.Windows.Forms.SendKeys]::SendWait('Y{ENTER}')
Start-Sleep 1
[System.Windows.Forms.SendKeys]::SendWait('')
ВНИМАНИЕ: будьте особенно осторожны, если вы используете этот метод для отправки пароля, потому что активация другого окна между вызовом AppActivate и вызовом SendKeys приведет к отправке пароля в это другое окно в виде простого текста (например, вашего любимого мессенджера)!