21

Mam skrypt ps1, aby pobrać pewne informacje ze środowiska klastra vmware.Jak wykonać naciśnięcie klawisza wewnątrz powłoki?

W niektórych miejscach skryptu ps1 wymagane jest naciśnięcie klawisza przycisku ENTER.

Jak to zrobić?

-Dzięki

+1

który jest skrypt napisałem, wymaga ** klawisza ENTER **. zamiast wciskać ** wciskaj ** cały czas, po prostu chcę zautomatyzować. – HamTheAstroChimp

+0

Dlaczego wymaga naciśnięcia Enter? Czy wykonujesz read-host? –

+0

Myscript ciągłe logowanie/wylogowanie z kilku maszyn. Do czasu wylogowania wymaga potwierdzenia, więc muszę nacisnąć przycisk ** Enter **. To jest powód, dla którego chcę zautomatyzować. – HamTheAstroChimp

Odpowiedz

29

Jeśli dobrze rozumiem, chcesz PowerShell, aby wysłać ENTER klawiszy do jakiegoś interaktywnej aplikacji?

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

Jeśli to interaktywna aplikacja jest skrypt PowerShell, wystarczy użyć co jest na pasku tytułowym okna PowerShell jako argument AppActivate (domyślnie ścieżka do powershell.exe). Aby uniknąć niejednoznaczności, możesz nakazać, aby twój skrypt retitował własne okno, używając polecenia title 'new window title'.

Kilka uwag:

  • tyldy (~) oznacza ENTER klawiszy. Możesz także użyć {ENTER}, ale nie są one identyczne - jest to klucz klawiatury numerycznej klawiatury ENTER. Pełna lista dostępna jest tutaj: http://msdn.microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx.
  • Powodem rachunku Sleep 1 jest poczekać 1 sekundę, ponieważ zajmuje chwilę, aby uaktywnić okno, a jeśli powołać SendKeys natychmiast, to będzie wysłać klucze do okna PowerShell, albo nigdzie.
  • Pamiętaj, że może to spowodować potknięcie się, jeśli coś wpiszesz lub klikniesz myszką w ciągu sekundy, która czeka, uniemożliwiając aktywację okna aktywowanego przy pomocy AppActivate. Możesz poeksperymentować z redukowaniem czasu potrzebnego na znalezienie minimalnego poziomu niezawodności systemu (Sleep akceptuje miejsca dziesiętne, więc możesz próbować 0,5 przez pół sekundy). Uważam, że na moim laptopie z procesorem Core i7 Win7 2,6 GHz, każde mniej niż 0,8 sekundy ma znaczny wskaźnik awaryjności. Używam 1 sekundy, aby być bezpiecznym.
  • WAŻNE OSTRZEŻENIE:Bądź bardzo ostrożny, jeśli używasz tej metody, aby wysłać hasło, ponieważ aktywując inne okno między powołując AppActivate i powołując SendKeys spowoduje hasło należy przesłać do inne okno w zwykłym tekście!

Czasami Wscript.Shell „s SendKeys metoda może być trochę dziwaczny, więc jeśli napotkasz problemy, wymienić czwartą linię wyżej z tym:

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

Dzięki za dodanie tego typu do końca. Waliłem głową o ścianę przez godzinę, próbując uruchomić skrypt. – sliderhouserules

Powiązane problemy