PowerShell jest doskonałym narzędziem do tworzenia skryptów. Nie tylko pomaga zaoszczędzić czas, ale także zapewnia większą elastyczność w wykonywaniu powtarzających się zadań ręcznie lub za pomocą zaplanowanych zadań. Prawie wszystkie role i funkcje systemu Windows są dostarczane wraz z cmdletami PowerShell.
Można używać domyślnie dostępnych cmdletów systemu operacyjnego Windows do wykonywania zadań operacyjnych, takich jak sprawdzanie stanu określonej usługi systemu Windows na wielu komputerach, sprawdzanie listy oprogramowania zainstalowanego na komputerach z systemem Windows, sprawdzanie i gromadzenie ról i funkcji zainstalowanych w systemach operacyjnych Windows Server i wiele innych.
Jednym z zadań często wykonywanych przez administratorów systemu Windows jest sprawdzanie stanu krytycznych usług na krytycznych serwerach produkcyjnych, takich jak serwery Exchange, serwery SQL i/lub kontrolery domeny Active Directory.
Mimo że można użyć SCCM i podobnych narzędzi, aby dostarczyć raport o stanie usług z określonego zestawu maszyn, SCCM wymaga, aby Klient SCCM działał na wszystkich komputerach docelowych, zanim SCCM będzie mógł raportować o stanie usług.
Tutaj właśnie przydaje się nasz najnowszy skrypt i Samouczek Serwera. Możesz użyć skryptu PowerShell wyjaśnionego w tym artykule, aby szybko i łatwo sprawdzić stan poszczególnych usług na jednym lub wielu komputerach z systemem Windows.
Sprawdzanie statusu pojedynczej usługi
Jeśli chcesz sprawdzić status konkretnej usługi na zdalnym komputerze, co możesz zrobić, to wykonać poniższe polecenie PowerShell:
Get-WMIObject -Computer -Query "Select * From Win32_Service WHERE Name Like "%SomeServiceName%"
Wykonanie powyższego polecenia PowerShell pomoże Ci uzyskać status konkretnej usługi określonej w parametrze „%SomeServiceName%. To polecenie łączy się z komputerem zdalnym określonym w parametrze „-Computer”. Prawdopodobnie będziesz chciał zmienić zarówno nazwę komputera jak i usługi przed wykonaniem powyższego polecenia.
Sprawdzanie stanu wielu usług
W przypadku, gdy chcesz uzyskać listę wszystkich usług Windows, które są uruchomione w systemie docelowym, wykonaj następujące polecenie PowerShell:
Get-WMIObject Win32_Service -Computer | Where {$_.State -eq "Running"} | FT -Auto
Powyższe polecenie wyświetli listę wszystkich usług Windows, które są uruchomione ze zdalnego komputera określonego w parametrze „-Computer”, a dane wyjściowe zostaną wyświetlone w oknie PowerShell. Jeśli chcesz zapisać dane wyjściowe w pliku CSV, dodanie „Export-CSV” wykona zadanie, jak pokazano w tym poleceniu:
Get-WMIObject Win32_Service -Computer | Where {$_.State -eq "Running"} | FT -Auto | Export-CSV "C:TempServicesStatus.CSV"
Sprawdzanie stanu pojedynczej usługi na wielu komputerach
Powyższe polecenia PowerShell pomogą Ci uzyskać status określonej lub wielu usług z jednego komputera z systemem Windows, następujący skrypt PowerShell może być użyty, jeśli chcesz zobaczyć stan pojedynczej usługi z wielu komputerów z systemem Windows. Wystarczy utworzyć plik tekstowy zawierający nazwy komputerów z systemem Windows i zmodyfikować zmienną skryptu „$ServiceNameToCheck” tak, aby zawierała usługę, którą chcemy sprawdzić.
$ServiceNameToCheck ="SomeServiceName"
$ReportFile = "C:TempServiceStatus.CSV"
Remove-item $ReportFile -ErrorAction SilentlyContinue
$ThisSTR = "Computer Name, Service Status"
Add-Content $ReportFile $ThisSTR
$CompFile = "C:TempComputers.TXT"
Foreach ($ComputerName in Get-Content "$CompFile")
{
$Error.Clear()
Get-WMIObject -Computer $ComputerName -Query "Select * From Win32_Service WHERE Name Like "%$ServiceNameToCheck% AND {$_.State -eq "Running"}
IF ($Error.Count -ne 0)
{
$ThisSTR = $ComputerName+", Could Not Connect to Remote Computer or Service Not Running"
Add-Content $ReportFile $ThisSTR
}
else
{
$ThisSTR = $ComputerName+", Running"
Add-Content $ReportFile $ThisSTR
}
Write-Host "Service status was retrieved from the list of computers and the output was saved in $ReportFile"
Po zakończeniu wykonywania powyższego skryptu PowerShell, zostanie utworzony plik raportu o nazwie ServiceStatus.CSV w folderze „C:Temp”, który zawiera stan usługi o nazwie określonej w zmiennej „$ServiceNameToCheck” ze wszystkich komputerów wymienionych w pliku „C:TempComputers.TXT”.
Zauważ, że skrypt sprawdza, czy polecenie zostało wykonane pomyślnie, zanim zgłosi stan usługi. Skrypt PowerShell wykorzystuje cmdlet „Get-WMIObject” PowerShell do zbierania stanu określonej usługi (usług) z komputerów docelowych. W przypadku, gdy Get-WMIObject nie jest w stanie połączyć się z komputerem docelowym lub jeśli status usługi nie zostanie pobrany, zwróci komunikat „Could Not Connect to Remote Computer or Service Not Running” w raporcie.
Podsumowanie
Dość łatwo jest uzyskać status pojedynczej lub wielu usług z jednego lub wielu zdalnych komputerów z systemem Windows. Chociaż istnieją narzędzia korporacyjne do zbierania inwentarza z komputerów z systemem Windows, w tym stanu usług, istnieją również przypadki, w których te polecenia/skrypty PowerShell są bardzo przydatne, szczególnie gdy trzeba szybko sprawdzić stan konkretnej usługi na wielu komputerach z systemem Windows.
Nirmal Sharma jest MCSEx3, MCITP i Microsoft MVP w Directory Services. Specjalizuje się w usługach katalogowych, Microsoft Azure, klastrach Failover, Hyper-V, System Center i Exchange Servers, a z technologiami firmy Microsoft jest związany od 1994 roku. W wolnym czasie lubi pomagać innym i dzielić się częścią swojej wiedzy, pisząc porady i artykuły na różnych stronach internetowych oraz współtworząc Health Packs dla rozwiązań ADHealthProf.ITDynamicPacks.Net. Nirmal może być osiągalny pod adresem .
Follow ServerWatch na Twitterze i na Facebooku
.