/
/

Zo voert u health checks op afstand uit met PowerShell en mailt u de rapporten

door Team Ninja
How to Run Remote Device Health Checks Using PowerShell and Email Reports blog banner image

Directe samenvatting

Deze blogpost van NinjaOne biedt een uitgebreide basislijst met CMD-commands en een deep dive duik in Windows-commands met meer dan 70 essentiële cmd-commands voor zowel beginners als gevorderden. Het legt praktische opdrachtpromptcommando’s uit voor file management, directory navigation, network troubleshooting, disk operations en automatisering met echte voorbeelden om de productiviteit te verbeteren. Of u nu fundamentele cmd-commands leert of geavanceerde Windows CLI-tools onder de knie krijgt, deze gids helpt u de Command Prompt effectiever te gebruiken.

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:

  1. Administratieve voorbereiding voor PowerShell op afstand: voer de cmdlet Enable-PSRemoting uit op elk doelsysteem om PowerShell-verbindingen op afstand te configureren.
  2. 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.
  3. 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.
  4. 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.
  5. 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:

  1. Doelsystemen opgeven: de parameter ComputerName accepteert losse hostnamen, IP-adressen of arrays voor bulkbewerkingen op meerdere devices.
  2. Permanente sessies opzetten: New-PSSession maakt tijdelijke of permanente sessies aan voor herhaalde bewerkingen op dezelfde doelsystemen.
  3. 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

FAQs

Gebruik groepsbeleid (GPO) om Enable-PSRemoting in uw domein uit te voeren. Schakel voor maximale beveiliging WinRM via HTTPS (poort 5986) in met Kerberos of certificaten en implementeer Just Enough Administration (JEA) om beheersessies te beperken tot uitsluitend de cmdlets die voor health checks nodig zijn.

Get-CimInstance is de moderne standaard en gebruikt het transport WS-Management (WS-Man), dat firewallvriendelijk en zeer betrouwbaar is voor sessies op afstand. Get-WmiObject is een verouderde cmdlet die op DCOM steunt: trager, minder veilig en te vervangen in alle moderne health check-scripts.

Volg CPU, geheugen, schijfruimte/IO, kritieke services en fout- en waarschuwingsgebeurtenissen met Get-Counter en Get-WinEvent, aangevuld met CIM-klassen (bijvoorbeeld Win32_LogicalDisk en Win32_Processor).

Gebruik Invoke-Command met een array van computernamen en pas de parameter -ThrottleLimit toe. Zo bepaalt u het aantal gelijktijdige verbindingen (bijvoorbeeld 50 tegelijk) en voorkomt u CPU-pieken op uw beheerstation en netwerkcongestie.

Het double hop-probleem treedt op wanneer een script op een machine op afstand (hop 1) een tweede netwerkbron probeert te benaderen, zoals een bestandsshare (hop 2), en wordt geweigerd omdat referenties niet worden doorgegeven. Los dit op met Resource-Based Constrained Delegation (RBCD) of voer uw geplande taken uit via een Group Managed Service Account (gMSA).

Send-MailMessage ondersteunt geen moderne authenticatie, dus gebruikt u beter de Microsoft Graph API en de cmdlet Send-MgUserMail. Zo omzeilen uw geautomatiseerde rapporten basisauthenticatie en werken ze veilig samen met Microsoft 365-omgevingen.

Implementeer drempelgebaseerde logica (bijvoorbeeld alleen een notificatie als de CPU bij drie opeenvolgende controles >90% is) en Booleaanse vlaggen om dubbele meldingen te onderdrukken. Exporteer uw resultaten daarnaast met ConvertTo-Json en voer ze in een dashboard zoals Grafana of Power BI, zodat u visueel kunt triëren in plaats van alleen op e-mails te vertrouwen.

Dit vindt u misschien ook leuk

Klaar om de moeilijkste delen van IT te vereenvoudigen?

NinjaOne Algemene Voorwaarden

Door op de knop “Ik accepteer” hieronder te klikken, geeft u aan dat u de volgende wettelijke voorwaarden en onze Gebruiksvoorwaarden accepteert:

  • Eigendomsrechten: NinjaOne bezit en blijft eigenaar van alle rechten, aanspraken en belangen in en op het script (inclusief het auteursrecht). NinjaOne geeft u een beperkte licentie om het script te gebruiken in overeenstemming met deze wettelijke voorwaarden.
  • Gebruiksbeperking: U mag het script alleen gebruiken voor uw legitieme persoonlijke of interne bedrijfsdoeleinden en u mag het script niet delen met derden.
  • Republicatieverbod: Het is onder geen beding toegestaan om het script opnieuw te publiceren in een scriptbibliotheek die toebehoort aan of onder controle staat van een andere softwareleverancier.
  • Garantie disclaimer: Het script wordt geleverd “zoals het is” en “zoals het beschikbaar is”, zonder enige vorm van garantie. NinjaOne belooft of garandeert niet dat het script vrij van gebreken zal zijn of dat het aan uw specifieke behoeften of verwachtingen zal voldoen.
  • Risicoaanvaarding: Het gebruik van het script is op eigen risico. U erkent dat het gebruik van het script bepaalde inherente risico’s met zich meebrengt en u begrijpt en aanvaardt elk van deze risico’s.
  • Verklaring van afstand en vrijwaring: U zult NinjaOne niet verantwoordelijk houden voor enige nadelige of onbedoelde gevolgen die voortvloeien uit uw gebruik van het script en u doet afstand van alle wettelijke of billijke rechten of rechtsmiddelen die u tegen NinjaOne kunt hebben met betrekking tot uw gebruik van het script.
  • EULA: Als u een NinjaOne-klant bent, is uw gebruik van het script onderworpen aan de licentieovereenkomst voor eindgebruikers die op u van toepassing is (EULA).