Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Scroll Ignore
scroll-pdftrue
scroll-officetrue
scroll-chmtrue
scroll-docbooktrue
scroll-eclipsehelptrue
scroll-epubtrue
scroll-htmlfalse
Panel
titleSommaire

Table of Contents
maxLevel45
stylenone



Contexte

Info

Pack concerné : windows-by-WinRM__shinken

Versions : V02.08.00 — script Configure-Host.ps1 V02.08.00

Cette page a pour but de décrire la mise en place d'une configuration minimale pour une machine Windows afin qu'elle puisse être supervisée par Vous retrouverez dans cette page les erreurs rencontrées lors de la configuration d'un Windows supervisé pour le pack windows-by-WinRM__shinken : exécution du script, service WinRM, compte de supervision, permissions et Active Directory..




Pour qui ?Administrateur Windows, du débutant au confirmé
Durée1 à 10 minutes avec le script, ~45 minutes en manuel
Ce dont vous avez besoinUn accès administrateur sur la machine à superviser
Résultat attendu
  • Un compte de supervision dédié
  • Le service WinRM prêt à répondre au poller Shinken
  • Un pare-feu configuré

Périmètre de ce guide

Ce guide couvre la configuration machine par machine. Il vous permet de :

  • Tester le pack en moins de 10 minutes, à petite échelle, avant un déploiement plus large
  • Configurer un petit parc de machines et l'exploiter directement


Note

Pour superviser un parc important, ou si vous avez besoin de maîtriser finement la configuration appliquée et déployée, consultez la page Configuration centralisée par GPO d'un parc Windows (Active Directory) pour le

Info

Pour les erreurs remontées par les checks une fois la supervision en place (Transport error, Authentication failed, AccessDenied...), consultez la page Erreurs du pack windows-by-WinRM__shinken.

Les erreurs

Exécution du script

Impossible de charger le fichier <nom_du_script.ps1> car l'exécution de scripts est désactivée

Le script Configure-Host.ps1 refuse de démarrer. PowerShell bloque par défaut les scripts non signés numériquement via sa stratégie d'exécution (Execution Policy). Aucune modification n'a été appliquée sur la machine.

Code Block
languagetext
themeEmacs
Impossible de charger le fichier C:\<nom_du_script.ps1>, car l'exécution de scripts
est désactivée sur ce système.
    + CategoryInfo          : Erreur de sécurité : (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Mots-clés : UnauthorizedAccess · PSSecurityException · Execution Policy · l'exécution de scripts est désactivée · n'est pas signé numériquement

Info

Survient à l'étape : Étape 3 — Autoriser l'exécution du script — voir Étape 3 — Autoriser l'exécution du script sur la page de configuration.

Panel

Image Removed

Section

Résolution :

Autorisez l'exécution pour la session courante uniquement :

Code Block
languagepowershell
themeEmacs
Set-ExecutionPolicy Unrestricted -Scope Process
Info

-Scope Process ne modifie que la fenêtre PowerShell ouverte : aucun impact persistant sur la machine, la stratégie d'origine est rétablie à la fermeture. Pour connaître la stratégie en vigueur :

Code Block
languagepowershell
themeEmacs
Get-ExecutionPolicy -List

WSManFault – Le type de connexion réseau défini sur cet ordinateur est Public

Tip

Conseil : même si vous devez équiper un parc entier :

  • Vous pouvez passer par cette page pour valider le fonctionnement sur une machine de test.
  • Vous passerez ensuite à la configuration par domaine, qui offre une gestion centralisée, contrôlable et révocable.

Interactions entre WinRM et le pack windows-by-WinRM__shinken
Anchor
procedure_de_configuration
procedure_de_configuration

La supervision d'un Windows par un poller Shinken repose sur des requêtes WinRM :

Panel

Image Added

  1. Côté poller Shinken — la sonde WinRM envoie les requêtes et traite les réponses.
  2. Côté Windows supervisé — le service WinRM reçoit les requêtes et y répond.
  3. WinRM récupère les informations exposées par WMI (Windows Management Instrumentation).

Il faut donc configurer deux choses sur chaque machine supervisée :

  • Le service WinRM (démarrage, écouteur, pare-feu, authentification)
  • Un compte de supervision dédié, avec uniquement les droits nécessaires


Warning

N'utilisez pas le compte Administrateur pour la supervision. Il fonctionnerait (il a tous les droits), mais c'est une mauvaise pratique de sécurité. Créez un compte dédié : c'est exactement ce que fait le script.

Prérequis
Anchor
configuration_de_winrm
configuration_de_winrm

Vérifiez ces trois points avant de commencer.

1. Version de Windows supportée

Le Windows supervisé doit correspondre à une des versions suivantes :


Excerpt
Postes de travailServeurs
Windows 11Windows Server 2025
Windows 10Windows Server 2022

Windows Server 2019

Windows Server 2016

Windows Server 2012 R2

PowerShell 4.0 ou supérieur est également requis.

2. Une langue compatible installée

La sonde interprète les réponses de Windows : au moins une de ces deux langues doit être installée sur la machine.

  • Français (fr-FR)
  • Anglais (en-US)
Warning

Ce prérequis s'applique aux deux méthodes, script compris. Le script vérifie la langue à son étape 1 et s'arrête immédiatement si aucune n'est présente : rien n'est configuré dans ce cas. Il n'installe pas la langue lui-même, car la méthode d'installation dépend de la version de Windows et nécessite parfois le média d'installation.


Pour vérifier — sur toutes les versions de Windows :winrm quickconfig s'interrompt sans configurer WinRM. Windows refuse d'activer la gestion à distance tant qu'au moins une carte réseau est en profil Public. Le cas est fréquent sur Windows 10 et Windows 11, où une carte non identifiée bascule automatiquement dans ce profil.

Code Block
languagetext
themeEmacs
WSManFault
    Message = Le client WinRM ne peut pas traiter la demande. Le type de connexion réseau
    défini sur cet ordinateur est Public. Dans ce type de réseau, le pare-feu bloque le
    pilote WinRM.
Error number:  -2144108183 0x80338169

Mots-clés : WSManFault · 0x80338169 · -2144108183 · connexion réseau · Public · le pare-feu bloque le pilote WinRM

Info

Survient à l'étape : Étape 4 — Lancer le script, ou B.1 en configuration manuelle — voir Prérequis sur la page de configuration.

Panel

Image Removed

Section

Résolution :

Identifiez la carte concernée :

Code Block
languagepowershell
themeEmacs
Get-NetConnectionProfile

Basculez-la en Privé (ou Domaine si la machine est jointe à un annuaire), en remplaçant le nom de l'interface :

Code Block
languagepowershell
themeEmacs
Set-NetConnectionProfile -InterfaceAlias "Ethernet" -NetworkCategory Private
Panel

Image Removed

Note

Sur un serveur en production, ce changement de profil peut modifier les règles de pare-feu appliquées. Vérifiez vos politiques internes avant de le réaliser.

Service WinRM, compte et permissions

Le service WinRM est arrêté après chaque redémarrage

La supervision fonctionne, puis tous les checks de la machine tombent en erreur après un redémarrage. Sur Windows 10 et Windows 11, le service WinRM est configuré en démarrage manuel par défaut : il ne se relance pas tout seul.

Code Block
languagetext
themeEmacs
Status   Name               DisplayName
------   ----               -----------
Stopped  WinRM              Gestion à distance de Windows (Gestion WS)

Mots-clés : WinRM · Stopped · StartupType · Manual · connection refused · request timed out

Info

Survient à l'étape : Prérequis — 3. Le service WinRM est actif — voir Prérequis sur la page de configuration.

Panel

Image Removed

Section

Résolution :

Code Block
languagepowershell
themeEmacs
Set-Service -Name WinRM -StartupType Automatic
Start-Service WinRM
Get-Service WinRM
Panel

Image Removed

Info

Côté Shinken, cette panne se manifeste par une erreur Transport error : connection refused ou request timed out sur tous les checks de l'hôte.

Le nom de groupe local spécifié est introuvable – net localgroup

L'ajout du compte de supervision à un groupe local échoue après un copier-coller, alors que le nom du groupe paraît correct à l'écran. La cause est une apostrophe typographique () substituée à l'apostrophe droite (') au moment du collage par clic droit, dans « Utilisateurs de l'Analyseur de performances ».

Code Block
languagetext
themeEmacs
Le nom de groupe local spécifié est introuvable.
D'autres informations sont disponibles à l'adresse NET HELPMSG 3763.

Mots-clés : net localgroup · NET HELPMSG 3763 · nom de groupe local introuvable · Analyseur de performances · Performance Monitor Users · apostrophe

Info

Survient à l'étape : B.6 — Ajouter l'utilisateur aux groupes — voir B.6 — Ajouter l'utilisateur aux groupes sur la page de configuration.

Panel

[Capture à insérer : la commande échouée dans la console]

Section

Résolution :

  • Collez avec CTRL+V plutôt qu'avec le clic droit, ou
  • saisissez l'apostrophe manuellement dans la console, ou
  • utilisez le nom anglais du groupe, qui ne contient pas d'apostrophe :
Code Block
languagepowershell
themeEmacs
net localgroup "Performance Monitor Users" shinken_user /ADD

Pour vérifier l'appartenance effective du compte :

Code Block
languagepowershell
themeEmacs
net user shinken_user

La supervision s'arrête brutalement du jour au lendemain

Tous les checks d'une machine — ou de l'ensemble du parc si le compte est partagé — passent en erreur simultanément, sans qu'aucune configuration n'ait été modifiée. Le mot de passe du compte de supervision a expiré conformément à la politique de sécurité du domaine ou de la machine.

Code Block
languagetext
themeEmacs
UNKNOWN – Authentication NTLM failed : Unauthorized

Mots-clés : Authentication failed · Unauthorized · mot de passe expiré · PasswordExpired · PasswordNeverExpires

Info

Survient à l'étape : Étape 4 — Gérer l'expiration du mot de passe — voir Gérer l'expiration du mot de passe sur la page de configuration.

Panel

Image Removed

Section

Résolution :

Vérifiez l'état du compte :

Code Block
languagepowershell
themeEmacs
net user shinken_user | findstr /C:"expire"

Redéfinissez le mot de passe, puis empêchez son expiration :

Code Block
languagepowershell
themeEmacs
$secPass = ConvertTo-SecureString "VotreMotDePasse" -AsPlainText -Force
.\Configure-Host.ps1 -UserName "shinken_user" -Password $secPass -PasswordNeverExpires
Warning

Si le mot de passe est déjà expiré, activer -PasswordNeverExpires ne suffit pas à débloquer le compte : il faut aussi redéfinir le mot de passe. Pensez à le mettre à jour dans le Synchronizer côté Shinken.

Les permissions ne semblent pas prises en compte

Get-WinUserLanguageList

C'est exactement le contrôle effectué par le script à son étape 1. Il liste les langues du compte courant.

Après avoir exécuté la commande, cherchez LanguageTag : en-US ou LanguageTag : fr-FR :

Code Block
languagetext
themeEmacs
LanguageTag     : en-US
Autonym         : English (United States)
EnglishName     : English
LocalizedName   : English (United States)
ScriptName      : Latin
InputMethodTips : {0409:0001040C}
Spellchecking   : True
Handwriting     : False
Note

Sur Windows 10, Windows 11 et Windows Server 2025 uniquement, la commande Get-InstalledLanguage donne une vue plus lisible des langues installées sur la machine :

Code Block
languagetext
themeEmacs
Language  Language Packs  Language Features
--------  --------------  -----------------
en-US     LpCab, LXP      BasicTyping, Handwriting, Speech, TextToSpeech, OCR
fr-FR     LpCab, LXP      BasicTyping, Handwriting, Speech, TextToSpeech, OCR

Elle n'existe pas sur Windows Server 2022, 2019, 2016 et 2012 R2 : utilisez Get-WinUserLanguageList sur ces versions.

Seul le code de langue compte (en-US ou fr-FR). Les fonctionnalités listées dans la colonne Language FeaturesBasicTyping, Handwriting, Speech, TextToSpeech, OCR — ne sont pas requises par le pack : elles apparaissent parce qu'une installation par l'interface graphique les ajoute par défaut. L'option -ExcludeFeatures de Install-Language permet d'ailleurs de toutes les omettre.

Info

La langue choisie n'influence pas l'affichage des résultats de supervision. Elle conditionne uniquement le bon fonctionnement de la sonde.


Si aucune des deux langues n'est installée voir Installer une langue.

3. Le service WinRM est actif

WinRM est installé par défaut sur toutes les versions supportées. Vérifiez qu'il tourne :

Code Block
languagetext
themeEmacs
Get-Service WinRM
Code Block
languagetext
themeEmacs
Status   Name    DisplayName
------   ----    -----------
Running  WinRM   Gestion à distance de Windows (Gest...
Note

Windows 10 et Windows 11 uniquement — le service n'est pas en démarrage automatique par défaut. Corrigez-le :

Code Block
languagetext
themeEmacs
Set-Service -Name WinRM -StartupType Automatic

Méthode A — Configuration par script (recommandée)

Le script Configure-Host.ps1 exécute toutes les étapes de la méthode manuelle en une seule commande. Il doit être lancé sur chaque machine à superviser.

À lire avant d'exécuter le script

Point de vigilanceDétail
Modifications systèmeLe script modifie WinRM, WMI, les services et les permissions.
Testez d'abordValidez sur une machine de test ou un serveur non critique avant la production.
Droits administrateurObligatoires. Sans eux, la configuration sera partielle ou en erreur.
Impact sécuritéActiver WinRM ouvre un port d'administration à distance : vérifiez vos politiques internes. Le script rappelle les implications de chaque méthode d'authentification avant de vous laisser choisir.
CompatibilitéL'installation automatique des langues ne fonctionne que sur Windows 10, 11 et Server 2025. Ailleurs, installez la langue manuellement.
ResponsabilitéL'exécution reste sous la responsabilité de l'administrateur.

Détail des opérations

  1. Vérifie qu'une langue compatible (anglais ou français) est installée.
  2. Crée l'utilisateur de supervision et l'ajoute aux groupes nécessaires (Remote Management Users, Performance Monitor Users, Event Log Readers).
  3. Configure la langue de cet utilisateur.
  4. Configure WinRM : authentification Negotiate ou Basic puis l'écouteur HTTP.
  5. Autorise l'utilisateur à exécuter des commandes WinRM.
  6. Donne l'accès WMI/CIM à root\cimv2.
  7. Donne l'accès WMI/CIM à root\standardcimv2.
  8. Donne l'accès en lecture au journal de sécurité (Security Event Log).
  9. Donne l'accès au service W32Time (service NTP de Windows).
  10. Donne l'accès en lecture au statut d'une liste configurable de services.
  11. Redémarre les services winmgmt et WinRM pour appliquer les modifications.


Étape 1 — Récupérer le script

Le script est livré dans le pack, sous le répertoire supervised-host/.

Vous pouvez aussi le télécharger ici : Configure-Host.ps1

Étape 2 — Déployer le script sur la machine

Tip

Pour une seule machine, le plus simple est de télécharger le script directement depuis cette page (lien à l'étape 1), puis de le copier sur la machine à superviser. Les méthodes ci-dessous concernent le déploiement sur plusieurs machines.

La méthode dépend de votre environnement et de vos outils (SSH, FTP, cloud, Docker, Ansible, Terraform...). Nous vous recommandons d'utiliser vos propres solutions de déploiement, adaptées à vos enjeux de sécurité.

Exemple : déploiement via SSH

Si la machine Windows dispose déjà d'un serveur SSH :

Code Block
languagebash
themeEmacs
scp supervised-host/Configure-Host.ps1 Administrateur@<IP_HOST>:C:/Users/Administrateur/

Étape 3 — Autoriser l'exécution du script
Anchor
autoriser_execution_script
autoriser_execution_script

Par défaut, PowerShell bloque l'exécution des scripts non signés ( stratégie d'exécution / Execution Policy ). Vous obtiendrez alors une erreur de ce type :

Panel

Image Added

Solution — lever la restriction pour la session en cours uniquement :

Code Block
languagetext
themeEmacs
Set-ExecutionPolicy Unrestricted -Scope Process
  • -Scope Process : n'affecte que la fenêtre PowerShell ouverte. Aucun impact persistant sur la machine.
  • Unrestricted : autorise l'exécution des scripts non signés.

Relancez ensuite le script dans le même terminal.

Étape 4 — Lancer le script

Info

Toutes les commandes doivent être exécutées dans un PowerShell lancé en tant qu'administrateur.


Le script détecte automatiquement si la machine est jointe à un domaine et adapte son comportement. Choisissez le mode qui vous convient :

ModeCommandeQuand l'utiliser
Par défaut.\Configure-Host.ps1 -DefaultPour tester rapidement le pack
Assistant.\Configure-Host.ps1 -InteractivePour une configuration guidée
Paramétré.\Configure-Host.ps1 -UserName ... -Password ...Pour un déploiement automatisé
Aide.\Configure-Host.ps1 -HelpPour afficher l'aide complète
Version.\Configure-Host.ps1 -VersionPour connaître la version du script
Info

Le mode domaine est détecté automatiquement : inutile de préciser -Domain sur une machine jointe au domaine. Utilisez -Local uniquement pour forcer la création d'un compte local sur une machine pourtant jointe au domaine.

-Domain et -Local sont mutuellement exclusifs : les indiquer ensemble arrête le script.

Info

Identifiants d'annuaire — le script utilise votre session courante si elle a les droits d'écriture dans l'annuaire, et vous les demande en mode -Interactive. Ajoutez -DomainCredential $cred uniquement pour un lancement automatisé (à distance ou par tâche planifiée), où aucune invite ne doit bloquer.

Tip

Mot de passe : le script accepte un SecureString (recommandé) ou une simple chaîne de caractères. Pour préparer un SecureString :

Code Block
languagepowershell
themeEmacs
$secPass = ConvertTo-SecureString "VotreMotDePasse" -AsPlainText -Force

Mode par défaut

Variantes possibles :

CommandeCe qu'elle fait
.\Configure-Host.ps1 -DefaultMode domaine ou workgroup détecté automatiquement selon l'appartenance de la machine.
.\Configure-Host.ps1 -Default -LocalForce la création d'un compte local, même sur une machine jointe à un domaine.
.\Configure-Host.ps1 -Default -DomainForce le mode Active Directory : crée shinken_user et le groupe shinken_monitoring dans l'OU dédiée. Échoue si la machine n'est pas membre d'un domaine.
.\Configure-Host.ps1 -Default -Domain -OUPath "OU=Serveurs,DC=exemple,DC=local"Idem, mais l'OU dédiée est créée sous l'OU indiquée au lieu de la racine du domaine.
.\Configure-Host.ps1 -Default -Domain -DomainCredential $credIdem, avec des identifiants d'annuaire explicites (lancement à distance, tâche planifiée).
Code Block
languagetext
themeEmacs
.\Configure-Host.ps1 -Default

Valeurs appliquées :

ParamètreValeur par défaut
UserNameshinken_user
PasswordCh4nge_Th1s_P4ssw0rd
Negotiatetrue
Basicfalse
AllowUnencryptedfalse
Warning

Changez impérativement le mot de passe par défaut. Le mode par défaut est fait pour tester le pack, pas pour un environnement exposé.

Warning

-Default ignore les paramètres de compte, d'authentification et de services. La commande .\Configure-Host.ps1 -Default -UserName mon_compte crée le compte shinken_user, pas mon_compte, et aucune erreur n'est affichée. Pour choisir vos propres valeurs, utilisez le mode paramétré.

Mode assistant (interactif)

Variantes possibles :

CommandeCe qu'elle fait
.\Configure-Host.ps1 -InteractiveAssistant complet. Le mode domaine ou workgroup est détecté automatiquement.
.\Configure-Host.ps1 -Interactive -LocalAssistant, en forçant la création d'un compte local.
.\Configure-Host.ps1 -Interactive -DomainAssistant, en forçant le mode Active Directory : recherche ou création du compte et du groupe dans l'annuaire.
.\Configure-Host.ps1 -Interactive -Domain -DomainCredential $credIdem, en fournissant les identifiants d'annuaire à l'avance plutôt qu'à l'invite.
Code Block
languagetext
themeEmacs
.\Configure-Host.ps1 -Interactive

Le script vous pose chaque question, une par une. Le mot de passe est saisi de façon masquée.

Exemple sur une machine en Workgroup :

Panel

Image Added

Exemple sur une machine Active Directory :

Panel

Image Added

Mode paramétré (ligne de commande)
Anchor
configuration-personnalise-windows-workgroup
configuration-personnalise-windows-workgroup

Variantes possibles :

CommandeCe qu'elle fait
.\Configure-Host.ps1 -UserName "shinken_user" -Password $secPassCompte local. L'authentification est demandée si elle n'est pas précisée.
.\Configure-Host.ps1 -UserName "shinken_user" -Password $secPass -Negotiate trueCompte local, authentification Negotiate (recommandée).
.\Configure-Host.ps1 -UserName "shinken_user" -Password $secPass -Basic true -AllowUnencrypted trueCompte local, authentification Basic. À réserver aux cas où Negotiate est impossible.
.\Configure-Host.ps1 -ADUserName "shinken_user" -ADGroupName "GRP_SHINKEN" -Password $secPassActive Directory : utilise un compte et un groupe déjà existants.
.\Configure-Host.ps1 -ADUserName "shinken_user" -CreateADUser -ADGroupName "GRP_SHINKEN" -CreateADGroup -Password $secPassActive Directory : crée le compte et le groupe.
.\Configure-Host.ps1 -UserName "shinken_user" -Password $secPass -ServicesName "MonService","AutreService"Ajoute des services supplémentaires à superviser, en plus des trois services critiques.
.\Configure-Host.ps1 -UserName "shinken_user" -Password $secPass -GrantAllAutorise la lecture sur tous les services. Déconseillé en production.

Machine en Workgroup :

Code Block
languagetext
themeEmacs
$secPass = ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force
.\Configure-Host.ps1 -UserName "shinken_user" -Password $secPass -Negotiate true -Basic false -AllowUnencrypted false

Machine Active Directory — créer le compte et le groupe :

Code Block
languagetext
themeEmacs
$secPass = ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force
.\Configure-Host.ps1 -ADUserName "shinken_user" -CreateADUser -ADGroupName "GRP_SHINKEN" -CreateADGroup -Password $secPass

Machine Active Directory — utiliser un compte et un groupe qui existent déjà :

Code Block
languagetext
themeEmacs
.\Configure-Host.ps1 -ADUserName "shinken_user" -ADGroupName "GRP_SHINKEN"

Spécificités Active Directory
Anchor
specificites_active_directory
specificites_active_directory

Info

Cette page couvre la configuration d'UNE machine. Pour équiper un parc entier via stratégie de groupe (GPO), voir la page dédiée au déploiement en domaine.

Sur une machine jointe à un domaine, le script détecte l'Active Directory automatiquement. La procédure est la même qu'en workgroup : mêmes prérequis de langue, même script, même configuration WinRM, mêmes tests.

Une seule chose change : au lieu d'un compte local, le script crée un compte ET un groupe dans l'annuaire. Vous n'avez aucune gestion de droits à faire — le script place le groupe dans les groupes locaux nécessaires, et tout fonctionne directement.


WorkgroupActive Directory
Ce qui est crééUn compte localUn compte et un groupe de domaine
Qui porte les permissionsLe compteLe groupe
Paramètres à fournir-UserName-ADUserName et -ADGroupName
Tip

Pourquoi un groupe ? Les droits sont posés sur le groupe, pas sur le compte. Changer de compte de supervision plus tard ne demande donc aucune reprise sur les machines : il suffit de placer le nouveau compte dans le groupe.

Les objets sont créés dans une OU ( Organisation Unit ) dédiée nommée « Shinken supervision users », placée à la racine du domaine par défaut. Pour la créer ailleurs, utilisez -OUPath (voir la référence des paramètres).

Tip

Sur une machine Active Directory, le redémarrage n'est pas nécessaire. Passez directement à la vérification.

Configurer les services à superviser
Anchor
configuration_service_a_superviser
configuration_service_a_superviser

Le check Service $KEY$ State by WinRM nécessite que l'utilisateur de supervision ait un accès en lecture au statut de chaque service à superviser.

Le strict minimum est déjà accordé par le script : scmanager, W32Time et WinRM, sans lesquels le pack ne fonctionne pas. Vous n'avez jamais à les indiquer.

Le reste est à votre appréciation : n'utilisez les paramètres ci-dessous que pour superviser vos propres services (applications métier, bases de données...).

ParamètreDescriptionExemple
-ServicesName <String[]>Liste des noms de services à autoriser en lecture. Combinable avec -ServiceWhiteListPath..\Configure-Host.ps1 -ServicesName StorSvc,WSLService
-ServiceWhiteListPath <String>Chemin vers un fichier texte listant les services (un par ligne). Combinable avec -ServicesName..\Configure-Host.ps1 -ServiceWhiteListPath .\whitelist.txt
-GrantAllAccorde la lecture sur TOUS les services de la machine. Déconseillé en production — long et verbeux..\Configure-Host.ps1 -GrantAll
-RevokeUnlistedRévoque la lecture pour les services absents de la liste. Utile pour nettoyer une configuration précédente..\Configure-Host.ps1 -ServicesName W32Time -RevokeUnlisted
-SkipServicePermissionsSe limite aux trois services critiques et ignore les 4 paramètres ci-dessus. Déjà actif par défaut : ne l'ajoutez que pour annuler des paramètres de services passés dans la même commande..\Configure-Host.ps1 -Interactive
Note

Malgré son nom, -SkipServicePermissions ne désactive pas la configuration des services : il la limite aux trois services critiques, qui restent accordés dans tous les cas.

Exemples de sortie :

Panel

Image Added

Panel

Image Added

Panel

Image Added

Gérer l'expiration du mot de passe
Anchor
configuration-script-expired-password
configuration-script-expired-password

Si le mot de passe du compte de supervision expire, la supervision s'arrête le jour même. Pour désactiver l'expiration dès la configuration initiale :

Code Block
languagetext
themeEmacs
.\Configure-Host.ps1 -Default -PasswordNeverExpires

Ce commutateur fonctionne avec tous les modes :

Code Block
languagetext
themeEmacs
$secPass = ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force
.\Configure-Host.ps1 -UserName "shinken_user" -Password $secPass -PasswordNeverExpires
Info

En mode -Interactive, la question vous est posée directement ; le commutateur n'est alors pas nécessaire.

Warning

Si le mot de passe a déjà expiré, désactiver l'expiration ne suffit pas à débloquer le compte : il faut réinitialiser le mot de passe, puis désactiver l'expiration.

Étape 5 — Redémarrer

Les nouvelles permissions ne s'appliquent qu'aux nouveaux jetons de connexion. Deux options :

  • Attendre quelques minutes que les anciens jetons expirent, ou
  • Redémarrer la machine (recommandé, plus fiable)
Info

Étape non nécessaire sur les machines Active Directory.

Passez ensuite à la vérification.

Méthode B — Configuration manuelle, étape par étape
Anchor
configuration_etape_par_etape
configuration_etape_par_etape

Info

Cette méthode est l'équivalent exact de ce que fait le script. Suivez-la si vous préférez maîtriser chaque étape, ou si le script ne convient pas à votre environnement. Si vous avez utilisé la Méthode A, passez directement à la vérification.

B.1 — Configuration minimale de WinRM

La commande intégrée winrm quickconfig effectue trois actions d'un coup :

  • Démarre le service WinRM
  • Crée l'écouteur HTTP (port 5985) qui reçoit les requêtes des sondes Shinken
  • Ajoute la règle de pare-feu Windows autorisant l'accès à cet écouteur
Code Block
languagetext
themeEmacs
winrm quickconfig

Exemple de sortie

Code Block
languagetext
themeEmacs
C:\Users\Administrateur> winrm quickconfig

WinRM n'est pas configuré pour la gestion à distance de cet ordinateur.
Les modifications suivantes doivent être effectuées :

Créez un écouteur WinRM sur HTTP://* pour accepter les demandes de la gestion
des services Web sur toutes les adresses IP de cet ordinateur.

Activez l'exception de pare-feu WinRM.
Configurez LocalAccountTokenFilterPolicy pour attribuer des droits
d'administration à distance à des utilisateurs locaux.

Effectuer ces modifications [y/n] ? y

WinRM a été mis à jour pour la gestion à distance.
Warning

Windows 10 / 11 — piège fréquent : le réseau en profil « Public ».

Si votre carte réseau est en profil Public (le défaut), la configuration du pare-feu échoue silencieusement:

Code Block
languagetext
themeEmacs
WSManFault
 Message = L'exception de pare-feu WinRM ne fonctionnera pas car l'un des types
 de connexion réseau de cet ordinateur est défini à Public. Changez le type de
 connexion réseau en Domaine ou Privé, puis recommencez.

Numéro d'erreur : -2144108183 0x80338169

Solution : basculez la connexion en profil Privé ou Domaine, puis relancez winrm quickconfig.



B.2 — Choisir le mode d'authentification

Par défaut, WinRM autorise Negotiate et désactive Basic.

ModeSécuritéCommande
Negotiate (recommandé)Protocole de négociation nécessaire pour communiquer via NTLM.winrm set winrm/config/service/auth '@{Negotiate="true"}'
Basic (déconseillé)Transmet les identifiants en clair.winrm set winrm/config/service/auth '@{Basic="true"}'
Warning

Si vous choisissez Basic, l'authentification n'apporte aucun chiffrement. Il faut donc autoriser explicitement les communications non chiffrées :

Code Block
languagetext
themeEmacs
winrm set winrm/config/service '@{AllowUnencrypted="true"}'

N'utilisez Basic que si aucun mode plus sécurisé n'est disponible sur le système. HTTPS n'est pas supporté par le pack à ce jour.

Plus de détails : Modèles d'hôtes du pack windows-by-WinRM__shinken

B.3 — Créer l'utilisateur de supervision
Anchor
configuration_de_l_utilisateur
configuration_de_l_utilisateur

Par interface graphique
Anchor
creer_utilisateur_par_interface
creer_utilisateur_par_interface

Ouvrez Gestion de l'ordinateur (compmgmt.msc) → Utilisateurs et groupes locauxUtilisateurs → clic droit → Nouvel utilisateur…

Panel

Image Added

Par ligne de commande

Code Block
languagetext
themeEmacs
& {
param(
   [Parameter(Mandatory=$true)]
   [string]$UserName,

   [Parameter(Mandatory=$true)]
   [string]$Password
)
net user $UserName $Password /ADD
}

B.4 — Installer une langue

Note

À faire uniquement si Get-WinUserLanguageList (voir Prérequis) n'a retourné ni en-US ni fr-FR.

Windows 10, Windows 11, Windows Server 2025

Code Block
languagetext
themeEmacs
# Installer l'anglais
Install-Language -Language en-US -ExcludeFeatures

# Installer le français
Install-Language -Language fr-FR -ExcludeFeatures
Note

Cette opération peut prendre 5 à 30 minutes selon votre machine et la charge des serveurs Microsoft.

Windows Server 2022, 2019, 2016 et 2012 R2

Ces versions ne disposent pas de Install-Language. Utilisez Features on Demand (FoD):

Code Block
languagetext
themeEmacs
DISM.exe /Online /add-capability /CapabilityName:Language.Basic~~~en-US~0.0.1.0
Note

Commande non disponible sur Windows Server 2012 R2.

Pour une installation hors-ligne, demandez le pack de langue (.iso ou .cab) à votre support Microsoft, puis déployez-le avec DISM.exe.

Documentation Microsoft — Features on Demand

Par interface graphique
Anchor
configuration_de_la_langue_par_interface
configuration_de_la_langue_par_interface

Procédure pas à pas

Depuis le compte administrateur :

Étape 1 — Ouvrez les Paramètres Windows → catégorie Heure et Langue.

Panel

Image Added

Étape 2 — Allez dans la sous-catégorie Langue, puis cliquez sur Ajouter une langue.

Panel

Image Added

Étape 3 — Choisissez English (United-States) et installez la langue.

Panel

Image Added

Panel

Image Added

Étape 4 — La langue apparaît dans la liste. Cliquez dessus → Options, puis vérifiez que le module linguistique est bien installé.

Panel

Image Added

Panel

Image Added

B.5 — Appliquer la langue au compte de supervision

La langue doit être configurée pour l'utilisateur de supervision, pas seulement pour l'administrateur.

Par interface graphique
Anchor
appliquer_langue_par_interface
appliquer_langue_par_interface

Connectez-vous au compte de supervision, puis répétez les étapes ci-dessus. À l'installation, sélectionnez « Installer le module linguistique et définir comme ma langue d'affichage Windows ».

Vérifiez ensuite que la langue est :

  • En première position de la liste des langues préférées
  • Sélectionnée dans « Langue d'affichage de Windows »
Panel

Image Added

Panel

Image Added

Déconnectez-vous puis reconnectez-vous au compte de supervision pour appliquer le changement.

Par ligne de commande

Cette méthode évite d'avoir à se connecter au compte : elle modifie directement la ruche de registre de l'utilisateur.

Code Block
languagetext
themeEmacs
& {

param(
   [Parameter(Mandatory=$true)]
   [string]$UserName,

   [Parameter(Mandatory=$true)]
   [string]$Password
)

$LangCode = "en-US", "fr-FR"

$Computer = $env:COMPUTERNAME
$SID = (Get-WmiObject Win32_UserAccount -Filter "Name='$UserName' AND Domain='$Computer'").SID
if (-not $SID) { throw "Impossible de récupérer le SID pour $UserName" }

# Récupération du profil
$UserProfile = Get-CimInstance Win32_UserProfile | Where-Object SID -eq $SID

# Le profil peut ne pas exister si l'utilisateur a été créé mais ne s'est jamais connecté.
# Tentative de connexion à l'utilisateur ...
if (-not $UserProfile) {
   $SecurePassword = ConvertTo-SecureString $Password -AsPlainText -Force
   $Credential = New-Object System.Management.Automation.PSCredential ($UserName, $SecurePassword)
   try {
       Start-Process -FilePath "whoami.exe" -Credential $Credential -WindowStyle Hidden -Wait
   } catch {
       Write-Host "Impossible de lancer un logon test pour $UserName ($_)" -ForegroundColor Red
   }

   # Récupération à nouveau du profil
   $UserProfile = Get-CimInstance Win32_UserProfile | Where-Object SID -eq $SID
}

if (-not $UserProfile) { throw "Profil introuvable pour $UserName" }

$HivePath = Join-Path $UserProfile.LocalPath "NTUSER.DAT"
if (-not (Test-Path $HivePath)) { throw "Profil non initialisé (NTUSER.DAT introuvable) : $HivePath" }

$regRelative = "Control Panel\Desktop"
$valueName = "PreferredUILanguages"

$IsLoaded = Test-Path "Registry::HKEY_USERS\$SID"
if ($IsLoaded) {
   $fullPath = "Registry::HKEY_USERS\$SID\$regRelative"
   if (-not (Test-Path $fullPath)) { New-Item -Path $fullPath -Force | Out-Null }
   if (-not (Get-ItemProperty -Path $fullPath -Name $valueName -ErrorAction SilentlyContinue)) {
       New-ItemProperty -Path $fullPath -Name $valueName -Value $LangCode -PropertyType MultiString -Force | Out-Null
   } else {
       Set-ItemProperty -Path $fullPath -Name $valueName -Value $LangCode
   }
} else {
   Write-Host "Utilisateur non connecté. Chargement de la ruche..." -ForegroundColor Gray
   reg load "HKU\TempHive" $HivePath | Out-Null
   try {
       $tempPath = "Registry::HKEY_USERS\TempHive\$regRelative"
       if (-not (Test-Path $tempPath)) { New-Item -Path $tempPath -Force | Out-Null }
       if (-not (Get-ItemProperty -Path $tempPath -Name $valueName -ErrorAction SilentlyContinue)) {
           New-ItemProperty -Path $tempPath -Name $valueName -Value $LangCode -PropertyType MultiString -Force | Out-Null
       } else {
           Set-ItemProperty -Path $tempPath -Name $valueName -Value $LangCode
       }
   } finally {
       reg unload "HKU\TempHive" | Out-Null
       Write-Host "Ruche déchargée." -ForegroundColor Gray
   }
}

Write-Host "Langue préférée utilisateur définie sur $LangCode (REG_MULTI_SZ)." -ForegroundColor Green
}

B.6 — Ajouter l'utilisateur aux groupes
Anchor
ajouter_utilisateur_aux_groupes
ajouter_utilisateur_aux_groupes

L'utilisateur de supervision doit appartenir à trois groupes locaux:

  • Utilisateurs de gestion à distance (Remote Management Users)
  • Utilisateurs de l’Analyseur de performances (Performance Monitor Users)
  • Lecteurs des journaux d’événements (Event Log Readers)

Par interface graphique
Anchor
ajouter_groupes_par_interface
ajouter_groupes_par_interface

Gestion de l'ordinateur (compmgmt.msc) → Utilisateurs et groupes locauxGroupes → clic droit sur le groupe → PropriétésAjouter…

Panel

Image Added

Par ligne de commande

Si l'interface Windows est en français :

Code Block
languagetext
themeEmacs
& {
param([Parameter(Mandatory=$true)][string]$UserName)

net localgroup "Utilisateurs de gestion à distance" $UserName /ADD
net localgroup "Utilisateurs de l’Analyseur de performances" $UserName /ADD
net localgroup "Lecteurs des journaux d’événements" $UserName /ADD
}

Si l'interface Windows est en anglais :

Code Block
languagetext
themeEmacs
& {
param([Parameter(Mandatory=$true)][string]$UserName)

net localgroup "Remote Management Users" $UserName /ADD
net localgroup "Performance Monitor Users" $UserName /ADD
net localgroup "Event Log Readers" $UserName /ADD
}
Warning

Piège du copier-coller — l'apostrophe typographique.

Sur un Windows en français, ce groupe s'écrit avec une apostrophe typographique ( U+2019 ), et non avec l'apostrophe droite ' ( U+0027 ) de la touche 4 du clavier. Retaper la commande à la main produit donc un nom que Windows ne reconnaît pas :

Code Block
languagetext
themeEmacs
L’erreur système 1376 s’est produite.
Le groupe local spécifié n’existe pas.

Trois façons de s'en sortir :

  • Copiez-collez la commande ci-dessus : elle contient désormais la bonne apostrophe ;
  • ou saisissez l'apostrophe avec ALT + 0146 au pavé numérique ( elle est différente de celle de la touche 4 ) ;
  • ou utilisez le nom anglais du groupe, qui ne contient aucune apostrophe : net localgroup "Performance Monitor Users" $UserName /ADD.

Pour lire le nom exact tel que Windows le stocke :

Code Block
languagepowershell
themeEmacs
(Get-LocalGroup | Where-Object Name -like "*Analyseur*").Name
Panel

Image Added

B.7 — Attribuer les permissions

Quatre jeux de permissions sont nécessaires.

a) Permissions WinRM

L'utilisateur doit pouvoir lire et exécuter les commandes WinRM.

Par interface graphique :

Code Block
languagetext
themeEmacs
winrm configSDDL default

Une fenêtre s'ouvre. Ajoutez l'utilisateur via Ajouter..., puis cochez dans le tableau des droits (après avoir sélectionné l'utilisateur) :

  • Lecture (Get, Enumerate, Subscribe)
  • Exécution (Invoke)
Panel

Image Added

Par ligne de commande

Code Block
languagetext
themeEmacs
& {

param(
   [Parameter(Mandatory = $true)][string]$UserName
)

$GENERIC_READ = 0x80000000
$GENERIC_EXECUTE = 0x20000000

$user_sid = (New-Object -TypeName System.Security.Principal.NTAccount -ArgumentList $UserName).Translate([System.Security.Principal.SecurityIdentifier])

# Récupère le SDDL existant de l'écouteur WinRM
$sddl = (Get-Item -Path WSMan:\localhost\Service\RootSDDL).Value

# Convertit la chaîne SDDL en objet SecurityDescriptor
$sd = New-Object -TypeName System.Security.AccessControl.CommonSecurityDescriptor -ArgumentList $false, $false, $sddl

# Applique une nouvelle DACL à l'objet SecurityDescriptor
$sd.DiscretionaryAcl.AddAccess(
   [System.Security.AccessControl.AccessControlType]::Allow,
   $user_sid,
   ($GENERIC_READ -bor $GENERIC_EXECUTE),
   [System.Security.AccessControl.InheritanceFlags]::None,
   [System.Security.AccessControl.PropagationFlags]::None
)

# Récupère la chaîne SDDL depuis l'objet modifié
$new_sddl = $sd.GetSddlForm([System.Security.AccessControl.AccessControlSections]::All)

# Applique le nouveau SDDL à l'écouteur WinRM
Set-Item -Path WSMan:\localhost\Service\RootSDDL -Value $new_sddl -Force
Write-Host "Permissions de 'Lecture' et 'Exécution' WinRM ajoutées pour l'utilisateur $UserName" -ForegroundColor Green
}

b) Permissions sur les objets CIM (WMI)

La sonde interroge les informations système via les objets CIM. Deux espaces de noms sont concernés : root\cimv2 et root\standardcimv2.

Info

Cette section s'applique aussi aux machines en Active Directory. Le script Configure-Host.ps1 pose ces permissions dans tous les cas ( étapes 6 et 7 de son déroulé ) : en domaine, il les accorde au groupe de supervision au lieu du compte. Si vous suivez la méthode manuelle sur une machine du domaine, ne sautez donc pas cette étape.

Par interface graphique :

Étape 1 — Lancez la console de contrôle WMI :

Code Block
languagetext
themeEmacs
wmimgmt.msc

Étape 2 — Clic droit sur Contrôle WMI (local)Propriétés.

Panel

Image Added

Étape 3 — Onglet Sécurité → dans l'arborescence, sélectionnez Root > CIMV2 → bouton Sécurité en bas à droite.

Panel

Image Added

Panel

Image Added

Étape 4 — Ajoutez l'utilisateur, puis cochez Activer le compte et Appel à distance autorisé.

Panel

Image Added

Étape 5Répétez l'opération pour StandardCimV2.

Par ligne de commande (traite les deux espaces de noms d'un coup)

Code Block
languagetext
themeEmacs
&{

Param (
   [parameter(Mandatory=$true)][string] $username,
   [bool] $allowInherit = $false,
   [bool] $deny = $false,
   [string] $computerName = ".",
   [System.Management.Automation.PSCredential] $credential = $null
)

$namespaces = @("root\cimv2", "root\standardcimv2")
$permissions = @("Enable", "RemoteAccess")

foreach ($namespace in $namespaces) {
   Write-Host "Configuration des permissions pour le namespace: $namespace"
   $ErrorActionPreference = "Stop"

   Function Get-AccessMaskFromPermission($permissions) {
       $WBEM_ENABLE            = 1
       $WBEM_METHOD_EXECUTE    = 2
       $WBEM_FULL_WRITE_REP    = 4
       $WBEM_PARTIAL_WRITE_REP = 8
       $WBEM_WRITE_PROVIDER    = 0x10
       $WBEM_REMOTE_ACCESS     = 0x20
       $READ_CONTROL           = 0x20000
       $WRITE_DAC              = 0x40000

       $WBEM_RIGHTS_FLAGS = $WBEM_ENABLE,$WBEM_METHOD_EXECUTE,$WBEM_FULL_WRITE_REP,`
           $WBEM_PARTIAL_WRITE_REP,$WBEM_WRITE_PROVIDER,$WBEM_REMOTE_ACCESS,`
           $READ_CONTROL,$WRITE_DAC

       $WBEM_RIGHTS_STRINGS = "Enable","MethodExecute","FullWrite","PartialWrite",`
           "ProviderWrite","RemoteAccess","ReadSecurity","WriteSecurity"

       $permissionTable = @{}
       for ($i = 0; $i -lt $WBEM_RIGHTS_FLAGS.Length; $i++) {
           $permissionTable.Add($WBEM_RIGHTS_STRINGS[$i].ToLower(), $WBEM_RIGHTS_FLAGS[$i])
       }

       $accessMask = 0
       foreach ($permission in $permissions) {
           if (-not $permissionTable.ContainsKey($permission.ToLower())) {
               throw "Unknown permission: $permission`nValid permissions: $($permissionTable.Keys)"
           }
           $accessMask += $permissionTable[$permission.ToLower()]
       }
       $accessMask
   }

   if ($PSBoundParameters.ContainsKey("Credential")) {
       $remoteparams = @{ComputerName=$computerName;Credential=$credential}
   } else {
       $remoteparams = @{}
   }

   $invokeparams = @{Namespace=$namespace;Path="__systemsecurity=@"} + $remoteParams
   $output = Invoke-WmiMethod @invokeparams -Name GetSecurityDescriptor
   if ($output.ReturnValue -ne 0) {
       throw "GetSecurityDescriptor failed: $($output.ReturnValue)"
   }

   $acl = $output.Descriptor
   $OBJECT_INHERIT_ACE_FLAG = 0x1
   $CONTAINER_INHERIT_ACE_FLAG = 0x2
   $computerName = (Get-WmiObject @remoteparams Win32_ComputerSystem).Name

   if ($username.Contains('\')) {
       $domainaccount = $username.Split('\')
       $domain = $domainaccount[0]
       if (($domain -eq ".") -or ($domain -eq "BUILTIN")) {
           $domain = $computerName
       }
       $accountname = $domainaccount[1]
   } elseif ($username.Contains('@')) {
       $domainaccount = $username.Split('@')
       $domain = $domainaccount[1].Split('.')[0]
       $accountname = $domainaccount[0]
   } else {
       $domain = $computerName
       $accountname = $username
   }

   $getparams = @{Class="Win32_Account";Filter="Domain='$domain' and Name='$accountname'"} + $remoteParams
   $win32account = Get-WmiObject @getparams
   if ($win32account -eq $null) {
       throw "Account was not found: $username"
   }

   $accessMask = Get-AccessMaskFromPermission($permissions)
   $ace = (New-Object System.Management.ManagementClass("win32_Ace")).CreateInstance()
   $ace.AccessMask = $accessMask

   if ($allowInherit) {
       $ace.AceFlags = $OBJECT_INHERIT_ACE_FLAG + $CONTAINER_INHERIT_ACE_FLAG
   } else {
       $ace.AceFlags = 0
   }

   $trustee = (New-Object System.Management.ManagementClass("win32_Trustee")).CreateInstance()
   $trustee.SidString = $win32account.Sid
   $ace.Trustee = $trustee

   $ACCESS_ALLOWED_ACE_TYPE = 0x0
   $ACCESS_DENIED_ACE_TYPE = 0x1

   if ($deny) {
       $ace.AceType = $ACCESS_DENIED_ACE_TYPE
   } else {
       $ace.AceType = $ACCESS_ALLOWED_ACE_TYPE
   }
   $acl.DACL += $ace.psobject.immediateBaseObject

   $setparams = @{Name="SetSecurityDescriptor";ArgumentList=$acl.psobject.immediateBaseObject} + $invokeParams
   $output = Invoke-WmiMethod @setparams
   if ($output.ReturnValue -ne 0) {
       throw "SetSecurityDescriptor failed: $($output.ReturnValue)"
   }

   Write-Host "Permissions configurées avec succès pour $username sur $namespace"
}

Write-Host "Configuration terminée pour tous les namespaces"

}

c) Accès au service W32Time

Nécessaire pour récupérer les informations de temps (service NTP de Windows).

Code Block
languagetext
themeEmacs
&{

Param (
   [parameter(Mandatory=$true)][string] $UserName
)

$sid = (New-Object System.Security.Principal.NTAccount($UserName)).Translate([System.Security.Principal.SecurityIdentifier]).Value
$currentSddl = & sc.exe sdshow w32time
# Ajoute les droits suivants à l'utilisateur
#  CC – SERVICE_QUERY_CONFIG
#  LC – SERVICE_QUERY_STATUS
#  LO – SERVICE_INTERROGATE
$newAce = "(A;;CCLCLO;;;${sid})"
$newSddl = $currentSddl + $newAce

sc.exe sdset w32time "$newSddl"

Restart-Service w32time

}

d) Accès au journal de sécurité

Nécessaire pour récupérer les tentatives de connexion échouées.

Code Block
languagetext
themeEmacs
&{

Param (
   [parameter(Mandatory=$true)][string] $UserName
)
   try {
       $Path = "HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\Security"
       $acl = Get-Acl $Path
       $rule = New-Object System.Security.AccessControl.RegistryAccessRule(
           $UserName,
           "ReadKey",
           "Allow"
       )
       $acl.AddAccessRule($rule)
       Set-Acl $Path $acl
       Write-Host " Droits Registre appliqués." -ForegroundColor Green
   } catch {
       Write-Host " Erreur permissions EventLog Security: $_" -ForegroundColor Red
       throw
   }
}

B.8 — Appliquer les permissions
Anchor
appliquer_les_permissions
appliquer_les_permissions

Les nouvelles permissions ne s'appliquent qu'aux nouveaux jetons de connexion. Deux options :

  • Attendre quelques minutes que les anciens jetons expirent, ou
  • Redémarrer la machine (recommandé)

Vérifier que tout fonctionne
Anchor
tester_firewall_winrm
tester_firewall_winrm

Info

Ces deux tests s'effectuent sur la machine Windows à superviser, dans un PowerShell administrateur.

Test 1 — La règle de pare-feu

Objectif : vérifier que le pare-feu autorise bien les connexions WinRM (port 5985).

Code Block
languagetext
themeEmacs
Get-NetFirewallRule -Name "WINRM-HTTP-In-TCP"
Panel

Image Added

Vérifiez que :

  • Enabled vaut True
  • Action vaut Allow

Si ce n'est pas le cas, activez la règle :Les droits viennent d'être accordés au compte de supervision, mais les checks échouent toujours avec une erreur d'accès refusé. Les jetons de connexion déjà ouverts conservent les anciennes autorisations tant que les services ne sont pas relancés.

Code Block
languagetext
themeEmacs
UNKNOWN – Response fault error: Code: s:Sender, Subcode: w:AccessDenied

Mots-clés : AccessDenied · Permission denied · accès refusé · winmgmt · WinRM · SDDL

Info

Survient à l'étape : B.8 — Appliquer les permissions — voir B.8 — Appliquer les permissions sur la page de configuration.

Section

Résolution :

Redémarrez les deux services concernés :

Code Block
languagepowershell
themeEmacs
Restart-Service winmgmt -Force
Restart-Service WinRM -Force
Info

Si l'erreur persiste, patientez quelques minutes ou redémarrez la machine : certains jetons ne sont libérés qu'à l'expiration de leur cache. En Active Directory, laissez également le temps à la réplication de se propager entre contrôleurs de domaine.

Active Directory

Le conteneur cible « CN=Users » est inaccessible – création d'OU impossible

Le script s'arrête au moment de créer l'unité d'organisation dédiée « Shinken supervision users ». Le paramètre -OUPath pointe vers CN=Users, qui est un conteneur et non une unité d'organisation : Active Directory interdit d'y créer une OU.

Code Block
languagetext
themeEmacs
Le conteneur cible 'CN=Users,DC=exemple,DC=local' est inaccessible

Mots-clés : CN=Users · -OUPath · conteneur cible inaccessible · OU · unité d'organisation · Shinken supervision users

Info

Survient à l'étape : Étape 4 — Spécificités Active Directory — voir Spécificités Active Directory sur la page de configuration.

Panel

Image Removed

Section

Résolution :

Visez une véritable unité d'organisation :

Code Block
languagepowershell
themeEmacs
.\Configure-Host.ps1 -Default -Domain -OUPath "OU=Utilisateurs,DC=exemple,DC=local"
Info

Sans -OUPath, l'OU dédiée est créée à la racine du domaine : c'est le comportement par défaut, et il fonctionne dans la majorité des cas.

Aucun identifiant de domaine utilisable – échec en mode non interactif

Lancé à distance ou par tâche planifiée sur une machine du domaine, le script s'arrête avant toute modification. Il ne dispose pas d'identifiants pour écrire dans l'annuaire et ne peut pas les demander : une invite bloquerait l'exécution automatisée.

Code Block
languagetext
themeEmacs
Aucun identifiant de domaine utilisable.
Fournissez-en un de l'une de ces façons :
  - paramètre -DomainCredential (recommandé pour un déclenchement distant) ;
  - exécution sous un compte de domaine habilité (tâche planifiée) ;
  - mode -Interactive, qui demandera les identifiants.

Mots-clés : -DomainCredential · identifiant de domaine · annuaire · Invoke-Command · tâche planifiée · non interactif

Info

Survient à l'étape : Étape 4 — Spécificités Active Directory — voir Spécificités Active Directory sur la page de configuration.

Section

Résolution :

Fournissez explicitement des identifiants habilités à écrire dans l'annuaire :

Code Block
languagepowershell
themeEmacs
$cred = Get-Credential
.\Configure-Host.ps1 -Default -Domain -DomainCredential $cred
Info

En mode -Interactive, ou lorsque la session courante dispose déjà des droits d'écriture dans l'annuaire, -DomainCredential est inutile.

Après la configuration

Le check Service $KEY$ State by WinRM remonte une erreur

Les autres checks de la machine fonctionnent, mais la supervision d'un service précis échoue. Le compte de supervision n'a pas l'accès en lecture au service demandé : seuls scmanager, W32Time et WinRM sont autorisés par défaut.

Code Block
languagetext
themeEmacs
UNKNOWN – Command execution Failed. Permission denied.

Mots-clés : Service $KEY$ State · Permission denied · -ServicesName · sc.exe sdshow · scmanager

Info

Survient à l'étape : Étape 4 — Configurer les services à superviser — voir Configurer les services à superviser sur la page de configuration.

Panel

Image Removed

Section

Résolution :

Relancez le script en indiquant le ou les services à autoriser :

Code Block
languagepowershell
themeEmacs
.\Configure-Host.ps1 -UserName "shinken_user" -Password $secPass -ServicesName "MonService","AutreService"

Pour vérifier les droits posés sur un service :

Code Block
languagepowershell
themeEmacs
sc.exe sdshow MonService
Info

Le nom à fournir est le nom court du service (colonne Name), pas son nom d'affichage. Pour le retrouver :

Code Block
languagepowershell
themeEmacs
Get-Service | Where-Object DisplayName -like "*MonApplication*"

Votre essai Premium est terminéVotre essai Premium est terminé

...

Enable-NetFirewallRule -Name "WINRM-HTTP-In-TCP"

Test 2 — La connexion WinRM

Objectif : réaliser une connexion WinRM en local avec le compte de supervision.

Utilisez la commande correspondant au mode d'authentification que vous avez configuré :

Code Block
languagetext
themeEmacs
# Si vous avez configuré Negotiate (recommandé)
Test-WSMan localhost -Credential (Get-Credential) -Authentication Negotiate
Code Block
languagetext
themeEmacs
# Si vous avez configuré Basic
Test-WSMan localhost -Credential (Get-Credential) -Authentication Basic

Saisissez le nom d'utilisateur et le mot de passe du compte de supervision:

Panel

Image Added

Résultat attendu :

Panel

Image Added

Ce retour confirme que le service WinRM et le compte de supervision sont opérationnels sur la machine.

Dépannage

Les erreurs rencontrées pendant la configuration — refus d'exécution du script, service WinRM arrêté, mot de passe expiré, création d'OU impossible... — sont détaillées avec leur résolution sur la page Erreurs de configuration d'un Windows supervisé pour le pack windows-by-WinRM__shinken.

Info

Pour les erreurs remontées par les checks une fois la supervision en place, consultez la page Erreurs du pack windows-by-WinRM__shinken.

Référence complète des paramètres du script

Modes d'exécution

ParamètreTypeDescription
-DefaultswitchConfiguration automatique avec les valeurs par défaut
-InteractiveswitchAssistant pas-à-pas avec explications contextuelles
-HelpswitchAffiche l'aide complète
-VersionswitchAffiche la version du script

Compte et authentification

ParamètreTypeDescription
-UserNamestringNom du compte local à créer (ex. shinken_user)
-PasswordSecureString ou stringMot de passe du compte
-Negotiatetrue / falseActive l'authentification Negotiate — recommandé
-Basictrue / falseActive l'authentification Basic — nécessite AllowUnencrypted=true
-AllowUnencryptedtrue / falseAutorise les connexions non chiffrées — obligatoire avec Basic
-PasswordNeverExpiresswitchLe mot de passe du compte n'expire jamais

Mode de fonctionnement

ParamètreTypeDescription
-DomainswitchForce le mode Active Directory (échoue si la machine n'est pas membre d'un domaine)
-LocalswitchForce le mode workgroup (compte local) même sur une machine du domaine
Info

Sans -Domain ni -Local, le mode est détecté automatiquement.

Active Directory

ParamètreTypeDescription
-ADUserNamestringsAMAccountName du compte de supervision AD
-ADGroupNamestringGroupe global de sécurité AD portant les permissions
-CreateADUserswitchCrée le compte AD au lieu d'exiger qu'il existe déjà
-CreateADGroupswitchCrée le groupe AD au lieu d'exiger qu'il existe déjà
-DomainCredentialPSCredentialIdentifiants d'écriture dans l'annuaire. Facultatif : utile surtout en lancement automatisé
-OUPathstringOU parent de création (DN). Par défaut : racine du domaine. Ne peut pas pointer vers CN=Users

Services supervisés

ParamètreTypeDescription
-ServicesNamestring[]Liste des services à autoriser en lecture
-ServiceWhiteListPathstringFichier texte listant les services (un par ligne)
-GrantAllswitchAutorise tous les services — déconseillé en production
-RevokeUnlistedswitchRévoque les droits sur les services non listés
-SkipServicePermissionsswitchLimite les droits aux 3 services critiques (scmanager, W32Time, WinRM). Comportement par défaut

Et après ?

La configuration de la machine Windows est terminée : elle est prête à être supervisée.

Étape suivante : choisir, accrocher et paramétrer les modèles d'hôtes fournis dans le pack.

Modèles d'hôtes du pack windows-by-WinRM__shinken

Pages liées