PowerShell är ett utmärkt skriptverktyg. Det hjälper inte bara till att spara tid, utan ger också större flexibilitet när det gäller att utföra upprepade uppgifter manuellt eller via schemalagda uppgifter. Nästan alla Windows-roller och -funktioner levereras med PowerShell-cmdlets.
Du kan använda cmdlets för Windows-operativsystem, som är tillgängliga som standard, för att utföra operativa uppgifter, t.ex. kontrollera statusen för en viss Windows-tjänst på flera datorer, kontrollera listan över programvaror som är installerade på Windows-datorer, kontrollera och samla in roller och funktioner som är installerade på Windows Server-operativsystem och mycket mer.
En av de uppgifter som Windows-administratörer ofta utför är att kontrollera statusen för kritiska tjänster på kritiska produktionsservrar som Exchange-servrar, SQL-servrar och/eller Active Directory-domänkontrollanter.
Tyvärr kan du använda SCCM och liknande verktyg för att få en rapport om tjänsternas status från en viss uppsättning maskiner, men SCCM kräver att SCCM-klienten fungerar på alla måldatorer innan SCCM kan rapportera om tjänsternas status.
Det är här som vår senaste skript- och serverhandledning kommer väl till pass. Du kan använda PowerShell-skriptet som förklaras i den här artikeln för att snabbt och enkelt kontrollera statusen för vissa tjänster på en enskild eller flera Windows-datorer.
Kontrollera status för en enskild tjänst
Om du vill kontrollera status för en viss tjänst på en fjärrdator kan du utföra PowerShell-kommandot nedan:
Get-WMIObject -Computer -Query "Select * From Win32_Service WHERE Name Like "%SomeServiceName%"
Exekverar du PowerShell-kommandot ovan kan du få status för en viss tjänst som anges i parametern ”%SomeServiceName%”. Det här kommandot ansluter till en fjärrdator som anges i parametern ”-Computer”. Du vill troligen ändra både dator- och tjänstens namn innan du utför ovanstående kommando.
Kontrollera statusen för flera tjänster
Om du vill få en lista över alla Windows-tjänster som körs på ett målsystem utför du följande PowerShell-kommando:
Get-WMIObject Win32_Service -Computer | Where {$_.State -eq "Running"} | FT -Auto
Ovanstående kommando listar alla Windows-tjänster som körs från fjärrdatorn som anges i parametern ”-Computer”, och resultatet visas i PowerShell-fönstret. Om du vill spara utmatningen i en CSV-fil kan du lägga till ”Export-CSV” som visas i det här kommandot:
Get-WMIObject Win32_Service -Computer | Where {$_.State -eq "Running"} | FT -Auto | Export-CSV "C:TempServicesStatus.CSV"
Kontrollera statusen för en enskild tjänst på flera datorer
Med hjälp av ovanstående PowerShell-kommandon kan du få fram statusen för en specifik eller flera tjänster från en enskild Windows-dator, men följande PowerShell-skript kan användas om du vill se statusen för en enda tjänst från flera Windows-datorer. Allt du behöver göra är att skapa en textfil som innehåller namnen på Windows-datorerna och ändra skriptvariabeln ”$ServiceNameToCheck” så att den innehåller den tjänst du vill kontrollera.
$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"
När PowerShell-skriptet ovan har avslutats, kommer en rapportfil att skapas med namnet ServiceStatus.CSV i mappen ”C:Temp” som innehåller statusen för det tjänstens namn som anges i variabeln ”$ServiceNameToCheck” från alla datorer som nämns i filen ”C:TempComputers.TXT”.
Notera att skriptet kontrollerar att kommandot exekverades framgångsrikt innan det rapporterar statusen för tjänsten. PowerShell-skriptet använder PowerShell-cmdletten ”Get-WMIObject” för att samla in statusen för specifika tjänster från måldatorer. Om Get-WMIObject inte kan ansluta till en måldator eller om tjänstens status inte hämtas, returneras meddelandet ”Could Not Connect to Remote Computer or Service Not Running” (kunde inte ansluta till fjärrdatorn eller tjänsten körs inte) i rapporten.
Slutsats
Det är ganska enkelt att hämta statusen för en enskild eller flera tjänster från en enskild eller flera fjärrdatorer i Windows. Även om det finns företagsverktyg tillgängliga för att samla in en inventering från Windows-datorer, inklusive tjänsternas status, finns det också fall där dessa PowerShell-kommandon/skript är mycket praktiska, särskilt när du snabbt behöver kontrollera statusen för en viss tjänst på flera Windows-datorer.
Nirmal Sharma är en MCSEx3, MCITP och Microsoft MVP i Directory Services. Han är specialiserad på katalogtjänster, Microsoft Azure, Failover clusters, Hyper-V, System Center och Exchange Servers och har arbetat med Microsoft-teknik sedan 1994. På sin fritid gillar han att hjälpa andra och dela med sig av sina kunskaper genom att skriva tips och artiklar på olika webbplatser och bidra till Health Packs för ADHealthProf.ITDynamicPacks.Net-lösningar. Nirmal kan nås på .
Följ ServerWatch på Twitter och Facebook
.