O PowerShell não tem nenhuma funcionalidade incorporada para emular pressionamentos de teclas.
Praticamente, você tem duas opções: COM-Automation e Interop.
- SendKeys via COM
Como em VB (S), você pode criar um Shell-Object e SendKeys. Aqui está a maneira do PowerShell de fazer isso.
$wshell = New-Object -ComObject wscript.shell;
$wshell.SendKeys('a')
Se você quiser enviar um pressionamento de tecla a uma janela, primeiro é necessário ativá-lo:
$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('title of the application window')
Sleep 1
$wshell.SendKeys('~')
Alguns pressionamentos de teclas têm variáveis especiais como ~ para RETURN. Aqui é uma lista completa.
Depois de ativar uma janela, geralmente é necessário aguardar um segundo até que ela se torne responsiva, caso contrário, enviará a chave para a janela do PowerShell ou para lugar nenhum.
O método SendKeys do host de script pode não ser confiável, mas felizmente há uma abordagem melhor.
- SendKeys via Interop
Como em C #, você pode usar o método SendWait do .NET Framework no PowerShell .
[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("x")
Se você quiser ativar uma janela, pode ser assim:
[void] [System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic")
[Microsoft.VisualBasic.Interaction]::AppActivate("Internet Explorer - Windows")
Para dormir, você pode usar o Iniciar o sono .
Com relação ao seu problema original, sugiro a seguinte solução:
# 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('')
AVISO: Tenha cuidado extra se estiver usando este método para enviar uma senha, porque ativar uma janela diferente entre invocar o AppActivate e chamar SendKeys fará com que a senha seja enviada para aquela janela diferente em texto simples (por exemplo, seu mensageiro favorito !