Comment effectuer une frappe à l'intérieur de powershell?

j'ai le script ps1 pour récupérer des informations de l'environnement VMware cluster.

Dans certains endroit de la ps1 script nécessite l' ENTER touche de touche.

Donc, Comment faire ?

Merci

24
demandé sur HamTheAstroChimp 2013-07-25 09:12:55

1 réponses

si je comprends bien, vous voulez que PowerShell envoie le ENTER frappez à une application interactive?

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

si cette application interactive est un script PowerShell, utilisez tout ce qui est dans la barre de titre de la fenêtre PowerShell comme argument pour AppActivate (par défaut, le chemin vers powershell.EXE.) Pour éviter toute ambiguïté, vous pouvez demander à votre script de renommer sa propre fenêtre en utilisant le title 'new window title' la commande.

quelques notes:

  • le tilde ( ~ ) représente le ENTER frappe de touche. Vous pouvez également utiliser {ENTER}, mais ils ne sont pas identiques - c'est le clavier ENTER clé. Une liste complète est disponible ici: http://msdn.microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx.
  • La raison de l' Sleep 1 déclaration est d'attendre 1 seconde, car il faut un moment à la fenêtre pour l'activer, et si vous invoquez SendKeys immédiatement, il envoie les clés à la fenêtre PowerShell, ou à nulle part.
  • soyez conscient que cela peut être déclenché, si vous tapez quoi que ce soit ou cliquez sur la souris à la seconde où il attend, empêchant la fenêtre que vous activez avec AppActivate d'être actif. Vous pouvez essayer de réduire le temps de trouver le minimum qui est suffisamment fiable sur votre système (Sommeil accepte les décimales, donc vous pouvez essayer .5 pour une demi-seconde). Je trouve ça sur mon ordinateur portable i7 Win7 2.6 GHz Core, rien de moins que ça .8 secondes a un taux de défaillance significatif. J'utilise 1 seconde pour être sûr.
  • IMPORTANT WARNING: soyez très prudent si vous utilisez cette méthode pour envoyer un mot de passe, parce que l'activation d'une fenêtre différente entre l'invocation AppActivate et en invoquant SendKeys fera envoyer le mot de passe à cette fenêtre différente en clair le texte!

Parfois wscript.shellSendKeys méthode peut être un peu bizarre, donc si vous rencontrez des problèmes, remplacer la quatrième ligne ci-dessus avec ceci:

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait('~');
33
répondu Adi Inbar 2015-11-23 02:46:19