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



29.10.2021

Veritas po raz 16. liderem...

Firma Veritas Technologies, producent uznanych rozwiązań backup klasy enterprise,...
21.10.2021

Zarządzanie IT

We wrześniu BTC Sp. z o.o. zaprezentowała premierową wersję systemu eAuditor V8 AI.
21.10.2021

Konferencja VMworld

Imagine That. Pod takim hasłem w dniach 5–7 października 2021 r. odbyła się jedna z...
21.10.2021

Darmowy deszyfrator

Bitdefender wspólnie z organami ścigania opracował i wydał narzędzie, które pozwala...
21.10.2021

Dell C1422H

Dell Technologies wprowadza do oferty przenośny monitor do zwiększenia wydajności pracy w...
21.10.2021

Dysk dla cyfrowych twórców

Western Digital zaprezentowało nowy dysk – WD Blue SN750 NVMe SSD.
21.10.2021

Projektory laserowe

Optoma wprowadza serię projektorów laserowych Ultra Bright ZU1700, ZU1900, ZU2200 z...
21.10.2021

Orzeł wśród routerów

D-Link wprowadza na rynek smart router EAGLE PRO AI AX1500 R15.
21.10.2021

Nowe generacje Ryzen i Epyc

AMD 3D V-Cache. AMD zapowiada procesory Ryzen i Epyc z nowym rozwiązaniem.

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"