Belangrijkste punten
- Schakel veilige remoting in: voer Enable-PSRemoting uit via groepsbeleid en configureer WinRM voor HTTPS (poort 5986) met Kerberos of certificaten, zodat de communicatie over het netwerk versleuteld is.
- Los de “double hop” op: gebruik Resource-Based Constrained Delegation of een gMSA als uw script een tweede bron op afstand (zoals een bestandsshare) moet benaderen om rapporten of logs op te slaan.
- Bevraag moderne klassen: gebruik Get-CimInstance (in plaats van het verouderde Get-WmiObject) om hardwaregegevens op te halen uit klassen zoals Win32_LogicalDisk, Win32_Processor en Win32_PhysicalMemory.
- Voer uit op grote schaal: gebruik Invoke-Command met de parameter -ThrottleLimit om te bepalen hoeveel machines tegelijk worden gecontroleerd en zo netwerkverzadiging of geheugencrashes te voorkomen.
- Moderniseer uw rapportage: gebruik de Microsoft Graph API (Send-MgUserMail) voor e-mailnotificaties zodat moderne authenticatie wordt ondersteund en exporteer gegevens via ConvertTo-Json voor trendanalyse op lange termijn in dashboards.
- Automatiseer & verstevig: plan scripts via Taakplanner met veilige referenties en bouw Try/Catch-blokken en Test-Connection in zodat het script soepel omgaat met offline endpoints.
Met PowerShell kunt u op afstand de apparaatgezondheid monitoren en systeemdiagnostiek automatiseren in bedrijfsnetwerken via WMI-query’s en het verzamelen van performance counters. Met deze oplossingen spoort u hardwarestoringen, prestatieverlies en serviceonderbrekingen op voordat ze uw bedrijfsvoering raken.
PowerShell instellen voor health checks op afstand
Om PowerShell op afstand uit te voeren, moeten zowel het bronsysteem als het doelsysteem correct geconfigureerd zijn, zodat er een beveiligd communicatiekanaal ontstaat. De service Windows Remote Management moet op alle gemonitorde devices ingeschakeld en geconfigureerd zijn om inkomende PowerShell-sessies te accepteren. Authenticatiemechanismen zoals Kerberos en NTLM zorgen voor een veilige overdracht van referenties tijdens bewerkingen op afstand.
Veilige remote access met PowerShell configureren
Wilt u health checks met PowerShell op afstand op grote schaal uitvoeren, dan moet u eerst op alle doelmachines remote access configureren.
Volg daarvoor deze stappen:
- Administratieve voorbereiding voor PowerShell op afstand: voer de cmdlet Enable-PSRemoting uit op elk doelsysteem om PowerShell-verbindingen op afstand te configureren.
- WinRM-servicelisteners configureren: PowerShell maakt een HTTP-listener aan op poort 5985. Voor veiliger communicatie en in lijn met de beste praktijken configureert u een HTTPS-listener op poort 5986 met een geldig TLS-certificaat. Gebruik
winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="<hostname>"; CertificateThumbprint="<thumbprint>"}om indien nodig handmatig een beveiligde listener aan te maken. - Administratieve toegang controleren: controleer of u beheerdersrechten hebt op elk gemonitord device voordat u configuratieopdrachten uitvoert. Het instellen van PowerShell op afstand vereist verhoogde rechten om systeeminstellingen en beveiligingsbeleid te wijzigen.
- Authenticatie en toegang verstevigen: gebruik Kerberos-authenticatie voor systemen in een domein en certificaatgebaseerde authenticatie voor omgevingen buiten een domein. Vermijd NTLM of Basic authentication waar dat mogelijk is.
- Uitrollen op domeinsystemen met groepsbeleid: bij meerdere systemen in een domein gebruikt u inzet groepsbeleid om Enable-PSRemoting gelijktijdig uit te voeren in uw netwerkinfrastructuur.
Pro-tip: het “double hop”-probleem oplossen
Dit is reden nummer 1 waarom scripts op afstand in productie mislukken. Als uw health check-script een netwerkshare moet benaderen om een rapport op te slaan of een bestand op te halen, loopt het mis omdat referenties niet verder worden doorgegeven dan de eerste remote hop.
Het scenario: u voert een script uit vanaf machine A op machine B. Probeert machine B vervolgens machine C te bereiken (bijvoorbeeld een centrale bestandsserver of een database), dan wordt de verbinding geweigerd omdat machine B uw identiteit niet opnieuw kan gebruiken.
De oplossing: gebruik Resource-Based Constrained Delegation (RBCD) of voer het script uit via een Group Managed Service Account (gMSA), zodat de sessie op afstand over de nodige netwerkrechten beschikt om de eindbestemming te bereiken.
Get-CimInstance gebruiken voor hardwarediagnostiek
De cmdlet Get-CimInstance vervangt de verouderde functionaliteit van Get-WmiObject voor het opvragen van Common Information Model-klassen (CIM) op lokale systemen en systemen op afstand. Dat levert betrouwbaardere hardwarediagnostiek en systeeminformatie op.
Gebruik deze belangrijke CIM-klassen om hardwaregegevens te verzamelen:
- Schijfruimte opvragen: de klasse Win32_LogicalDisk levert informatie over schijfruimte, waaronder grootte, vrije ruimte en bestandssysteemtype, zodat u de opslagcapaciteit van alle logische schijven kunt controleren.
- CPU-gezondheid monitoren: de klasse Win32_Processor geeft CPU-specificaties, gebruikspercentages en thermische status (waar ondersteund) terug voor een volledige beoordeling van de processorgezondheid en prestatieopvolging.
- Geheugenstatus controleren: de klasse Win32_PhysicalMemory levert details over geheugenmodules, waaronder capaciteit, snelheid en foutcorrectiemogelijkheden, voor complete RAM-diagnostiek en capaciteitsplanning.
Een PowerShell-script uitvoeren op een device op afstand
De cmdlet Invoke-Command voert PowerShell-opdrachten en scriptblokken gelijktijdig uit op een of meerdere computers op afstand. De cmdlet zet tijdelijke of permanente sessies op met New-PSSession voor herhaalde bewerkingen op dezelfde doelsystemen.
Prestaties beheren op grote schaal
Gebruikt u Invoke-Command op een grote reeks computers, zet dan de parameter -ThrottleLimit in. Standaard beperkt PowerShell het aantal gelijktijdige verbindingen tot 32.
In grote bedrijfsomgevingen kunt u dit verhogen naar 50 of 100 om uw health checks te versnellen, mits uw beheerstation genoeg CPU en RAM heeft voor de gelijktijdige WinRM-sessies. Merkt u daarentegen netwerklatentie op, dan kan een lager getal de directe belasting van uw infrastructuur verminderen.
Gebruik deze belangrijke parameters om scripts op afstand uit te voeren:
- Doelsystemen opgeven: de parameter ComputerName accepteert losse hostnamen, IP-adressen of arrays voor bulkbewerkingen op meerdere devices.
- Permanente sessies opzetten: New-PSSession maakt tijdelijke of permanente sessies aan voor herhaalde bewerkingen op dezelfde doelsystemen.
- Authenticatie configureren: met de parameter Credential kunt u zich authenticeren met andere gebruikersaccounts die over de juiste rechten op de doelsystemen beschikken.
Volledige health check-scripts maken voor Windows PowerShell
PowerShell-scripts voor monitoring bundelen meerdere diagnostische opdrachten in samenhangende workflows die de systeemstatus volledig beoordelen. Bij het ontwikkelen van scripts geldt een modulaire opzet, zodat u functies voor specifieke monitoringtaken kunt hergebruiken. Mechanismen voor foutafhandeling zorgen ervoor dat het script blijft draaien ondanks mislukte afzonderlijke opdrachten of problemen met de netwerkverbinding.
Gezondheid controleren in PowerShell
PowerShell-scripts voor health checks op afstand gebruiken conditionele logica om verzamelde meetwaarden te toetsen aan vooraf bepaalde drempelwaarden. Met Get-CimInstance Win32_PerfRawData_PerfOS_Processor haalt u ruwe prestatiegegevens van de processor op voor gebruiksberekeningen. Vergelijkingsoperatoren zoals -gt, -lt en -eq maken drempelgebaseerde notificaties mogelijk wanneer meetwaarden buiten de aanvaardbare marges vallen. Hashtabellen slaan meerdere systeemmetrieken op voor efficiënte verwerking en rapportage binnen één scriptuitvoering.
Performance counters en gebeurtenissen monitoren
De cmdlet Get-Counter ondersteunt doorlopende prestatiemonitoring via de parameter SampleInterval voor herhaalde metingen over een bepaalde periode. De cmdlet Get-WinEvent bevraagt vermeldingen in het gebeurtenissenlogboek van Windows met de parameter FilterHashtable voor gerichte gebeurtenissen. De parameter MaxEvents beperkt het aantal resultaten om overmatig geheugengebruik tijdens logboekanalyse te voorkomen.
Foutafhandeling in uw scripts inbouwen
Try-Catch-Finally biedt gestructureerde uitzonderingsafhandeling voor PowerShell-scripts die draaien op mogelijk onbereikbare systemen op afstand. De cmdlet Write-Error genereert niet-afbrekende fouten, waardoor het script kan doorgaan na een mislukte afzonderlijke opdracht. De automatische variabele $Error bevat foutobjecten voor gedetailleerde analyse en logging van uitzonderingen.
Terugkerende health checks op afstand automatiseren
Met taakplanning laat u uw PowerShell-scripts voor monitoring automatisch volgens een vast schema draaien, zonder handmatig ingrijpen. Integratie met Windows Taakplanner geeft u krachtige planningsmogelijkheden, inclusief herhaallogica en meldingen bij mislukking. Goed beheer van referenties zorgt er bovendien voor dat geautomatiseerde scripts draaien met de juiste rechten voor toegang tot systemen op afstand.
Taken plannen met schtasks-opdrachten
Gebruik de opdrachtregeltool schtasks.exe om PowerShell-scripts automatisch te laten uitvoeren op basis van tijdsintervallen of systeemgebeurtenissen. Met de parameter /create stelt u een nieuwe taak in met een naam, trigger en uitvoeringsgegevens. Met de parameter /sc geeft u aan hoe vaak de taak draait: elke minuut, elk uur, dagelijks of wekelijks. Stel de parameter /ru in om de taak uit te voeren onder een specifiek gebruikersaccount met de nodige netwerk- en systeemrechten.
Terugkerende controles op afstand configureren
Gebruik opgeslagen referenties of Group Managed Service Accounts (gMSA’s) om geplande PowerShell-scripts te authenticeren. Versleutel wachtwoorden met ConvertTo-SecureString en sla ze op in PSCredential-objecten om gebruikersnamen veilig aan versleutelde wachtwoorden te koppelen. Bewaar deze referenties in Windows Referentiebeheer, zodat zowel geplande taken als handmatige sessies ze kunnen gebruiken zonder gevoelige gegevens prijs te geven.
Conditionele logica voor notificaties implementeren
Gebruik conditionele logica in PowerShell om te bepalen wanneer notificaties worden geactiveerd op basis van drempelwaarden uit uw health checks. Zet if- en switch-statements in om meerdere ernstniveaus te beoordelen en de bijbehorende acties te definiëren. Houd notificatievoorwaarden bij met Booleaanse vlaggen om dubbele meldingen van verwante meetwaarden te vermijden. Vergelijk tijdstempels om notificaties af te remmen: zo dwingt u een minimale tussentijd af tussen meldingen over hetzelfde probleem en voorkomt u alertmoeheid.
Testen en valideren
Test uw PowerShell-scripts met realistische scenario’s en representatieve doelsystemen voordat u ze uitrolt. Gebruik Test-Connection om de netwerkverbinding te bevestigen en onnodige time-outs bij bewerkingen op afstand te vermijden. Voeg de parameter WhatIf toe om scriptacties veilig te bekijken zonder iets te wijzigen. Voor meer inzicht tijdens het testen schakelt u Write-Verbose in: dat levert gedetailleerde logs op waarmee u problemen oplost en prestaties analyseert.
Rapporteren over en reageren op problemen met de apparaatgezondheid
Automatiseer uw rapportage om ruwe gezondheidsgegevens om te zetten in bruikbare inzichten voor beheerders en management. Stel e-mailnotificaties in om kritieke problemen die dringend aandacht vragen meteen te signaleren. Gebruik gestructureerde rapportformaten om trends in de tijd te volgen en slimmere capaciteitsplanning te ondersteunen.
Send-MailMessage voor geautomatiseerde gezondheidsrapporten
Gebruik de Microsoft Graph API en de cmdlet Send-MgUserMail om resultaten van health checks en details van notificaties automatisch naar de gewenste ontvangers te mailen.
Modern mailen met Microsoft Graph
Gebruik de cmdlet Send-MgUserMail om rapporten via Microsoft 365 te versturen. Dat is de moderne standaard, want het oudere Send-MailMessage is inmiddels afgeschaft en ondersteunt geen MFA (Multi-Factor Authentication).
Let op: hiervoor is de machtiging Mail.Send binnen de Microsoft Graph SDK nodig.
PowerShell
M
$params = @{
Message = @{
Subject = "Daily Health Report - $($env:COMPUTERNAME)"
Body = @{
Content = $htmlBody
ContentType = "html"
}
ToRecipients = @(
@{
EmailAddress = @{
Address = "[email protected]"
}
}
)
}
}
Send-MgUserMail -BodyParameter $params
Definieer de afzender- en ontvangeradressen met From en To. Vul de Body met opgemaakte samenvattingen met systeemnamen, belangrijke meetwaarden en eventuele overschreden drempelwaarden, zodat beheerders meteen zicht hebben op kritieke problemen.
Bruikbare samenvattingen van de apparaatgezondheid maken
Bij rapportage met PowerShell combineert u meerdere gegevensbronnen tot uitgebreide samenvattingen met prioriteitsclassificaties, zodat beheerders efficiënt kunnen reageren. De cmdlet ConvertTo-Html zet PowerShell-objecten om in opgemaakte HTML-tabellen die geschikt zijn voor de inhoud van een e-mail. Met CSS-opmaak verhoogt u de leesbaarheid van rapporten via kleurcodering en voorwaardelijke opmaak op basis van de ernst van de notificatie. De cmdlet Export-Csv genereert bestanden met door komma’s gescheiden waarden voor historische gegevensanalyse en trendrapportage in externe applicaties.
Uw gegevens toekomstbestendig maken
HTML is ideaal voor directe e-mailnotificaties, maar overweeg om ConvertTo-Json aan uw workflow toe te voegen en de uitvoer door te sluizen naar Out-File om een lokaal of netwerkbestand op te slaan.
Door gezondheidsgegevens in JSON-formaat te bewaren, kunt u deze meetwaarden eenvoudig inlezen in visualisatietools zoals Power BI, Grafana of een centrale SQL-database. Zo volgt u trends in hardwareveroudering – zoals een gestaag stijgend geheugengebruik of schijffragmentatie – over maanden heen, in plaats van alleen te reageren op dagelijkse notificaties.
Monitoring van de systeemgezondheid vereenvoudigen
Met NinjaOne is het inzien van de gezondheid van uw systemen nog nooit zo eenvoudig geweest, dankzij alle beschikbare opties. Door het monitoringproces te centraliseren en te automatiseren, laten tools zoals NinjaOne u focussen op wat er echt toe doet: uw systemen soepel laten draaien. Ga vandaag nog aan de slag met NinjaOne en ervaar het verschil voor uw IT Management. Probeer het vandaag nog gratis!
Quick-start guide
Mogelijkheden voor health checks
– NinjaOne biedt verschillende ingebouwde scripts voor health checks, waaronder:
– Systeemprestatiecontrole
– Auditscripts (firewallstatus, PowerShell-versie, enzovoort)
– Voorwaardelijke notificaties
– Monitoring van problemen met de apparaatgezondheid
Planning en rapportage
– U kunt geplande automatiseringen aanmaken met verschillende opties:
– Elke X uur/minuten uitvoeren
– Uitvoeren bij het opstarten van het systeem
– Uitvoeren bij het aanmelden van de gebruiker
– Eenmalig of meteen uitvoeren
Voorbeelden van health check-scripts
– Systeemprestatiecontrole: verzamelt gegevens over CPU, geheugen, schijf en netwerk
– Firewallstatus auditen
– PowerShell-versie auditen
– Conditiemonitoring
– Monitoring van het gebeurtenissenlogboek
Rapportagefuncties
– Opslag in aangepaste velden voor resultaten van health checks
– Activiteitenlogging
– Dashboardweergaven van de gezondheidsstatus van devices
– Exportmogelijkheden naar CSV
Aanbevolen aanpak
1. Gebruik de Automation Library van NinjaOne om de juiste health check-scripts te selecteren
2. Configureer geplande automatisering met de gewenste frequentie
3. Stel aangepaste velden in om resultaten op te slaan
4. Gebruik het dashboard om de apparaatgezondheid te monitoren en te beoordelen