Mi è capitato presso diversi clienti di trovare diversi record dell’agent SCCM col GUID duplicato: uno dei problemi comuni e difficili da risolvere per sanare l’ambiente, specialmente se si utilizza un meccanismo per clonare le macchine con l’agent SCCM già a bordo e ci troviamo con più di una centinaia di computer col GUID duplicato. Microsoft non consiglia di includere l’agent nell’immagine, o di seguire la procedura descritta qui se si desidera lasciare l’agent prima di creare un immagine/clone How to Install Configuration Manager Clients Using Computer Imaging.

La presenza di un GUID duplicato rende molto difficile la distinzione fra i due o più computer col GUID duplicato, di conseguenza, le operazioni di software distribution, OSD e alla fine i report non daranno i risultati previsti.

Sui vari knowledge base (KB) e blog Microsoft, esistono varie procedure manuali e automatizzate per sanare la situazione. Personalmente, ho trovato questa soluzione la più facile da seguire, e ho creato una semplice procedura per risolvere il problema alla radice. Tutte le varie documentazioni Microsoft seguono la stessa logica per risolvere il problema, si tratta di:

  1. Identificare i sistemi coi GUID duplicati
  2. Cancellare il file SMSCFG.INI dalla cartella %WINDIR% (di solito C:\Windows o C:\WinNT)
  3. Fare STOP del servizio CCMEXEC (il servizio dell’agent SCCM)
  4. Eseguire CCMDELCERT.EXE sul computer con GUID duplicato
  5. Avviare il servizio CCMEXEC

CCMDELCERT.EXE fa parte del SMS2003 Toolkit 2 e non è stato incluso nel programma System Center Configuration Manager 2007 Toolkit v2

Il problema principale di automatizzare il processo è legato al servizio CCMEXEC stesso. Ogni software distribution o software updates viene eseguito come processo figlio dell’eseguibile CCMEXEC.EXE. Siccome la procedura descritta sopra, specialmente nel terzo step richiede il fermo del servizio, di conseguenza ogni processo figlio viene automaticamente stoppato e tutta la procedura si ferma senza raggiungere il risultato desiderato. Questo package è composto da due script che completano il processo in due fasi. La prima fase copia CCMDELCERT.EXE da una cartella condivisa sulla cartella di sistema %WinDIR% e crea un Task Schedulato separato (quindi non dipende da CCMEXEC) e poi avviarlo. La seconda fase, l’esecuzione del Task Schedulato facendo stop del servizio CCMEXEC, eseguire CCMDELCERT e alla fine avviare CCMEXEC e cancellare il Task Schedulato!

Quindi si tratta di creare una cartella sul server SCCM, come qualsiasi cartella per i package dei software sorgenti, creare un programma (utilizzando GenerateGUID.cmd come eseguibile), e mettere il pacchetto su una Distribution Point

image

Il contenuto del file GenerateGUID.cmd e’ il seguente:

@echo off
if exist %WinDir%\smscfg.ini del %WinDir%\smscfg.ini
copy \\ServerShare\Percorso\CCMDELCERT\ccmdelcert.exe %WinDir% /y
copy \\ServerShare\Percorso\CCMDELCERT\ccmdelcert.cmd %WinDir% /y
sc config bits start= auto
sc start bits
sc config schedule start= auto
sc start schedule
schtasks /create /TN "CCMDELCERT" /TR "%WinDir%\ccmdelcert.cmd" /RU "NT AUTHORITY\SYSTEM" /SC ONCE /ST 00:00:00
schtasks /run /TN "CCMDELCERT"

 

Mentre il contenuto del file CCMDELCERT.CMD e’ il seguente:

net stop ccmexec
%WinDir%\ccmdelcert.exe
net start ccmexec
schtasks /delete /TN "CCMDELCERT" /F
exit
        

 

Non ci resta che creare un advertisement sulla collection delle machine coi GUID duplicate ed aspettare i risultati.

Per ulteriori informazioni su come identificare i GUID duplicate in una collection Ad-Hoc consultare il seguente link System Center Configuration Manager and Duplicate GUID's

Ihab