help - powershell comandos
¿Cómo realizar pulsaciones de teclas dentro de Powershell? (1)
Tengo una secuencia de comandos ps1 para obtener información del entorno de clúster vmware.
En algún lugar de secuencia de comandos ps1 requiere la pulsación de tecla ENTRAR .
Entonces, ¿cómo hacer eso?
-Gracias
Si entiendo correctamente, ¿quiere que PowerShell envíe la tecla ENTRAR 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 una secuencia de comandos 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 a powershell.exe). Para evitar la ambigüedad, puede hacer que su script retitule su propia ventana usando el comando title ''new window title''
.
Algunas notas:
- La tilde (~) representa la tecla ENTRAR . También puede usar
{ENTER}
, aunque no son idénticos, esa es la tecla ENTER del teclado. Una lista completa está disponible aquí: http://msdn.microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx . - El motivo de la declaración
Sleep 1
es esperar 1 segundo porque lleva un momento activar la ventana, y si invoca SendKeys inmediatamente, enviará las claves a la ventana de PowerShell, o a ninguna parte. - Tenga en cuenta que esto puede fallar, si escribe algo o hace clic en el mouse durante el segundo que está esperando, evitando que se active la ventana activada con AppActivate . Puede experimentar reduciendo la cantidad de tiempo para encontrar el mínimo fiable en su sistema ( Sleep acepta decimales, por lo que puede intentar .5 durante medio segundo). Encuentro que en mi computadora portátil Core i7 Win7 de 2.6 GHz, cualquier cosa menor a .8 segundos tiene una tasa de falla significativa. Yo uso 1 segundo para estar seguro.
- AVISO IMPORTANTE: tenga mucho cuidado si usa este método para enviar una contraseña, ¡porque al activar una ventana diferente entre invocar AppActivate e invocar SendKeys , la contraseña se enviará a esa ventana diferente en texto plano!
A veces, el método SendKeys de wscript.shell puede ser un poco peculiar, por lo que si tiene problemas, reemplace la cuarta línea anterior con esto:
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait(''~'');