[SOLVED] Corriger l’erreur 0x80041010 dans CCMSetup.log

L’erreur « CcmSetup failed with error code 0x80041010 » est un problème récurrent rencontré lors de l’installation du client SCCM (System Center Configuration Manager). Cette erreur est souvent liée à une corruption du WMI (Windows Management Instrumentation), ce qui empêche le bon fonctionnement du client SCCM.

Dans cet article, nous allons voir comment automatiser la détection et la correction de cette erreur à l’aide d’un script PowerShell. Ce script vérifie la présence du message d’erreur dans les logs SCCM, applique une réparation du WMI si nécessaire, puis relance l’installation du client SCCM.

1. Erreur 0x80041010 : Contexte et objectifs

Lorsque l’erreur 0x80041010 est présente dans le fichier de log ccmsetup.log, l’installation du client SCCM échoue, ce qui empêche la gestion centralisée des machines concernées. La résolution manuelle de ce problème peut être fastidieuse, surtout dans un environnement contenant plusieurs centaines de postes.

L’objectif de ce script est d’automatiser :

  • La vérification des logs SCCM sur une liste de machines.
  • L’application d’une procédure de réparation si l’erreur est détectée.
  • La relance automatique de l’installation du client SCCM.
  • L’enregistrement des machines affectées dans un fichier pour suivi.

2. Fonctionnement du script PowerShell

2.1. Vérification de l’erreur dans les logs SCCM

Le script analyse le fichier ccmsetup.log sur chaque machine listée dans $machines. Si l’erreur « CcmSetup failed with error code 0x80041010 » est trouvée, la machine est ajoutée à un fichier de suivi.

2.2. Création et exécution du script de réparation

Si l’erreur est détectée, un fichier repair.bat est créé et exécuté sur la machine distante. Ce fichier effectue :

  • L’arrêt du service WMI.
  • La suppression du répertoire repository pour forcer une reconstruction de WMI.
  • La réinscription des fichiers DLL et MOF liés à WMI.

2.3. Réinstallation du client SCCM

Une fois la réparation terminée, le script télécharge et exécute le programme d’installation du client SCCM depuis une URL prédéfinie. Il attend ensuite la fin de l’installation et vérifie la présence du service SCCM (ccmexec).

# Liste des machines à vérifier
$machines = @(
"Machine1",
"Machine2"
    # Ajouter d'autres machines ici
)

# Fichier de log pour le suivi des machines avec l'erreur
$errorLogFile = "C:\temp\MachinesAvecErreur.txt"

# Vérification de chaque machine
foreach ($machine in $machines) {
    $logFilePath = "\\$machine\C$\Windows\CCMsetup\Logs\ccmsetup.log"
    $errorCode = "CcmSetup failed with error code 0x80041010"
    
    if (Test-Path -Path $logFilePath) {
        $errorFound = Select-String -Path $logFilePath -Pattern $errorCode -SimpleMatch
        
        if ($errorFound) {
            # Ajout de la machine dans le fichier de suivi
            Add-Content -Path $errorLogFile -Value $machine

            # Création du fichier repair.bat
            $repairScriptPath = "\\$machine\C$\Windows\Temp\repair.bat"
            $repairScriptContent = @"
Net Stop winmgmt
C:
CD %SystemRoot%\System32\wbem
RD /S /Q repository
regsvr32 /s %SystemRoot%\system32\scecli.dll
regsvr32 /s %SystemRoot%\system32\userenv.dll
for /f %%s in ('dir /b /s *.dll') do regsvr32 /s %%s
scrcons.exe /regserver
unsecapp.exe /regserver
winmgmt.exe /regserver
wmiadap.exe /regserver
wmiapsrv.exe /regserver
wmiprvse.exe /regserver
mofcomp cimwin32.mof
mofcomp cimwin32.mfl
mofcomp rsop.mof
mofcomp rsop.mfl
for /f %%s in ('dir /b *.mof') do mofcomp %%s
for /f %%s in ('dir /b *.mfl') do mofcomp %%s
cd "C:\Program Files\Microsoft Policy Platform"
mofcomp ExtendedStatus.mof
"@

            # Écriture du script sur la machine distante
            Set-Content -Path $repairScriptPath -Value $repairScriptContent

            # Exécution du script
            Invoke-Command -ComputerName $machine -ScriptBlock { cmd /c C:\Windows\Temp\repair.bat }

            # Installation du client SCCM après réparation
            Invoke-Command -ComputerName $machine -ScriptBlock {
                function Reinstall-SCCMClient {
                    try {
                        Start-BitsTransfer -Source "http://Primary_Server/ccm_client/ccmsetup.exe" -Destination C:\temp\ccmsetup.exe
                    } catch {
                        Write-Output "Error: Failed to download SCCM client. Exception: $_"
                        return
                    }

                    if (Test-Path -Path C:\temp\ccmsetup.exe) {
                        $arg = '/AllowMetered SMSSITECODE=Sitecode SMSMP=MP_Server'
                        Start-Process -FilePath C:\temp\ccmsetup.exe -ArgumentList $arg -Wait
                    } else {
                        Write-Output "Error: Download of SCCM client failed, file not found at C:\temp\ccmsetup.exe"
                        return
                    }

                    Start-Sleep -Seconds 120
                    if (Get-Service -Name "ccmexec" -ErrorAction SilentlyContinue) {
                        Write-Output "SCCM Client installed successfully."
                    } else {
                        Write-Output "SCCM Client installation failed."
                    }
                }

                Reinstall-SCCMClient
            }
        }
    }
}

4. Erreur 0x80041010 : Conclusion

Ce script PowerShell permet d’automatiser la correction de l’erreur SCCM 0x80041010 et d’assurer une réinstallation propre du client SCCM. Il s’intègre facilement dans une stratégie de gestion proactive des postes et réduit le temps d’intervention des administrateurs système.

Retour en haut