Centrum Skryptów - Systemy Operacyjne

Jak uruchomić aplikację za pomocą skryptu Windows PowerShell, a następnie spauzować skrypt do czasu zakończenia działania aplikacji?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak uruchomić aplikację za pomocą skryptu Windows PowerShell, a następnie spauzować skrypt do czasu zakończenia działania aplikacji?

Cześć, Skrypciarze! Mam aplikację HTA, która wyświetla dane w obszarze Span. W zależności od rozmiaru monitora, niektórzy użytkownicy narzekają, że rozmiar czcionki w tym obszarze jest zbyt mały. Jak programistycznie zmienić rozmiar czcionki w tym obszarze?

-- AD

Cześć, AD! Zanim odpowiem na Twoje pytanie, małe ogłoszenie: desperacko poszukujemy znajomych!

Nie to, że kogoś zgubiliśmy, szukamy po prostu nowych znajomych na Facebooku. Właśnie dziś utworzyliśmy tam własną stronę – my, w sensie Skrypciarze oczywiście – i jedynymi osobami są tam Greg Stemp (którego awatar jest zadziwiająco podobny do laleczki Dra Scripto) oraz Jean Ross (która jest niezaprzeczalnie podobna do znaku zapytania):

Nie twierdzimy oczywiście, że Jean czy Greg są nudni, broń Boże, jednak takie awatary mogę skwitować jednym słowem: obciach (Greg nie jest aż taki zły, ale znak zapytania???– jak o tym myślę, sam upodabniam się do znaku zapytania…). Właśnie dlatego szukamy nowych znajomych do naszej skrypciarskiej grupy o nazwie Scripting Guys.

Jak dołączyć do grupy? Najpierw trzeba udać się na stronę Facebook.com i się zapisać. Tworzy się swój profil osobisty, ale nie martwcie się – profil może być prywatny, jeżeli tak sobie postanowicie. Po zapisaniu się należy wpisać hasło Scripting Guys w pole wyszukiwarki (Search) i nacisnąć klawisz ENTER. Kiedy pojawi się wynik, klikamy na link Join Group, a następnie wybieramy opcję Join w oknie dialogowym. Teraz zaczyna się zabawa…

Jaka zabawa? No, w sumie macie rację, żadna zabawa, przecież dopiero się rozkręcamy, możecie jednak wymieniać się z nami poglądami, uwagami i czymkolwiek chcecie, wiecie przecież, że nie mamy co robić w pracy… no i możemy Was informować na bieżąco o tym, co dzieje się w centrum skryptów.

Uwaga: To co prawda nie Facebook, ale przypominamy o grach edycji 2008 Winter Scripting Games (j.ang.). Jeśli się z nami skontaktujecie, przyślemy przypomnienie przed początkiem tej edycji (rzeczywiście żałosny sposób zjednywania sobie znajomych).

Niniejszy skrypt dedykujemy wszystkim, którzy dołączyli do nas w trakcie czytania lub zamierzają to zrobić w najbliższym czasie (pamiętaj: nie odkładaj do jutra tego, co miałeś zrobić dziś), a mówi o niczym innym jak: „Jak uruchomić aplikację za pomocą skryptu Windows PowerShell, a następnie spauzować skrypt do czasu zakończenia działania aplikacji?” Oto on:

[System.Diagnostics.Process]::Start("notepad").WaitForExit()

Write-Host "Notepad has terminated."

Nie ma tego tu dużo, dlatego tak rozbudowaliśmy wstęp, ale to właśnie jest piękne w programie PowerShell – za pomocą jednego wiersza kodu można naprawdę wiele zdziałać. W pierwszym wierszu używamy procesu System.Diagnostics.Process platformy .NET Framework w celu uruchomienia Notatnika; dodaliśmy tu jeszcze metodę WaitForExit. Po co? Ponieważ metoda WaitForExit instruuje program PowerShell, aby „siedział” sobie spokojnie i czekał, aż zakończy się działanie aplikacji. Skrypt programu PowerShell nie będzie nic robił dopóki uruchomione będzie wystąpienie obiektu Notatnik. W momencie zakończenia działania aplikacji Notatnik, nasz skrypt przejdzie do kolejnego wiersza, który po prostu przywołuje echo informacji o zakończeniu działania aplikacji Notatnik.

Jest jeszcze jedna metoda. To samo możemy osiągnąć używając poniższego wiersza kodu:

Notepad | Out-Null

Write-Host "Notepad has terminated."

Działa równie dobrze, ale nie jest już tak intuicyjne, dlatego posłużyliśmy się platformą .NET Framework. Poza tym, to nie boli, a zawsze chyba warto jest nauczyć się czegoś nowego na temat .NET oraz używania tej platformy.

Poniżej kolejna wariacja na ten sam temat. Używając poniższego fragmentu kodu, uruchamiamy program Windows Calculator, a następnie przekazujemy wartość 10000 metodzie WaitForExit:

[System.Diagnostics.Process]::Start("calc").WaitForExit(10000)

Write-Host "Calculator has ended, or 10 seconds have elapsed."

Jaki jest sens tego wszystkiego? 10000 reprezentuje 10 sekund (10.000 milisekund). Oznacza to, że zaczniemy uruchamiać kalkulator, nadepnie odczekamy 10 sekund, a następnie przejdziemy do kolejnej części skryptu. Co jeżeli 10 sekund minęło, a kalkulator jest wciąż uruchomiony? Pozwalamy mu po prostu pracować po swojemu, a my ruszamy z kolejnym wierszem kodu. Spróbujcie, a zobaczycie o czym mówimy.

Mamy nadzieję, że to odpowiada na Twoje pytanie, AD i że odpowiedź jest tak dobra i tak wyczerpująca, że skłoniła Cię do dołączenia do naszego Facebooku. Grupa TechNet ma 45 członków, grupa MSDN 73 członków. Nie chcemy oczywiście rywalizować, ale może zechcielibyście dołączyć do nas… Tak na Mikołaja…

 Do początku strony Do początku strony

Centrum Skryptów - Systemy Operacyjne