21

Ho uno script ps1 per acquisire alcune informazioni dall'ambiente del cluster vmware.Come eseguire la sequenza di tasti all'interno di PowerShell?

In alcuni punti dello script ps1 è necessario il tasto ENTER.

Quindi, come fare?

-Grazie

+1

Qual è lo script Ho scritto, richiede il tasto INVIO **. invece di premere ** inserire il pulsante ** tutto il tempo, semplicemente voglio automatizzarlo. – HamTheAstroChimp

+0

Perché è necessario premere Invio? Stai eseguendo l'host di lettura? –

+0

Myscript accede/disconnesso continuamente da più computer. Al momento del logout è necessaria la conferma, quindi devo premere ** inserire il pulsante **. Questa è la ragione per cui voglio automatizzare. – HamTheAstroChimp

risposta

29

Se ho capito bene, si vuole PowerShell per inviare il ENTER battitura ad alcune applicazioni interattive?

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

Se questa applicazione interattiva è uno script PowerShell, basta usare tutto ciò che è nella barra del titolo della finestra PowerShell come argomento AppActivate (per impostazione predefinita, il percorso di PowerShell.exe). Per evitare ambiguità, è possibile fare in modo che lo script registri la propria finestra utilizzando il comando title 'new window title'.

Alcune note:

  • La tilde (~) rappresenta la ENTER battitura. Puoi anche utilizzare {ENTER}, anche se non sono identici: è la chiave ENTER. Un elenco completo è disponibile qui: http://msdn.microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx.
  • Il motivo per l'istruzione Sleep 1 è di attendere 1 secondo perché richiede un momento per l'attivazione della finestra e se si inviano immediatamente SendKeys, invierà le chiavi alla finestra di PowerShell o in nessun posto.
  • Si noti che questo può essere attivato, se si digita qualcosa o si fa clic con il mouse durante il secondo in attesa, impedendo di attivare la finestra con AppActivate dall'attivazione. Puoi provare a ridurre la quantità di tempo per trovare il minimo che sia affidabile sul tuo sistema (Sleep accetta decimali, quindi potresti provare .5 per mezzo secondo). Lo trovo sul mio laptop Core7 i7 da 2,6 GHz, qualcosa in meno di .8 secondi ha un tasso di errore significativo. Io uso 1 secondo per essere al sicuro.
  • AVVISO IMPORTANTE:essere molto attenti se si utilizza questo metodo per inviare una password, in quanto l'attivazione di una finestra diversa tra invocando AppActivate e invocando SendKeys farà sì che la password da inviare a quella finestra diversa in testo normale!

volte WScript.Shell s' SendKeys metodo può essere un po' eccentrico, quindi se si esegue in problemi, sostituire la quarta linea di cui sopra con questo:

Add-Type -AssemblyName System.Windows.Forms 
[System.Windows.Forms.SendKeys]::SendWait('~'); 
+0

Grazie per l'add-Type Add alla fine lì. Stavo sbattendo la testa contro il muro per un'ora cercando di far funzionare il mio copione. – sliderhouserules