Ya no busques más por todo internet porque estás al lugar correcto, contamos con la solución que deseas y sin complicaciones.
Solución:
PowerShell no tiene una funcionalidad integrada para emular pulsaciones de teclas.
Prácticamente, tiene dos opciones: COM-Automatización e Interoperabilidad.
- Enviar claves a través de COM
Al igual que en VB(S), puede crear un Shell-Object y SendKeys. Esta es la forma de PowerShell para hacerlo.
$wshell = New-Object -ComObject wscript.shell;
$wshell.SendKeys('a')
Si desea enviar una pulsación de tecla a una ventana, primero debe activarla:
$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('title of the application window')
Sleep 1
$wshell.SendKeys('~')
Algunas pulsaciones de teclas tienen variables especiales como ~ para RETORNO. Aquí hay una lista completa.
Después de activar una ventana, a menudo es necesario esperar un segundo hasta que responda, de lo contrario, enviará el key a la ventana de PowerShell, o a ninguna parte. El método SendKeys del Host de secuencias de comandos puede no ser confiable, pero afortunadamente hay un mejor enfoque.
- Enviar claves a través de interoperabilidad
Al igual que en C#, puede usar el método SendWait de .NET Framework en PowerShell.
[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("x")
Si desea activar una ventana, puede hacerlo así:
[void] [System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic")
[Microsoft.VisualBasic.Interaction]::AppActivate("Internet Explorer - Windows")
Para dormir, puede usar el cmdlet Start-Sleep.
Con respecto a su problema original, sugeriría la siguiente solución:
# 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('myPasswordENTER')
Start-Sleep 1
[System.Windows.Forms.SendKeys]::SendWait('7ENTER')
Start-Sleep 1
[System.Windows.Forms.SendKeys]::SendWait('1ENTER')
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('YENTER')
Start-Sleep 1
[System.Windows.Forms.SendKeys]::SendWait('')
ADVERTENCIA: tenga mucho cuidado si está utilizando este método para enviar una contraseña porque activa una ventana diferente entre invocar AppActivate
e invocando SendKeys
hará que la contraseña se envíe a esa ventana diferente en texto sin formato (por ejemplo, su mensajero favorito).
Al final de todo puedes encontrar las interpretaciones de otros desarrolladores, tú asimismo tienes la opción de dejar el tuyo si te gusta.