Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.



23.09.2021

5 edycja konferencji Test...

21 października startuje kolejna, piąta już edycja największej w Polsce konferencji...
23.09.2021

Zero Trust Firewall

FortiGate 3500F
23.09.2021

Ochrona IoT

Kaspersky SHS
23.09.2021

Wydatki lobbingowe

Cyfrowy monopol
23.09.2021

Współdziałanie klastrów

SUSE Rancher 2.6
23.09.2021

Panasonic TOUGHBOOK 55

Najnowsza wersja wszechstronnego Panasonic TOUGHBOOK 55 to wytrzymały notebook typu...
23.09.2021

Elastyczna dystrybucja...

Liebert RXA i MBX
23.09.2021

Zdalny podgląd w 360°

D-Link DCS-8635LH
23.09.2021

Sejf na dane

Szyfrowany pendrive

Universal Automation

Data publikacji: 14-07-2021 Autor: Bartosz Bielawski

PowerShell Universal to rozwiązanie składające się z trzech elementów: Universal API, Universal Automation i Universal Dashboard. W poprzedniej części cyklu skupiliśmy się na elemencie pierwszym, Universal API. Ten artykuł poświęcony będzie elementowi, który jest najnowszym elementem platformy: Universal Automation.

 

U niversal Automation, jak wskazuje sama nazwa, umożliwia nam automatyzowanie procesów z wykorzystaniem PowerShella. Będziemy mogli wykorzystać to narzędzie do uruchamiania i analizowania wyników zadań działających w ramach harmonogramu, wykorzystując przy ich planowaniu składnię znaną z CRON-a. Status zadań rejestrowany będzie w bazie danych, dzięki czemu możemy bez trudu tworzyć raporty dotyczące zleconych zadań. Samo Universal Automation obsługuje wiele elementów znanych nam dobrze ze „standardowego” PowerShella: Write-Progress, potok, pobieranie informacji od użytkownika. Oprócz omówienia samego rozwiązania przyjrzymy się też temu, jak je skonfigurować. Podobnie jak to miało miejsce w przypadku Universal API, omówimy nie tylko konfigurację za pomocą interfejsu graficznego. Poświęcimy również uwagę konfiguracji za pomocą swagger API oraz plików konfiguracyjnych.

 

> TWORZENIE SKRYPTU KONFIGURACYJNEGO

 

Podczas konfigurowania wszelkich elementów związanych z modułem Automation w ramach GUI musimy po zalogowaniu rozwinąć menu Automation po lewej stronie. Znajdziemy tam wszystkie składowe: skrypty, zadania, harmonogramy, zmienne i wywołania. W dalszej części tekstu pominiemy ten początkowy krok, zakładając, że menu to jest już rozwinięte, a wszystkie dostępne tam pozycje są widoczne.

Podstawowym elementem Universal Automation jest skrypt. To właśnie skrypty są uruchamiane w ramach tego narzędzia, to je będziemy planować i uruchamiać w obrębie zleconych zadań czy też jako odpowiedź na jedno z obsługiwanych przez platformę zdarzeń. Do tworzenia skryptów skorzystać możemy z polecenia New-PSUScript. Podobnie jak to miało miejsce w przypadku tworzenia elementów REST API, skorzystamy przy tym z uprzednio utworzonego żetonu:

New-PSUScript -AppToken $żeton.Token -Name Test -ScriptBlock {
   Write-Verbose -Message 'Testujemy skrypt...'
} -ComputerName http://psu.contoso.com

Oprócz przekazywania bloku skryptu (który sprawdza się jedynie w przypadku skryptów tworzonych ad-hoc) możemy też skorzystać z parametru Path. Przy okazji utworzymy też tablice skrótów $wspólne, z której korzystać będziemy przy kolejnych poleceniach:

$wspólne = @{
   ComputerName = 'http://psu.contoso.com'
   AppToken = $żeton.Token
}
New-PSUScript @wspólne -Name Plik -Path `
D:PowerShellITPROPSU-AutomationTest-Script.ps1

Tworzenie skryptu w ramach strony wymaga wybrania pozycji New Script (jeśli chcemy skorzystać z wbudowanego edytora) lub Import Script, która działa podobnie do polecenia New-PSUScript uruchomionego z opcją Path. Po wyborze pierwszej możliwości tworzymy najpierw pusty skrypt, podając jego nazwę, opis oraz opcje uruchomienia. Dopiero tak utworzony skrypt uzupełnimy o wykonywalny kod, korzystając przy tym z wbudowanego edytora. Edytor uruchomiony zostanie od razu, musimy jedynie wybrać pozycję Edit (domyślnie skrypt zawierać będzie jedynie komentarz z wybraną przez nas nazwą). Po zakończeniu edytowania skryptu musimy jedynie zapisać zmiany.

 

> URUCHAMIANIE SKRYPTÓW

 

Czas rozpocząć użytkowanie przygotowanych wcześniej skryptów. Ponownie zaczniemy od uruchamiania z wykorzystaniem poleceń PowerShella. Aby to uczynić, skorzystać musimy z polecenia Invoke-PSUScript:

Invoke-PSUScript @wspólne -Name Test

Przy podawaniu nazwy skryptu możemy również wskazać jego rozszerzenie (Test.ps1), ale nie jest to konieczne – platforma poradzi sobie z jego uruchomieniem niezależnie od tego, czy podamy nazwę pełną, czy jedynie nazwę bazową. Zamiast przekazywać nazwę skryptu, możemy też przekazać kompletny obiekt pobrany uprzednio za pomocą polecenia Get-PSUScript. Pozwoli nam to wybrać skrypt na podstawie kryterium innego niż nazwa. Na przykład jedynie skrypt utworzony przez nas w ramach GUI zawiera opis, spróbujmy więc uruchomić skrypt, który ma taki opis:

$skryptDoUruchomienia = Get-PSUScript @wspólne | Where-Object { $_.Description }
Invoke-PSUScript @wspólne -Script $skryptDoUruchomienia

Niestety polecenia te nie będą obsługiwać kolekcji skryptów. Jeśli więc zechcemy uruchomić wszystkie skrypty, które w nazwie mają ciąg znaków test, to skorzystać musimy z konstrukcji foreach:

$skryptyTestowe = Get-PSUScript @wspólne | Where-Object Name -Match Test
foreach ($skryptTestowy in $skryptyTestowe) {
Invoke-PSUScript @wspólne -Script $skryptTestowy
}

Warto zwrócić uwagę, że nawet jeśli korzystamy z obiektu opisującego skrypt, to przy jego uruchomieniu nadal musimy podać pozostałe informacje o serwerze (zawarte w zmiennej $wspólne).

Uruchamianie skryptów na jednej stronie możliwe jest na dwa sposoby. Po pierwsze, możemy je uruchomić z widoku zawierającego wszystkie skrypty z użyciem jednej z dostępnych w ramach tego widoku akcji (Run). Tę samą opcję znajdziemy w przypadku korzystania z widoku podglądu indywidualnego skryptu. Pierwsza sprawdzi się w sytuacji, gdy szybko chcemy uruchomić kilka skryptów jeden po drugim. Druga – gdy zechcemy przetestować skrypt po dokonaniu w nim zmian za pomocą wbudowanego edytora. Oczywiście jednorazowe uruchomienie skryptu sprawdzi się świetnie w przypadku, gdy chcemy przetestować jego działanie. Na ogół jednak będziemy chcieli skrypty uruchamiać zgodnie z harmonogramem lub w odpowiedzi na wydarzenie.

 

> HARMONOGRAMY

Przyjrzymy się teraz tworzeniu harmonogramów, według których będą uruchamiane skrypty. Aby zarządzać harmonogramami w PowerShellu, można skorzystać z polecenia New-PSUSchedule. Każdy harmonogram przypisany jest do konkretnego skryptu, najpierw musimy więc pobrać informację o skrypcie, którego działanie chcemy zaplanować:

$skrypt = Get-PSUScript @wspólne -Name Test.ps1

Niestety brak tu nieco konsekwencji – w tym scenariuszu musimy podać pełną nazwę skryptu, razem z rozszerzeniem. Jeśli zaś chodzi o harmonogram, to do wyboru mamy trzy opcje:

 

  • praca w pętli – skrypt uruchamiany jest bez przerwy, z opcją zdefiniowania czasu pomiędzy poszczególnymi uruchomieniami,
  • uruchomienie jednorazowe – działa podobnie jak uruchamianie ad-hoc, ale pozwala uruchomić skrypt pod naszą nieobecność,
  • skorzystanie ze składni CRON.


Zacznijmy od najprostszej, ale też najmniej elastycznej metody, czyli pracy w nieskończonej pętli. Uruchamianie skryptu w niekończącej się pętli przyda się głównie w sytuacji, gdy jakiś skrypt odpowiedzialny będzie za aktualizowanie pewnych danych czy pobieranie informacji z zewnętrznego źródła. Można to połączyć z innymi elementami PowerShell Universal, np. z API, które zamiast pobierać informacje w trakcie zapytania od użytkownika, korzystać będzie z danych zbuforowanych. Warto zwykle zadbać o opóźnienie w uruchamianiu takiego skryptu, by uniknąć sytuacji, w której zacznie on pochłaniać wszystkie zasoby naszego serwera:

New-PSUSchedule @wspólne -Continuous -DelayHour 1 -Script $skrypt

Opóźnienie możemy podać, zarówno wybierając konkretną liczbę sekund, minut lub godzin, jak też korzystając z parametru Delay, do którego przekazać musimy obiekt TimeSpan:

$opóźnienie = New-TimeSpan -Minutes 20 -Seconds 5
New-PSUSchedule @wspólne -Continuous -Delay $opóźnienie -Script $skrypt

Druga opcja, czyli uruchomienie jednorazowe, wymaga od nas jedynie przekazania obiektu DateTime opisującego moment, w którym skrypt ma zostać uruchomiony:

New-PSUSchedule @wspólne -OneTime '2021-Jul-04 23:00:00' -Script $skrypt

 

[...]

 

Autor zawodowo zajmuje się informatyką. Jest Microsoft MVP w dziedzinie PowerShella, blogerem oraz jednym z moderatorów forum dotyczącego skryptów w serwisie TechNet. Autor książki „Windows PowerShell 5.1 Biblia”.

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.

.

Transmisje online zapewnia: StreamOnline

All rights reserved © 2019 Presscom / Miesięcznik "IT Professional"