PowerShell is een geweldig scriptgereedschap. Het helpt u niet alleen tijd te besparen, maar biedt ook meer flexibiliteit om herhaalde taken handmatig of via geplande taken uit te voeren. Bijna alle Windows rollen en functies worden geleverd met PowerShell cmdlets.
U kunt Windows Operating System cmdlets, die standaard beschikbaar zijn, gebruiken om operationele taken uit te voeren, zoals het controleren van de status van een bepaalde Windows-service op meerdere computers, het controleren van de lijst met geïnstalleerde software op Windows-computers, het controleren en verzamelen van rollen en functies die zijn geïnstalleerd op Windows Server Operating Systems en nog veel meer.
Eén van de taken die Windows-beheerders vaak uitvoeren is het controleren van de status van kritieke services op kritieke productieservers zoals Exchange-servers, SQL-servers en/of Active Directory-domeincontrollers.
Hoewel u SCCM en soortgelijke tools kunt gebruiken om u te voorzien van een rapport over de status van services van een bepaalde set machines, SCCM vereist dat de SCCM Client werkt op alle doelcomputers voordat SCCM kan rapporteren over de status van services.
Dit is waar onze nieuwste script en Server Tutorial van pas komt. U kunt gebruik maken van de PowerShell script uitgelegd in dit artikel om snel en gemakkelijk de status van bepaalde diensten te controleren op een of meerdere Windows-computers.
De status van een enkele service controleren
Als u de status van een bepaalde service op een externe computer wilt controleren, kunt u de onderstaande PowerShell-opdracht uitvoeren:
Get-WMIObject -Computer -Query "Select * From Win32_Service WHERE Name Like "%SomeServiceName%"
Uitvoeren van de bovenstaande PowerShell-opdracht helpt u bij het verkrijgen van de status van een specifieke service die is opgegeven in de parameter “%SomeServiceName%”. Deze opdracht maakt verbinding met een externe computer die is opgegeven in de parameter “-Computer”. U zult waarschijnlijk zowel de computer- als de servicenaam willen veranderen voordat u bovenstaand commando uitvoert.
De status van meerdere services controleren
In het geval dat u een lijst wilt krijgen van alle Windows Services die op een doelsysteem worden uitgevoerd, voert u de volgende PowerShell-opdracht uit:
Get-WMIObject Win32_Service -Computer | Where {$_.State -eq "Running"} | FT -Auto
De bovenstaande opdracht geeft een lijst van alle Windows Services die worden uitgevoerd vanaf de externe computer die is opgegeven in de parameter “-Computer”, en de uitvoer wordt weergegeven in het PowerShell-venster. Als u de uitvoer in een CSV-bestand wilt opslaan, kunt u “Export-CSV” toevoegen, zoals in deze opdracht wordt getoond:
Get-WMIObject Win32_Service -Computer | Where {$_.State -eq "Running"} | FT -Auto | Export-CSV "C:TempServicesStatus.CSV"
De status van een enkele service op meerdere computers controleren
Weliswaar kunt u met de bovenstaande PowerShell-opdrachten de status van een specifieke of meerdere services op een enkele Windows-computer bekijken, maar het volgende PowerShell-script kan worden gebruikt als u de status van een enkele service op meerdere Windows-computers wilt bekijken. Het enige wat je hoeft te doen is een tekstbestand te maken dat de Windows computer namen bevat en de script variabele “$ServiceNameToCheck” aan te passen om de service op te nemen die je wilt controleren.
$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"
Als het bovenstaande PowerShell-script eenmaal is uitgevoerd, wordt een rapportbestand gemaakt met de naam ServiceStatus.CSV aangemaakt in de map “C:Temp”, dat de status bevat van de servicenaam die is opgegeven in de variabele “$ServiceNameToCheck” van alle computers die worden genoemd in het bestand “C:TempComputers.TXT”.
Merk op dat het script controleert of de opdracht met succes is uitgevoerd voordat het de status van de service rapporteert. Het PowerShell script gebruikt het “Get-WMIObject” PowerShell cmdlet om de status van specifieke service(s) van doelcomputers te verzamelen. In het geval dat de Get-WMIObject niet in staat is om verbinding te maken met een doelcomputer of als de status van de service niet wordt opgehaald, zal het een “Could Not Connect to Remote Computer or Service Not Running” bericht retourneren in het rapport.
Conclusie
Het is vrij eenvoudig om de status van een enkele of meerdere services van een of meerdere externe Windows computers te krijgen. Hoewel er ondernemingstools beschikbaar zijn om een inventaris van Windows-computers te verzamelen, inclusief de status van services, zijn er ook gevallen waarin deze PowerShell-opdrachten/scripts erg handig zijn, vooral wanneer u snel de status van een bepaalde service op meerdere Windows-computers moet controleren.
Nirmal Sharma is een MCSEx3, MCITP en Microsoft MVP in Directory Services. Hij is gespecialiseerd in directoryservices, Microsoft Azure, Failover-clusters, Hyper-V, System Center en Exchange-servers, en is sinds 1994 betrokken bij Microsoft-technologieën. In zijn vrije tijd helpt hij graag anderen en deelt hij een deel van zijn kennis door tips en artikelen te schrijven op verschillende sites en bij te dragen aan Health Packs voor ADHealthProf.ITDynamicPacks.Net oplossingen. Nirmal is te bereiken op .
Volg ServerWatch op Twitter en op Facebook