Powershell: Uruchomienie z powershella kilku innych skryptów jednocześnie

24-cze-2014

W tym przypadku administrator tworzył sobie narzędzie, które jednocześnie ma zrestartować pewną liczbę serwerów, a następnie pingiem sprawdzać, czy serwery odpowiadają i kolorować:

  • na zielono – odpowiada
  • na czerwono – nie odpowiada
  • jeżeli nie odpowiedział na 4 ping pod rząd a potem zaczął odpowiadać, to zmiana koloru na żółty

Problemem było tylko jak uruchomić skrypt badający pingiem odpowiedzi serwerów tak, aby na raz restartować i pingować wiele serwerów, każdy w innym okienku.  Ze skryptu wyrzucam logikę dotyczącą pingowania, skupiam się wyłącznie na jednoczesnym uruchomieniu większej liczby skryptów. Oto rozwiązanie:

multi_script

 

Skrypt nr 2 (podrzędny, wykonujący czynność na danym serwerze):

echo „I’m $($args[0])”

Read-Host „Press ENTER to close”

 

Skrypt nr 1 (nadrzędny, wywołujący skrypty nr2)

$hosts=”One”,”Two”,”Three”

foreach($h in $hosts)
{
start -FilePath powershell.exe -ArgumentList „-f”, „.\script2.ps1”, $h
}

 

Polecenie Start lub Start-Process ma uruchomić powershell.exe przekazując do niego parametry:

  • -f aby podać ścieżkę do skryptu nr 2, który ma być uruchomiony
  • ścieżkę do skryptu nr 2
  • wszystkie argumenty przyjmowane przez skrypt nr 2

Argumenty przekazujemy jako listę, czyli napisy porozdzielane przecinkami

Komentarze:

  1. Tomek C. napisał,

    Dodatkowo w skrypcie nr dwa można dodać linijkę

    $Host.UI.RawUI.WindowTitle = $args[0]

    Co zmieni tytuł generowanych okienek – przydatne jak nas zasypie okienkami:)

Autor: Rafał Kraik