web-dev-qa-db-fra.com

Comment effectuer une frappe dans PowerShell?

J'ai un script ps1 pour récupérer des informations de l'environnement du cluster vmware.

À certains endroits du script ps1, la touche , TOUCHEZ .

Alors, comment faire ça?

-Merci

28
HamTheAstroChimp

Si je comprends bien, vous voulez que PowerShell envoie le ENTREZ à 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 simplement ce qui se trouve dans la barre de titre de la fenêtre PowerShell comme argument de AppActivate (par défaut, le chemin d'accès à powershell.exe). Pour éviter toute ambiguïté, vous pouvez demander à votre script de renommer sa propre fenêtre à l'aide de la commande title 'new window title' commande.

Quelques notes:

  • Le tilde (~) représente la frappe ENTRÉE . Vous pouvez aussi utiliser {ENTER}, bien qu'ils ne soient pas identiques - c'est la touche [~ ~ ~]] du clavier [~ # ~]. Une liste complète est disponible ici: http://msdn.Microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx .
  • La raison de la Sleep 1 _ instruction est d'attendre 1 seconde car la fenêtre prend quelques instants pour s'activer, et si vous appelez SendKeys immédiatement, les clés seront envoyées dans la fenêtre PowerShell ou nulle part.
  • Sachez que cela peut être déclenché, si vous tapez quelque chose ou cliquez avec la souris pendant la seconde en attente, empêchant ainsi la fenêtre que vous activez avec AppActivate d'être active. Vous pouvez essayer de réduire le temps nécessaire pour trouver le minimum suffisant sur votre système (Sleep accepte les décimales, vous pouvez donc essayer 0,5 pendant une demi-seconde). Je trouve que sur mon ordinateur portable Core i7 Win7 à 2,6 GHz, tout ce qui reste inférieur à 0,8 seconde a un taux d'échec important. J'utilise 1 seconde pour être en sécurité.
  • AVERTISSEMENT IMPORTANT: Faites très attention si vous utilisez cette méthode pour envoyer un mot de passe, car l'activation d'une fenêtre différente entre les appels AppActivate et l'invocation de SendKeys provoquera l'envoi du mot de passe à cette fenêtre différente en texte brut !

Parfois, la méthode SendKeys de wscript.Shell peut être un peu bizarre, donc si vous rencontrez des problèmes, remplacez la quatrième ligne ci-dessus par ceci:

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait('~');
40
Adi Inbar