¿Cómo realizar pulsaciones de teclas dentro de powershell?


Tengo un script ps1 para obtener información del entorno de clúster de vmware.

En algún lugar del script ps1 requiere el botón ENTER.

Entonces, ¿cómo hacer eso ?

- Gracias

Author: HamTheAstroChimp, 2013-07-25

1 answers

Si entiendo correctamente, ¿desea que PowerShell envíe la tecla ENTER a alguna aplicación interactiva?

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

Si esa aplicación interactiva es un script de PowerShell, simplemente use lo que esté en la barra de título de la ventana de PowerShell como argumento para AppActivate (de forma predeterminada, la ruta de acceso a powershell.exe). Para evitar ambigüedades, puede hacer que su script retitule su propia ventana usando el comando title 'new window title'.

Algunas notas:

  • La tilde (~) representa la tecla ENTER. También puedes usar {ENTER}, aunque no son idénticos - esa es la tecla del teclado ENTER. Una lista completa está disponible aquí: http://msdn.microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx.
  • La razón de la instrucción Sleep 1 es esperar 1 segundo porque la ventana tarda un momento en activarse, y si invoca SendKeys inmediatamente, enviará las claves a la ventana de PowerShell, o a a ninguna parte.
  • Tenga en cuenta que esto puede dispararse, si escribe algo o hace clic en el ratón durante el segundo que está esperando, evitando que la ventana que activa con AppActivate esté activa. Puede experimentar con la reducción de la cantidad de tiempo para encontrar el mínimo que es fiable suficiente en su sistema (Sleep acepta decimales, por lo que podría intentar .5 durante medio segundo). Me parece que en mi 2.6 GHz Core i7 Win7 portátil, nada menos .8 segundos tiene un tasa de fallos significativa. Uso 1 segundo para estar seguro.
  • AVISO IMPORTANTE: Tenga mucho cuidado si está utilizando este método para enviar una contraseña, porque activar una ventana diferente entre invocar AppActivate e invocar SendKeys hará que la contraseña se envíe a esa ventana diferente en texto plano.

A veces wscript.shell's SendKeys método puede ser un poco peculiar, por lo que si se ejecuta en problemas, reemplace la cuarta línea anterior con esto:

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait('~');
 33
Author: Adi Inbar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-23 02:46:19