SCCM / MECM (ConfigMgr)¶
Ce que vous allez apprendre
- Les cles de registre du client SCCM (CCM) et leur role dans la gestion du poste
- L'assignation de site et la configuration des Management Points
- Les parametres de cache client (taille, emplacement) modifiables dans le registre
- Les regles de detection de deploiement basees sur le registre
- L'extension de l'inventaire materiel et logiciel via le registre
- La configuration des Distribution Points dans le registre
- Le depannage de la sante du client (ccmrepair, ccmeval)
- Un scenario reel de reparation d'un client qui ne remonte plus au Management Point
Arborescence du registre SCCM Client¶
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#bd93f9', 'primaryTextColor': '#f8f8f2', 'primaryBorderColor': '#bd93f9', 'lineColor': '#ff79c6', 'secondaryColor': '#44475a', 'tertiaryColor': '#282a36', 'edgeLabelBackground': '#282a36', 'clusterBkg': '#282a36', 'clusterBorder': '#6272a4', 'titleColor': '#f8f8f2'}}}%%
flowchart TB
A["Client CCM\n(CcmExec.exe)"]:::pink
B["Management Point\n(MP)"]:::cyan
C["Distribution Point\n(DP)"]:::green
D["Serveur de site\nSCCM"]:::purple
E["Base SQL\nServer"]:::orange
A <-->|"Politique &\ninventaire"| B
A <-->|"Téléchargement\nde contenu"| C
B <--> D
C <--> D
D <--> E
classDef pink fill:#ff79c6,stroke:#ff79c6,color:#282a36
classDef green fill:#50fa7b,stroke:#50fa7b,color:#282a36
classDef cyan fill:#8be9fd,stroke:#8be9fd,color:#282a36
classDef orange fill:#ffb86c,stroke:#ffb86c,color:#282a36
classDef purple fill:#bd93f9,stroke:#bd93f9,color:#282a36 Le client Configuration Manager (anciennement SCCM, aujourd'hui MECM) utilise une arborescence etendue sous HKLM\SOFTWARE\Microsoft\CCM. Commencons par explorer sa structure.
# List the main subkeys of the CCM hive
Get-ChildItem "HKLM:\SOFTWARE\Microsoft\CCM" |
Select-Object PSChildName | Sort-Object PSChildName
PSChildName
-----------
CcmExec
ClientIdentificationInformation
ClientServicingData
ContentTransferManager
Logging
NetworkConfig
Policy
Security
SoftwareDistribution
StatusAgent
Cles principales du client CCM¶
| Cle de registre | Role |
|---|---|
HKLM\SOFTWARE\Microsoft\CCM | Racine de la configuration client |
HKLM\SOFTWARE\Microsoft\CCM\CcmExec | Parametres du processus principal CcmExec.exe |
HKLM\SOFTWARE\Microsoft\CCM\Security | Certificats et identite du client |
HKLM\SOFTWARE\Microsoft\CCM\Policy | Politiques recues du Management Point |
HKLM\SOFTWARE\Microsoft\CCM\SoftwareDistribution | Deploiement d'applications et packages |
HKLM\SOFTWARE\Microsoft\CCM\Logging | Configuration des logs client |
HKLM\SOFTWARE\Microsoft\SMS\Mobile Client | Parametres d'installation du client |
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#bd93f9', 'primaryTextColor': '#f8f8f2', 'primaryBorderColor': '#bd93f9', 'lineColor': '#ff79c6', 'secondaryColor': '#44475a', 'tertiaryColor': '#282a36'}}}%%
sequenceDiagram
participant C as Client CCM
participant MP as Management Point
participant DP as Distribution Point
participant SS as Serveur de site
C->>MP: Demande de politique machine
MP->>SS: Récupération politique
SS-->>MP: Politique (déploiements, mises à jour)
MP-->>C: Politique reçue
C->>DP: Téléchargement contenu (package/app)
DP-->>C: Contenu transféré dans le cache
C->>C: Installation locale
C->>MP: Rapport d'état (inventaire + conformité) Informations d'identite du client¶
# Read client identity information
$idPath = "HKLM:\SOFTWARE\Microsoft\CCM\ClientIdentificationInformation"
Get-ItemProperty -Path $idPath | Select-Object ClientId, PreviousClientId, ReservedUUID
ClientId : GUID:{A1B2C3D4-E5F6-7890-A1B2-C3D4E5F6A1B2}
PreviousClientId :
ReservedUUID : 0
En resume
- La racine du client SCCM est
HKLM\SOFTWARE\Microsoft\CCM CcmExec,Security,Policy,SoftwareDistributionsont les sous-cles les plus importantesClientIdentificationInformation\ClientIdcontient l'identifiant unique du client dans la hierarchie SCCM
Assignation de site et Management Point¶
L'assignation de site determine a quel serveur SCCM le client se rattache. Le Management Point (MP) est le point de contact principal pour la communication client-serveur.
Lire l'assignation de site actuelle¶
# Read current site assignment
$smsPath = "HKLM:\SOFTWARE\Microsoft\SMS\Mobile Client"
$ccmPath = "HKLM:\SOFTWARE\Microsoft\CCM"
$siteCode = (Get-ItemProperty -Path $smsPath -Name "AssignedSiteCode" -ErrorAction SilentlyContinue).AssignedSiteCode
$mp = (Get-ItemProperty -Path $ccmPath -Name "SMSSLP" -ErrorAction SilentlyContinue).SMSSLP
Write-Output "Site assigne : $siteCode"
Write-Output "Management Point : $mp"
Valeurs d'assignation de site¶
| Valeur | Cle | Type | Description |
|---|---|---|---|
AssignedSiteCode | SMS\Mobile Client | REG_SZ | Code du site SCCM assigne (ex: PS1) |
GPRequestedSiteAssignmentCode | SMS\Mobile Client | REG_SZ | Code de site demande par GPO |
SMSSLP | CCM | REG_SZ | FQDN du Server Locator Point (ancien) |
DNSSUFFIX | CCM | REG_SZ | Suffixe DNS pour la decouverte du MP |
HttpPort | CCM | REG_DWORD | Port HTTP du Management Point (defaut : 80) |
HttpsPort | CCM | REG_DWORD | Port HTTPS du Management Point (defaut : 443) |
Configuration du Management Point via le registre¶
# View Management Point configuration
$mpPath = "HKLM:\SOFTWARE\Microsoft\CCM"
$props = Get-ItemProperty -Path $mpPath
Write-Output "MP actuel : $($props.SMSSLP)"
Write-Output "DNS Suffix : $($props.DNSSUFFIX)"
Write-Output "Port HTTP : $($props.HttpPort)"
Write-Output "Port HTTPS : $($props.HttpsPort)"
MP actuel : sccm-mp01.entreprise.com
DNS Suffix : entreprise.com
Port HTTP : 80
Port HTTPS : 443
Forcer la reassignation de site¶
En cas de migration entre sites ou de mauvaise assignation :
# Force site reassignment
$mobilePath = "HKLM:\SOFTWARE\Microsoft\SMS\Mobile Client"
Set-ItemProperty -Path $mobilePath -Name "AssignedSiteCode" -Value "PS2" -Type String
# Trigger a machine policy refresh to apply the change
Invoke-WmiMethod -Namespace "root\ccm" -Class "SMS_Client" `
-Name "TriggerSchedule" -ArgumentList "{00000000-0000-0000-0000-000000000021}"
Write-Output "Reassignation au site PS2 declenchee."
En resume
AssignedSiteCodedansSMS\Mobile Clientcontrole le site SCCM du client- Le Management Point est identifie par
SMSSLPdans la cleCCM - Pour forcer une reassignation, modifier
AssignedSiteCodepuis declencher un cycle de politique machine
Cache client : taille et emplacement¶
Le cache du client SCCM stocke les packages et applications telecharges avant installation. Sa taille et son emplacement sont geres dans le registre.
Lire la configuration actuelle du cache¶
# Read cache settings
$cachePath = "HKLM:\SOFTWARE\Microsoft\CCM\SoftMgmtAgent"
$props = Get-ItemProperty -Path $cachePath -ErrorAction SilentlyContinue
Write-Output "Taille du cache (Mo) : $($props.CacheSize)"
Write-Output "Emplacement du cache : $($props.CacheLocation)"
Write-Output "Limite taille : $($props.CacheSizeOverride)"
Taille du cache (Mo) : 20480
Emplacement du cache : C:\Windows\ccmcache
Limite taille :
Parametres de cache¶
| Valeur | Cle | Type | Description |
|---|---|---|---|
CacheSize | CCM\SoftMgmtAgent | REG_DWORD | Taille maximale du cache en Mo |
CacheLocation | CCM\SoftMgmtAgent | REG_SZ | Chemin du repertoire de cache |
CacheEnabled | CCM\SoftMgmtAgent | REG_DWORD | 1 = cache actif |
Modifier la taille du cache¶
# Increase cache size to 30 GB
$cachePath = "HKLM:\SOFTWARE\Microsoft\CCM\SoftMgmtAgent"
Set-ItemProperty -Path $cachePath -Name "CacheSize" -Value 30720 -Type DWord
# Verify the change
$newSize = (Get-ItemProperty -Path $cachePath -Name "CacheSize").CacheSize
Write-Output "Nouvelle taille du cache : $($newSize) Mo ($([math]::Round($newSize/1024, 1)) Go)"
Modifier l'emplacement du cache¶
Pour deplacer le cache sur un autre volume (par exemple un disque dedie) :
# Change cache location to D: drive
$cachePath = "HKLM:\SOFTWARE\Microsoft\CCM\SoftMgmtAgent"
# Stop the SCCM client service
Stop-Service CcmExec -Force
# Update registry
Set-ItemProperty -Path $cachePath -Name "CacheLocation" -Value "D:\ccmcache" -Type String
# Create the new directory
New-Item -Path "D:\ccmcache" -ItemType Directory -Force | Out-Null
# Restart the service
Start-Service CcmExec
Write-Output "Cache deplace vers D:\ccmcache"
Methode WMI recommandee¶
La methode la plus fiable pour modifier le cache passe par WMI, qui met a jour le registre de maniere coherente :
# Recommended: Use WMI to resize cache
$cache = Get-WmiObject -Namespace "root\ccm\SoftMgmtAgent" -Class "CacheConfig"
$cache.Size = 30720
$cache.Put()
# Verify via registry
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\CCM\SoftMgmtAgent" -Name "CacheSize").CacheSize
En resume
CacheSizeetCacheLocationdansCCM\SoftMgmtAgentcontrolent le cache- L'emplacement par defaut est
C:\Windows\ccmcacheavec une taille de 5120 Mo - La methode WMI est preferee car elle assure la coherence entre registre et agent
Regles de detection de deploiement¶
Les deploiements d'applications SCCM utilisent des regles de detection pour verifier si une application est deja installee. Les regles basees sur le registre sont les plus courantes.
Principe des regles de detection¶
Une regle de detection par registre verifie l'existence d'une cle, d'une valeur ou la correspondance d'une donnee. Si la condition est remplie, l'application est consideree comme installee.
Exemples de regles de detection courantes¶
# Example 1: Detect if 7-Zip is installed (registry key exists)
$path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip"
$detected = Test-Path $path
Write-Output "7-Zip detecte : $detected"
# Example 2: Detect by version comparison (value >= expected)
$path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip"
$version = (Get-ItemProperty -Path $path -Name "DisplayVersion" -ErrorAction SilentlyContinue).DisplayVersion
$minVersion = "23.01"
$detected = [version]$version -ge [version]$minVersion
Write-Output "Version installee : $version | Minimum requis : $minVersion | Detecte : $detected"
Types de regles de detection¶
| Type | Configuration SCCM | Logique |
|---|---|---|
| Cle existe | Hive + Path | La cle de registre existe |
| Valeur existe | Hive + Path + ValueName | La valeur nommee existe |
| Egalite | Hive + Path + ValueName + Data | La donnee correspond exactement |
| Version >= | Hive + Path + ValueName + Version | La version est superieure ou egale |
Registre 32 bits vs 64 bits¶
Sur les systemes 64 bits, les applications 32 bits ecrivent dans un emplacement redirige. Il faut en tenir compte dans les regles de detection.
# 64-bit application: standard path
$path64 = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{APP-GUID}"
# 32-bit application on 64-bit OS: redirected path
$path32 = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{APP-GUID}"
# In SCCM detection rule: check the "This registry key is associated with a 32-bit application
# on 64-bit systems" checkbox to search in WOW6432Node
Write-Output "64-bit path exists : $(Test-Path $path64)"
Write-Output "32-bit path exists : $(Test-Path $path32)"
Script de detection avance¶
Pour les cas complexes, un script PowerShell de detection peut interroger plusieurs cles :
# Advanced detection script for SCCM deployment type
# Returns output to STDOUT if detected, nothing otherwise
$appKey = "HKLM:\SOFTWARE\VendorApp\Config"
$minVer = "4.2.0"
if (Test-Path $appKey) {
$ver = (Get-ItemProperty $appKey -Name "Version" -ErrorAction SilentlyContinue).Version
if ($ver -and [version]$ver -ge [version]$minVer) {
Write-Output "Detected: $ver"
}
}
# If nothing is output, SCCM considers the app NOT detected
En resume
- Les regles de detection par registre verifient l'existence d'une cle, d'une valeur ou une correspondance de donnee
- Attention au WOW6432Node pour les applications 32 bits sur les OS 64 bits
- Les scripts de detection renvoient du texte en sortie si l'application est detectee, rien sinon
Extension de l'inventaire materiel et logiciel¶
SCCM peut collecter des valeurs de registre personnalisees dans son inventaire materiel grace au fichier MOF ou via les extensions d'inventaire.
Principe de l'inventaire etendu¶
L'agent SCCM lit les classes WMI pour l'inventaire. Pour ajouter une valeur de registre, il faut creer un pont entre le registre et WMI via le provider RegProv.
Ajouter une cle personnalisee a l'inventaire¶
La methode moderne utilise le fichier configuration.mof sur le serveur de site :
# Step 1: Verify that the registry key to inventory exists
$customKey = "HKLM:\SOFTWARE\CustomApp\Settings"
Get-ItemProperty -Path $customKey -ErrorAction SilentlyContinue |
Select-Object Version, LicenseType, InstallDate
Version LicenseType InstallDate
------- ----------- -----------
3.5.2 Enterprise 2025-11-15
Verification de l'inventaire client¶
Cote client, les parametres d'inventaire sont caches dans le registre :
# Check hardware inventory schedule and last run
$invPath = "HKLM:\SOFTWARE\Microsoft\CCM\Scheduler"
$hwInv = Get-ChildItem $invPath -Recurse -ErrorAction SilentlyContinue |
Where-Object { $_.PSChildName -match "HardwareInventory" }
if ($hwInv) {
Get-ItemProperty $hwInv.PSPath | Select-Object ScheduledMessageID, TriggerState
}
ScheduledMessageID TriggerState
------------------ ------------
{00000000-0000-0000-0000-000000000001} Active
Inventaire logiciel via le registre¶
L'inventaire logiciel SCCM scanne les cles Uninstall par defaut :
# Keys scanned by SCCM software inventory
$paths = @(
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",
"HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall",
"HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
)
foreach ($p in $paths) {
$count = (Get-ChildItem $p -ErrorAction SilentlyContinue).Count
Write-Output "$p : $count applications"
}
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall : 42
HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall : 18
HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall : 5
En resume
- L'inventaire materiel SCCM peut etre etendu pour collecter des valeurs de registre personnalisees
- Le pont entre registre et WMI passe par le provider
RegProvet les fichiers MOF - L'inventaire logiciel scanne automatiquement les trois emplacements
Uninstall
Distribution Point et transfert de contenu¶
Les Distribution Points (DP) sont les serveurs qui hebergent le contenu a deployer. Le client SCCM gere la decouverte et le telechargement via des parametres registre.
Configuration du transfert de contenu¶
# Content transfer settings
$ctmPath = "HKLM:\SOFTWARE\Microsoft\CCM\ContentTransferManager"
Get-ItemProperty -Path $ctmPath -ErrorAction SilentlyContinue |
Select-Object MaxRetryCount, RetryDelay, MaxBandwidthPercentage
Parametres de transfert¶
| Valeur | Cle | Type | Description |
|---|---|---|---|
MaxRetryCount | CCM\ContentTransferManager | REG_DWORD | Nombre max de tentatives de telechargement |
RetryDelay | CCM\ContentTransferManager | REG_DWORD | Delai entre les tentatives (secondes) |
MaxBandwidthPercentage | CCM\ContentTransferManager | REG_DWORD | Limite de bande passante (0 = illimite) |
Parametres reseau du client¶
# Network configuration for SCCM client
$netPath = "HKLM:\SOFTWARE\Microsoft\CCM\NetworkConfig"
Get-ItemProperty -Path $netPath -ErrorAction SilentlyContinue |
Select-Object BoundaryGroupID, ContentLocation, ManagementPointUrl
BoundaryGroupID : BG-Paris-01
ContentLocation : https://sccm-dp01.entreprise.com
ManagementPointUrl : https://sccm-mp01.entreprise.com
Forcer un Distribution Point specifique¶
Dans certains cas de depannage, il est utile de verifier quel DP est utilise :
# Check content locations cached by the client
$locPath = "HKLM:\SOFTWARE\Microsoft\CCM\ContentTransferManager\ContentLocations"
Get-ChildItem $locPath -ErrorAction SilentlyContinue |
ForEach-Object {
Get-ItemProperty $_.PSPath | Select-Object ContentId, ContentVersion, LocationPath
} | Format-Table -AutoSize
ContentId ContentVersion LocationPath
--------- -------------- ------------
PS100001 2 https://sccm-dp01.entreprise.com/SMS_DP...
PS100042 1 https://sccm-dp02.entreprise.com/SMS_DP...
En resume
ContentTransferManagergere les tentatives de telechargement et la bande passanteNetworkConfigcontient les Boundary Groups et le DP affecte au client- Les emplacements de contenu sont mis en cache sous
ContentTransferManager\ContentLocations
Sante du client : ccmrepair et ccmeval¶
La sante du client SCCM est critique. Un client defaillant ne recoit plus de politiques, ne deploie plus d'applications et ne remonte plus d'inventaire.
Verifier la sante du client via le registre¶
# Read client health evaluation results
$evalPath = "HKLM:\SOFTWARE\Microsoft\CCM\CcmEval"
$props = Get-ItemProperty -Path $evalPath -ErrorAction SilentlyContinue
Write-Output "Derniere evaluation : $($props.LastEvalTime)"
Write-Output "Resultat : $($props.LastEvalResult)"
Write-Output "Reparation necessaire: $($props.NeedRemediation)"
Derniere evaluation : 2026-04-03T06:00:00
Resultat : Passed
Reparation necessaire: False
Valeurs de sante du client¶
| Valeur | Cle | Description |
|---|---|---|
LastEvalTime | CCM\CcmEval | Date/heure de la derniere evaluation |
LastEvalResult | CCM\CcmEval | Passed, Failed, ou Not Yet Evaluated |
NeedRemediation | CCM\CcmEval | True si une reparation est necessaire |
LastRemediation | CCM\CcmEval | Date/heure de la derniere reparation |
Declencher une evaluation de sante¶
# Trigger client health evaluation manually
$ccmEvalExe = "C:\Windows\CCM\CcmEval.exe"
if (Test-Path $ccmEvalExe) {
Start-Process $ccmEvalExe -Wait
$result = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\CCM\CcmEval" `
-Name "LastEvalResult").LastEvalResult
Write-Output "Resultat de l'evaluation : $result"
} else {
Write-Output "CcmEval.exe introuvable — le client SCCM n'est peut-etre pas installe."
}
Reparer le client SCCM¶
Si l'evaluation echoue, la reparation peut etre declenchee :
# Repair the SCCM client
$ccmRepairExe = "C:\Windows\CCM\CcmRepair.exe"
if (Test-Path $ccmRepairExe) {
Write-Output "Lancement de la reparation du client CCM..."
Start-Process $ccmRepairExe -Wait
Write-Output "Reparation terminee. Redemarrage du service..."
Restart-Service CcmExec -Force
Write-Output "Service CcmExec redemarre."
} else {
# Alternative: reinstall client
Write-Output "CcmRepair introuvable. Reinstallation complete recommandee."
Write-Output "Commande : ccmsetup.exe /remediate:client"
}
Lancement de la reparation du client CCM...
Reparation terminee. Redemarrage du service...
Service CcmExec redemarre.
Logs de sante¶
| Fichier log | Emplacement | Contenu |
|---|---|---|
CcmEval.log | C:\Windows\CCM\Logs | Resultats des evaluations de sante |
CcmRepair.log | C:\Windows\CCM\Logs | Details des reparations |
ClientIDManagerStartup.log | C:\Windows\CCM\Logs | Problemes d'identite client |
StatusAgent.log | C:\Windows\CCM\Logs | Envoi des messages d'etat au MP |
# Quick check of recent health evaluation logs
Get-Content "C:\Windows\CCM\Logs\CcmEval.log" -Tail 20 |
Select-String -Pattern "Result|Error|Pass|Fail"
CcmEval: Evaluation result: Passed
CcmEval: All checks passed. No remediation needed.
En resume
CcmEvaldans le registre stocke les resultats de la derniere evaluation de santeCcmEval.exeeffectue l'evaluation,CcmRepair.exeeffectue la reparation- Les logs
CcmEval.logetCcmRepair.logdansC:\Windows\CCM\Logsfournissent les details
Scenario reel : reparer un client SCCM qui ne remonte plus au Management Point¶
Contexte¶
Plusieurs postes ne sont plus visibles dans la console SCCM depuis trois semaines. Les utilisateurs ne recoivent plus de deploiements ni de mises a jour. L'objectif est de diagnostiquer et reparer le probleme a distance via PowerShell Remoting.
Etape 1 : diagnostic a distance¶
# Run diagnostic on a list of problematic machines
$machines = @("PC-COMPTA-01", "PC-RH-05", "PC-DIR-12")
$results = foreach ($pc in $machines) {
Invoke-Command -ComputerName $pc -ScriptBlock {
$ccm = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\CCM" -ErrorAction SilentlyContinue
$eval = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\CCM\CcmEval" -ErrorAction SilentlyContinue
$svc = Get-Service CcmExec -ErrorAction SilentlyContinue
$site = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\SMS\Mobile Client" `
-Name "AssignedSiteCode" -ErrorAction SilentlyContinue).AssignedSiteCode
$clientId = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\CCM\ClientIdentificationInformation" `
-Name "ClientId" -ErrorAction SilentlyContinue).ClientId
[PSCustomObject]@{
Computer = $env:COMPUTERNAME
Service = $svc.Status
SiteCode = $site
ClientId = $clientId
MP = $ccm.SMSSLP
EvalResult = $eval.LastEvalResult
LastEval = $eval.LastEvalTime
}
} -ErrorAction SilentlyContinue
}
$results | Format-Table -AutoSize
Computer Service SiteCode ClientId MP EvalResult LastEval
-------- ------- -------- -------- -- ---------- --------
PC-COMPTA-01 Stopped GUID:{A1B2...} sccm-mp01.entreprise.com Failed 2026-03-10
PC-RH-05 Running PS1 GUID:{C3D4...} old-mp.entreprise.com Passed 2026-04-02
PC-DIR-12 Running PS1 GUID:{E5F6...} sccm-mp01.entreprise.com Failed 2026-03-15
Etape 2 : analyser les problemes identifies¶
Trois cas differents :
| Poste | Probleme identifie | Solution |
|---|---|---|
| PC-COMPTA-01 | Service arrete, pas de site | Reinstaller le client |
| PC-RH-05 | Pointe vers un ancien MP | Mettre a jour le MP dans le registre |
| PC-DIR-12 | Evaluation echouee | Lancer CcmRepair |
Etape 3 : corriger le MP obsolete¶
# Fix PC-RH-05: update the Management Point
Invoke-Command -ComputerName "PC-RH-05" -ScriptBlock {
# Update the management point
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\CCM" `
-Name "SMSSLP" -Value "sccm-mp01.entreprise.com" -Type String
# Restart the CCM service to apply
Restart-Service CcmExec -Force
# Trigger a machine policy refresh
Start-Sleep -Seconds 5
Invoke-WmiMethod -Namespace "root\ccm" -Class "SMS_Client" `
-Name "TriggerSchedule" -ArgumentList "{00000000-0000-0000-0000-000000000021}"
Write-Output "MP mis a jour et politique rafraichie sur $env:COMPUTERNAME"
}
Etape 4 : reparer le client defaillant¶
# Fix PC-DIR-12: run CcmRepair remotely
Invoke-Command -ComputerName "PC-DIR-12" -ScriptBlock {
# Run client health evaluation with remediation
$evalExe = "C:\Windows\CCM\CcmEval.exe"
if (Test-Path $evalExe) {
Start-Process $evalExe -Wait
$result = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\CCM\CcmEval" `
-Name "LastEvalResult").LastEvalResult
if ($result -ne "Passed") {
Write-Output "Evaluation echouee. Lancement de CcmRepair..."
Start-Process "C:\Windows\CCM\CcmRepair.exe" -Wait
Restart-Service CcmExec -Force
}
$final = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\CCM\CcmEval" `
-Name "LastEvalResult").LastEvalResult
Write-Output "Etat final de $($env:COMPUTERNAME) : $final"
}
}
Etape 5 : reinstaller le client completement¶
# Fix PC-COMPTA-01: full client reinstallation
Invoke-Command -ComputerName "PC-COMPTA-01" -ScriptBlock {
# Uninstall existing broken client
$setupExe = "C:\Windows\ccmsetup\ccmsetup.exe"
if (Test-Path $setupExe) {
Start-Process $setupExe -ArgumentList "/uninstall" -Wait
Start-Sleep -Seconds 30
}
# Clean up leftover registry keys
Remove-Item "HKLM:\SOFTWARE\Microsoft\CCM" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "HKLM:\SOFTWARE\Microsoft\SMS" -Recurse -Force -ErrorAction SilentlyContinue
# Reinstall from network share
$installCmd = "\\sccm-mp01\SMS_PS1\Client\ccmsetup.exe"
$params = "SMSSITECODE=PS1 SMSMP=sccm-mp01.entreprise.com /forceinstall"
Start-Process $installCmd -ArgumentList $params
Write-Output "Reinstallation du client lancee sur $env:COMPUTERNAME"
}
Etape 6 : verification post-correction¶
# Re-run diagnostic after fixes (wait 15 minutes for client to settle)
$machines = @("PC-COMPTA-01", "PC-RH-05", "PC-DIR-12")
$results = foreach ($pc in $machines) {
Invoke-Command -ComputerName $pc -ScriptBlock {
$ccm = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\CCM" -ErrorAction SilentlyContinue
$eval = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\CCM\CcmEval" -ErrorAction SilentlyContinue
$svc = Get-Service CcmExec -ErrorAction SilentlyContinue
[PSCustomObject]@{
Computer = $env:COMPUTERNAME
Service = $svc.Status
MP = $ccm.SMSSLP
EvalResult = $eval.LastEvalResult
}
} -ErrorAction SilentlyContinue
}
$results | Format-Table -AutoSize
Computer Service MP EvalResult
-------- ------- -- ----------
PC-COMPTA-01 Running sccm-mp01.entreprise.com Passed
PC-RH-05 Running sccm-mp01.entreprise.com Passed
PC-DIR-12 Running sccm-mp01.entreprise.com Passed
En resume
- Le diagnostic commence par verifier le service, le site assigne, le MP et le resultat CcmEval
- Un MP obsolete se corrige en modifiant
SMSSLPdansHKLM\SOFTWARE\Microsoft\CCM CcmEval.exe+CcmRepair.exeresolvent la majorite des problemes de sante client- En dernier recours, une reinstallation complete via
ccmsetup.exe /uninstallpuis/forceinstall
Voir aussi
- GPO et SCCM/MECM en coexistence — GPO Admins