Points clés
- Activez une exécution à distance sécurisée : exécutez Enable-PSRemoting via une stratégie de groupe et configurez WinRM pour qu’il utilise HTTPS (port 5986) avec Kerberos ou des certificats, afin de garantir des communications chiffrées sur le réseau.
- Résolvez le « double saut » : utilisez la délégation contrainte basée sur les ressources ou un gMSA si votre script doit accéder à une seconde ressource distante (comme un partage de fichiers) pour enregistrer des rapports ou des journaux.
- Interrogez les classes modernes : utilisez Get-CimInstance (plutôt que l’ancienne cmdlet Get-WmiObject) pour extraire les données matérielles de classes comme Win32_LogicalDisk, Win32_Processor et Win32_PhysicalMemory.
- Exécutez à grande échelle : utilisez Invoke-Command avec le paramètre -ThrottleLimit pour contrôler le nombre de machines vérifiées simultanément et éviter la saturation du réseau ou les plantages liés à la mémoire.
- Modernisez le reporting : utilisez l’API Microsoft Graph (Send-MgUserMail) pour les alertes par e-mail afin de prendre en charge l’authentification moderne, et exportez les données via ConvertTo-Json pour analyser les tendances sur le long terme dans vos tableaux de bord.
- Automatisez et renforcez : planifiez vos scripts avec le Planificateur de tâches en utilisant des identifiants sécurisés, et intégrez des blocs Try/Catch ainsi que Test-Connection pour que le script gère proprement les terminaux hors ligne.
La surveillance à distance de l’intégrité des appareils via PowerShell permet d’automatiser les diagnostics système sur l’ensemble d’un réseau d’entreprise, grâce aux requêtes WMI et à la collecte de compteurs de performance. Ces solutions vous aident à détecter les pannes matérielles, les baisses de performance et les interruptions de service avant qu’elles n’affectent l’activité.
Préparer PowerShell pour les contrôles d’intégrité à distance
L’exécution à distance de PowerShell suppose une configuration correcte du système source et des systèmes cibles afin d’établir des canaux de communication sécurisés. Le service Windows Remote Management doit être activé et configuré sur tous les appareils surveillés pour qu’ils acceptent les sessions PowerShell entrantes. Les mécanismes d’authentification, notamment Kerberos et NTLM, garantissent une transmission sécurisée des identifiants pendant les opérations à distance.
Configurer un accès PowerShell à distance sécurisé
Pour déployer à grande échelle la surveillance de l’intégrité via PowerShell à distance, vous devez d’abord configurer l’accès à distance sur toutes les machines cibles.
Pour cela, suivez ces étapes ::
- Configuration administrative de PowerShell à distance : exécutez la cmdlet Enable-PSRemoting sur chaque système cible pour configurer les connexions PowerShell à distance.
- Configurer les écouteurs du service WinRM : PowerShell crée un écouteur HTTP sur le port 5985. Pour une communication plus sécurisée et conforme aux bonnes pratiques, configurez un écouteur HTTPS sur le port 5986 avec un certificat TLS valide. Utilisez winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname= »<hostname> »; CertificateThumbprint= »<thumbprint> »} pour créer manuellement un écouteur sécurisé si nécessaire.
- Vérifier l’accès administrateur : assurez-vous de disposer des privilèges d’administration sur chaque appareil surveillé avant d’exécuter les commandes de configuration. La configuration de PowerShell à distance exige des autorisations élevées pour modifier les paramètres système et les politiques de sécurité.
- Renforcer l’authentification et les accès : utilisez l’authentification Kerberos pour les systèmes joints au domaine et l’authentification par certificat pour les environnements hors domaine. Évitez autant que possible NTLM et l’authentification de base.
- Déployer sur les systèmes du domaine via une stratégie de groupe : lorsque plusieurs systèmes sont joints au domaine, utilisez la stratégie de groupe pour le déploiement afin d’exécuter simultanément Enable-PSRemoting sur l’ensemble de votre infrastructure réseau.
Astuce de pro : résoudre le problème du « double saut »
C’est la première cause d’échec des scripts distants en production. Si votre script de contrôle d’intégrité doit accéder à un partage réseau pour enregistrer un rapport ou récupérer un fichier, il échouera : les identifiants ne sont pas transmis au-delà du premier saut distant.
Le scénario : vous exécutez un script depuis la machine A vers la machine B. Si la machine B tente ensuite de contacter la machine C (par exemple un serveur de fichiers central ou une base de données), la connexion sera refusée, car la machine B ne peut pas « réutiliser » votre identité.
La solution : utilisez la délégation contrainte basée sur les ressources (RBCD) ou exécutez le script via un compte de service administré de groupe (gMSA) pour que la session distante dispose des autorisations réseau nécessaires jusqu’à la destination finale.
Utiliser Get-CimInstance pour les diagnostics matériels
La cmdlet Get-CimInstance remplace l’ancienne cmdlet Get-WmiObject pour interroger les classes CIM (Common Information Model) sur les systèmes locaux et distants. Elle offre des diagnostics matériels et une récupération des informations système plus fiables.
Utilisez ces classes CIM essentielles pour collecter les données matérielles :
- Interroger l’espace disque : la classe Win32_LogicalDisk fournit les informations relatives à l’espace disque, notamment la taille, l’espace libre et le type de système de fichiers, pour surveiller la capacité de stockage sur tous les disques logiques.
- Surveiller l’état du processeur : la classe Win32_Processor renvoie les caractéristiques du processeur, les pourcentages d’utilisation et l’état thermique (lorsqu’il est pris en charge), pour une évaluation complète de l’état du processeur et un suivi des performances.
- Vérifier l’état de la mémoire : la classe Win32_PhysicalMemory fournit le détail des modules mémoire, notamment la capacité, la vitesse et les fonctions de correction d’erreurs, pour un diagnostic RAM complet et la planification des capacités.
Exécuter un script PowerShell sur un appareil distant
La cmdlet Invoke-Command exécute des commandes et des blocs de script PowerShell sur un ou plusieurs ordinateurs distants simultanément. Elle établit des sessions temporaires ou persistantes à l’aide de New-PSSession pour les opérations répétées sur les mêmes systèmes cibles.
Gérer les performances à grande échelle
Lorsque vous utilisez Invoke-Command sur un grand nombre d’ordinateurs, recourez au paramètre -ThrottleLimit. Par défaut, PowerShell limite les connexions simultanées à 32.
Dans les environnements de grandes entreprises, vous pouvez porter cette valeur à 50 ou 100 pour accélérer vos contrôles d’intégrité, à condition que votre station d’administration dispose du processeur et de la RAM nécessaires pour gérer les sessions WinRM simultanées. À l’inverse, si vous constatez de la latence réseau, réduire ce nombre permet d’alléger la charge immédiate sur votre infrastructure.
Utilisez ces paramètres clés pour exécuter vos scripts à distance :
- Désigner les systèmes cibles : le paramètre ComputerName accepte des noms d’hôtes individuels, des adresses IP ou des tableaux pour des opérations groupées sur plusieurs appareils.
- Établir des sessions persistantes : New-PSSession crée des sessions temporaires ou persistantes pour les opérations répétées sur les mêmes systèmes cibles.
- Configurer l’authentification : le paramètre Credential permet de s’authentifier avec d’autres comptes utilisateurs disposant des autorisations appropriées sur les systèmes cibles.
Créer des scripts complets de contrôle d’intégrité pour Windows PowerShell
Les scripts de surveillance PowerShell regroupent plusieurs commandes de diagnostic au sein de workflows cohérents qui évaluent l’état du système dans sa globalité. Leur développement suit des principes de conception modulaire afin de créer des fonctions réutilisables pour des tâches de surveillance précises. Les mécanismes de gestion des erreurs garantissent la poursuite de l’exécution malgré l’échec d’une commande ou un problème de connectivité réseau.
Contrôler l’intégrité avec PowerShell
Les scripts PowerShell de contrôle d’intégrité à distance s’appuient sur une logique conditionnelle pour comparer les mesures collectées à des seuils prédéfinis. La cmdlet Get-CimInstance Win32_PerfRawData_PerfOS_Processor récupère les données brutes de performance du processeur pour calculer son utilisation. Les opérateurs de comparaison, notamment -gt, -lt et -eq, permettent de déclencher des alertes lorsque les mesures dépassent les plages acceptables. Les tables de hachage stockent plusieurs mesures système pour un traitement efficace et la génération de rapports au cours d’une même exécution de script.
Surveiller les compteurs de performance et les événements
La cmdlet Get-Counter prend en charge la surveillance continue des performances grâce au paramètre SampleInterval, qui permet de répéter les mesures sur une période donnée. La cmdlet Get-WinEvent interroge les entrées du journal d’événements Windows via le paramètre FilterHashtable pour cibler des événements précis. Le paramètre MaxEvents limite le nombre de résultats afin d’éviter une consommation excessive de mémoire pendant l’analyse des journaux.
Intégrer la gestion des erreurs à vos scripts
Try-Catch-Finally offre une gestion structurée des exceptions pour les scripts PowerShell exécutés sur des systèmes distants potentiellement inaccessibles. La cmdlet Write-Error génère des erreurs non bloquantes qui permettent au script de poursuivre son exécution après l’échec d’une commande. La variable automatique $Error contient les objets d’erreur, utiles pour l’analyse détaillée des exceptions et la journalisation.
Automatiser les contrôles d’intégrité à distance récurrents
Utilisez la planification de tâches pour exécuter automatiquement vos scripts de surveillance PowerShell selon un calendrier défini, sans intervention manuelle. L’intégration au Planificateur de tâches Windows offre des capacités de planification robustes, avec notamment une logique de nouvelle tentative et des notifications en cas d’échec. La gestion des identifiants garantit par ailleurs que les scripts automatisés s’exécutent avec les autorisations nécessaires à l’accès aux systèmes distants.
Planifier des tâches avec les commandes schtasks
Utilisez l’utilitaire en ligne de commande schtasks.exe pour planifier l’exécution automatique de scripts PowerShell selon des intervalles de temps ou des événements système. Le paramètre /create crée une tâche avec un nom, un déclencheur et des détails d’exécution définis. Le paramètre /sc précise la fréquence d’exécution : toutes les minutes, toutes les heures, tous les jours ou toutes les semaines. Le paramètre /ru permet d’exécuter la tâche sous un compte utilisateur spécifique disposant des autorisations réseau et système nécessaires.
Configurer des contrôles distants récurrents
Pour authentifier les scripts PowerShell planifiés, utilisez des identifiants stockés ou des comptes de service administrés de groupe (gMSA).. Chiffrez les mots de passe avec ConvertTo-SecureString et stockez-les dans des objets PSCredential pour associer de façon sécurisée les noms d’utilisateurs aux mots de passe chiffrés. Enregistrez ces identifiants dans le Gestionnaire d’identifiants Windows afin que les tâches planifiées comme les sessions manuelles puissent y accéder sans exposer de données sensibles.
Mettre en œuvre une logique conditionnelle pour les alertes
Utilisez une logique conditionnelle dans PowerShell pour déterminer quand déclencher les alertes en fonction des seuils de contrôle d’intégrité. Appuyez-vous sur les instructions if et switch pour évaluer plusieurs niveaux de gravité et définir les actions correspondantes. Suivez les conditions d’alerte à l’aide d’indicateurs booléens afin d’éviter les notifications en double liées à des mesures connexes. Utilisez des comparaisons d’horodatage pour limiter la fréquence des alertes, en imposant un intervalle minimal entre deux notifications pour un même problème, ce qui prévient la fatigue liée aux alertes.
Tester et valider
Testez vos scripts PowerShell sur des scénarios réels et des systèmes cibles représentatifs avant le déploiement. Utilisez Test-Connection pour confirmer la connectivité réseau et éviter les délais d’attente inutiles pendant les opérations à distance. Ajoutez le paramètre WhatIf pour prévisualiser en toute sécurité les actions du script sans appliquer de modification. Pour plus de visibilité pendant les tests, activez Write-Verbose afin de générer des journaux détaillés qui facilitent le dépannage et l’analyse des performances.
Créer des rapports et traiter les problèmes d’intégrité
Automatisez votre reporting pour transformer les données brutes d’intégrité en informations exploitables, aussi bien pour les administrateurs que pour la direction. Configurez des notifications par e-mail pour signaler immédiatement les problèmes critiques nécessitant une intervention urgente. Utilisez des formats de rapport structurés pour suivre les tendances dans le temps et affiner la planification des capacités.
Send-MailMessage pour les rapports d’intégrité automatisés
Utilisez l’API Microsoft Graph et la cmdlet Send-MgUserMail pour envoyer automatiquement par e-mail les résultats des contrôles d’intégrité et le détail des alertes aux destinataires désignés.
Envoi d’e-mails moderne avec Microsoft Graph
Pour envoyer des rapports via Microsoft 365, utilisez la cmdlet Send-MgUserMail. C’est aujourd’hui le standard : l’ancienne cmdlet Send-MailMessage est obsolète et ne prend pas en charge la MFA (authentification forte).
Remarque : cela nécessite l’autorisation Mail.Send dans le SDK Microsoft Graph.
PowerShell
M
$params = @{
Message = @{
Subject = "Daily Health Report - $($env:COMPUTERNAME)"
Body = @{
Content = $htmlBody
ContentType = "html"
}
ToRecipients = @(
@{
EmailAddress = @{
Address = "[email protected]"
}
}
)
}
}
Send-MgUserMail -BodyParameter $params
Définissez les adresses de l’expéditeur et du destinataire avec From et To. Remplissez le champ Body avec des synthèses formatées qui reprennent les noms des systèmes, les mesures clés et les dépassements de seuils, afin que les administrateurs identifient immédiatement les problèmes critiques.
Créer des synthèses d’intégrité exploitables
La génération de rapports avec PowerShell combine plusieurs sources de données en synthèses complètes, assorties de niveaux de priorité pour accélérer la réponse des administrateurs. La cmdlet ConvertTo-Html transforme les objets PowerShell en tableaux HTML formatés, adaptés au corps d’un e-mail. Les styles CSS améliorent la lisibilité des rapports grâce au codage couleur et à la mise en forme conditionnelle selon le niveau de gravité des alertes. La cmdlet Export-Csv génère des fichiers CSV pour l’analyse historique des données et le reporting de tendances dans des applications externes.
Préparer vos données pour l’avenir
Le HTML est idéal pour les alertes envoyées immédiatement par e-mail, mais pensez à ajouter ConvertTo-Json à votre workflow, puis à rediriger la sortie vers Out-File pour conserver un enregistrement local ou réseau.
En enregistrant les données d’intégrité au format JSON, vous pouvez facilement les injecter dans des outils de visualisation comme Power BI, Grafana ou une base de données SQL centralisée. Vous suivez ainsi les tendances de dégradation du matériel, par exemple une hausse continue de l’utilisation mémoire ou la fragmentation des disques, sur plusieurs mois, au lieu de simplement réagir aux alertes quotidiennes.
Simplifier la surveillance de l’intégrité des systèmes
Avec NinjaOne, consulter l’état de santé de vos systèmes n’a jamais été aussi simple, compte tenu de toutes les options à votre disposition. En centralisant et en automatisant la surveillance, des outils comme NinjaOne vous permettent de vous concentrer sur l’essentiel : garder vos systèmes en parfait état de marche. Adoptez NinjaOne dès aujourd’hui et mesurez la différence dans votre gestion informatique. Essayez-le gratuitement dès aujourd’hui !
Guide de démarrage rapide
Fonctionnalités de contrôle d’intégrité
– NinjaOne propose plusieurs scripts intégrés pour les contrôles d’intégrité des systèmes, notamment :
, Contrôle des performances système
, Scripts d’audit (état du pare-feu, version de PowerShell, etc.)
, Alertes de conditions
, Surveillance des problèmes d’intégrité des appareils
Planification et reporting
– Vous pouvez créer des automatisations planifiées avec différentes options :
, Exécution toutes les X heures/minutes
, Exécution au démarrage du système
, Exécution à la connexion de l’utilisateur
, Exécution unique ou immédiate
Exemples de scripts de contrôle d’intégrité
– Contrôle des performances système : collecte des données sur le processeur, la mémoire, le disque et le réseau
, Audit de l’état du pare-feu
, Audit de la version de PowerShell
, Surveillance des conditions
, Surveillance des journaux d’événements
Fonctions de reporting
– Stockage des résultats des contrôles d’intégrité dans des champs personnalisés
, Journalisation des activités
, Vues de tableau de bord sur l’état d’intégrité des appareils
, Possibilités d’export au format CSV
Approche recommandée
1. Utilisez la bibliothèque d’automatisation de NinjaOne pour sélectionner les scripts de contrôle d’intégrité appropriés
2. Configurez une automatisation planifiée à la fréquence souhaitée
3. Créez des champs personnalisés pour stocker les résultats
4. Servez-vous du tableau de bord pour suivre et analyser l’intégrité des appareils
