PowerShell er et fantastisk værktøj til scripting. Det er ikke kun med til at spare dig tid, det giver også større fleksibilitet til at udføre gentagne opgaver manuelt eller via planlagte opgaver. Næsten alle Windows-roller og -funktioner leveres med PowerShell-cmdlets.
Du kan bruge Windows-operativsystem-cmdlets, der er tilgængelige som standard, til at udføre operationelle opgaver som f.eks. kontrol af status for en bestemt Windows-tjeneste på flere computere, kontrol af listen over software, der er installeret på Windows-computere, kontrol og indsamling af roller og funktioner, der er installeret på Windows Server-operativsystemer og meget mere.
En af de opgaver, som Windows-administratorer ofte udfører, er at kontrollere status for kritiske tjenester på kritiske produktionsservere, f.eks. Exchange-servere, SQL-servere og/eller Active Directory-domænecontrollere.
Selv om du kan bruge SCCM og lignende værktøjer til at give dig en rapport om status for tjenester fra et bestemt sæt maskiner, kræver SCCM, at SCCM-klienten fungerer på alle målcomputere, før SCCM kan rapportere om status for tjenester.
Det er her, at vores seneste script og Server Tutorial kommer til nytte. Du kan bruge det PowerShell-script, der er forklaret i denne artikel, til hurtigt og nemt at kontrollere status for bestemte tjenester på en enkelt eller flere Windows-computere.
Kontrol af status for en enkelt tjeneste
Hvis du gerne vil kontrollere status for en bestemt tjeneste på en fjerncomputer, er det, du kan gøre, at udføre PowerShell-kommandoen nedenfor:
Get-WMIObject -Computer -Query "Select * From Win32_Service WHERE Name Like "%SomeServiceName%"
Udfører du ovenstående PowerShell-kommando, kan du få status for en bestemt tjeneste, der er angivet i parameteren “%SomeServiceName%”. Denne kommando opretter forbindelse til en fjerncomputer, der er angivet i parameteren “-Computer”. Du vil sandsynligvis ændre både computer- og tjenestenavnene, inden du udfører ovenstående kommando.
Kontrol af status for flere tjenester
Hvis du gerne vil have en liste over alle Windows-tjenester, der kører på et målsystem, skal du udføre følgende PowerShell-kommando:
Get-WMIObject Win32_Service -Computer | Where {$_.State -eq "Running"} | FT -Auto
Overstående kommando viser en liste over alle Windows-tjenester, der kører fra den fjerncomputer, der er angivet i parameteren “-Computer”, og output vises i PowerShell-vinduet. Hvis du gerne vil gemme output i en CSV-fil, kan du tilføje “Export-CSV”, som vist i denne kommando:
Get-WMIObject Win32_Service -Computer | Where {$_.State -eq "Running"} | FT -Auto | Export-CSV "C:TempServicesStatus.CSV"
Kontrol af status for en enkelt tjeneste på flere computere
Mens ovenstående PowerShell-kommandoer vil hjælpe dig med at få dig status for en specifik eller flere tjenester fra en enkelt Windows-computer, kan følgende PowerShell-script bruges, hvis du gerne vil se status for en enkelt tjeneste fra flere Windows-computere. Det eneste, du skal gøre, er at oprette en tekstfil, der indeholder navnene på Windows-computerne, og ændre scriptvariablen “$ServiceNameToCheck” til at omfatte den tjeneste, du ønsker at kontrollere.
$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-scriptet ovenfor er færdig med at blive udført, vil der blive oprettet en rapportfil med navnet ServiceStatus.CSV i mappen “C:Temp”, der indeholder status for det tjenestenavn, der er angivet i variablen “$ServiceNameToCheck” fra alle de computere, der er nævnt i filen “C:TempComputers.TXT”.
Bemærk, at scriptet kontrollerer, at kommandoen blev udført med succes, før det rapporterer tjenestens status. PowerShell-scriptet bruger PowerShell-cmdletten “Get-WMIObject” til at indsamle status for bestemte tjenester fra målcomputere. Hvis Get-WMIObject ikke kan oprette forbindelse til en målcomputer, eller hvis tjenestens status ikke hentes, returneres meddelelsen “Kunne ikke oprette forbindelse til fjerncomputeren, eller tjenesten kører ikke” i rapporten.
Slutning
Det er ret nemt at få status for en enkelt eller flere tjenester fra en enkelt eller flere eksterne Windows-computere. Selv om der findes virksomhedsværktøjer til at indsamle en oversigt fra Windows-computere, herunder status for tjenester, er der også tilfælde, hvor disse PowerShell-kommandoer/skripter er meget praktiske, især når du hurtigt skal kontrollere status for en bestemt tjeneste på flere Windows-computere.
Nirmal Sharma er en MCSEx3, MCITP og Microsoft MVP i Directory Services. Han har specialiseret sig i katalogtjenester, Microsoft Azure, Failover clusters, Hyper-V, System Center og Exchange-servere, og han har beskæftiget sig med Microsoft-teknologier siden 1994. I sin fritid kan han godt lide at hjælpe andre og dele noget af sin viden ved at skrive tips og artikler på forskellige websteder og bidrage til Health Packs for ADHealthProf.ITDynamicPacks.Net-løsninger. Nirmal kan kontaktes på .
Følg ServerWatch på Twitter og på Facebook