W ramach naszej witryny stosujemy pliki cookies. Kontynuując przeglądanie strony, wyrażasz zgodę na używanie przez nas plików cookies. Dowiedz się więcej tutaj
X

Księgarnia PWN

   

   

   

   

   

   

   

   

.

.

Bezpłatny newsletter


Rozwiązywanie problemów z poziomu PowerShell cz.1

Rozwiązywanie problemów z poziomu PowerShell  cz.1

Seria artykułów obejmuje następujące zagadnienia:

  • Testowanie serwerów
  • Korzystanie z pakietu rozwiązywania problemów
  • Korzystanie z Analizatora Najlepszych Praktyk
  • Wyszukiwanie w Event Viewer poszczególnych zdarzeń
  • Przekazywanie dzienników zdarzeń do centralnego serwera dziennika

W tym artykule omówione zostało wykorzystanie PowerShell w takich zadaniach jak rozwiązywanie problemów, korzystanie z Analizatora Najlepszych Praktyk i obsługa dziennika zdarzeń systemu operacyjnego. Obejmuje także monitorowanie i konfigurację usług, jak również stworzenie centralnego serwera dziennika zdarzeń.

Testowanie serwerów

Często podczas rozwiązywania problemów z dostępnością, jednym z pierwszych kroków jest sprawdzenie, czy serwer jest w trybie online. Przed nastaniem ery PowerShell, podstawowym narzędziem do badania dostępności urządzenia w sieci było polecenie ping. Jest to znakomite narzędzie, ale pojawia się problem, gdy trzeba przeprowadzić badanie na większą skalę lub w trybie zautomatyzowanym.

PowerShell zawiera nową funkcję o nazwie Test-Connection, która pozwala na przeprowadzanie podobnych testów jak w przypadku ping, ale z nastawieniem na automatyzację. Komenda ta zwraca obiekt Win32_PingStatus, który może być wykorzystywany przez PowerShell.

W pierwszym przykładzie przeprowadzony zostanie test sprawdzenia jednego urządzenia docelowego. PowerShell zwróci obiekt, który może być interpretowany w celu określenia czy dany test zakończył się sukcesem lub porażką (urządzenie niedostępne). W ten sposób można zautomatyzować określone czynności w oparciu o otrzymane wyniki.

Pierwsze kroki

Do poniższego przykładu, będą potrzebne co najmniej dwa lub więcej systemów operacyjnych dostępnych w sieci. Pierwszy system będzie wykorzystywany do badania połączenia z innymi systemami w sieci.

Jak to zrobić

Należy wykonać następujące kroki w celu sprawdzenia, czy dany serwer odpowiada:

1. Odpytanie jednego hosta.

Test-Connection -ComputerName 10.95.7.13

Po uruchomieniu otrzymamy wynik podobny do poniższego (Rys.1):

powershell1

Rysunek 1. Wynik działania polecenia Test-Connection na określonym hoście.

2. Odpytanie wielu hostów.

Workflow Ping ([string[]] $obiekty)
{
ForEach -Parallel ($target in $obiekty)
{
If (Test-Connection -ComputerName $obiekty -Count 2 -Quiet)
{

"$obiekt odpowiada"
} Else {
"$obiekt nie odpowiada"
}
}
}

Ping 10.95.7.11, 10.95.7.16, 10.95.7.13. 10.95.7.12, 10.95.7.18

Po uruchomieniu otrzymamy odpowiedź podobną do następującej (Rys.2):

powershell2

Rysunek 2. Wynik działania skryptu odpytującego pięć hostów.

Wyjaśnienie

Pierwszy krok to test z wykorzystaniem funkcji Test-Connection na jednym hoście. Domyślnie wysyłany jest zestaw czterech 32 bitowych żądań echa ICMP (pingi) do systemu docelowego. Jeśli zdalny obiekt jest dostępny online i firewall pozwala na taki ruch, system zwróci odpowiedź. System docelowy może być określany przez jego nazwę, albo jego adresację IPv4 lub IPv6.
 
W drugim przykładzie, został utworzony workflow o nazwie Ping. Workflow działa podobnie jak funkcja i używany jest, aby zapewnić zdolność do wykonywania zadań równoległych.

Ten przepływ pracy przyjmuje tablicę nazw lub adresów i inicjuje osobne zadanie dla każdego z nich. Następnie wykonany zostaje Test-Connection, na wyjściu zwracany jest komunikat informujący, czy docelowy obiekt odpowiada, czy nie.

Oprócz wysyłania zapytania na jeden lub kilka hostów, możliwe jest rozsyłanie sygnału ICMP po całej sieci, dzięki czemu można uzyskać listę wszystkich dostępnych celów. Może to być przydatne, do określenia, które adresy w sieci są obecnie wykorzystywane.

Aby to osiągnąć, można użyć pętli, aby przeskanować całą sieć w określonej adresacji.

Ping -obiekty (1..254 | ForEach-Object{"10.10.10.$_"})

W tym przypadku wyszukiwane są wszystkie dostępne w sieci 10.95.7.X hosty. Na początek utworzona jest pętla dla liczb od 1 do 254, która jest dołączona do wartości sprawdzanej sieci. Ta wartość jest przekazywana do workflow o nazwie Ping, który następnie tworzy równoległe zadania dla polecenia Test-Connection.

W przypadku z korzystania z tradycyjnego ping taki proces mógłby trwać nawet wiele godzin. W sytuacji realizacji zadań równoległych wyniki mogą być zwrócone w ciągu kilku chwil. Co zostało zaprezentowane na poniższym ekranie (Rys. 3).

powershell3

Rysunek 3. Rezultat działania zmodyfikowanego skryptu odpytującego wszystkie hosty w określonej adresacji.

Należy zauważyć, że w pracy równoległej wyniki zwracane są w kolejności losowej.

Autor: Grzegorz Gałęzowski

Partnerzy