SCCM Agent komplett deinstallieren

Im Internet findet man viele unterschiedliche Anleitungen wie man den SCCM Agent deinstallieren kann. Ich habe mich an der “offiziellen” Anleitung (TechNet Blog) orientiert und ein PowerShell Script geschrieben.
In den Kommentaren wurde von “GuyverRS” ein Vorschlag für ein Script erstellt. Dieses ist leider, genau wie der Blog Eintrag, nicht vollständig. Ich habe den Vorschlag als Grundlage für mein Script genutzt und entsprechend erweitert.
Dieses nutzt sowohl den /uninstall Befehl vom cmmsetup als auch das manuelle löschen der Daten.

Wieso noch das manuelle löschen?
Bei dem ausführen von ccmsetup.exe /uninstall bleiben immer noch Reste im System. Diese können zum Beispiel dafür sorgen, dass der Client keine neue GUID bekommt, da er diese noch in der SMSCFG, wmi oder registry gespeichert hat.
Folgende Dinge werden in dem Script gelöscht:

  • Alle möglichen Dienste die der SCCM anlegt inkl. Registry Einträge
  • Alle Einträge in der WMI
  • Alle SCCM Registry Einträge
  • Alle Scheduled Tasks
  • Alle SCCM Zertifikate

Hier das Script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
$ErrorActionPreference = "SilentlyContinue"
 
# Uninstall SCCM Agent with smssetup.exe
$MyPath = $env:WinDir
& "$MyPath\ccmsetup\ccmsetup.exe" /uninstall | Out-Null
 
 
# Stop Services
Stop-Service -Name 'ccmsetup' -Force 
Stop-Service -Name 'CcmExec' -Force 
Stop-Service -Name 'smstsmgr' -Force 
Stop-Service -Name 'CmRcService' -Force 
 
# Remove Services
sc delete ccmsetup
sc delete CcmExec
sc delete smstsmgr
sc delete CmRcService
 
# Remove WMI Namespaces
Get-WmiObject -query "SELECT * FROM __Namespace WHERE Name='CCM'" -Namespace "root" | Remove-WmiObject 
Get-WmiObject -query "SELECT * FROM __Namespace WHERE Name='SMS'" -Namespace "root\cimv2"  | Remove-WmiObject 
 
# Remove Services from Registry
$MyPath = “HKLM:\SYSTEM\CurrentControlSet\Services”
Remove-Item -Path "$MyPath\CCMSetup" -Force -Recurse 
Remove-Item -Path "$MyPath\CcmExec" -Force -Recurse 
Remove-Item -Path "$MyPath\smstsmgr" -Force -Recurse
Remove-Item -Path "$MyPath\CmRcService" -Force -Recurse 
 
# Remove SCCM Client from Registry
$MyPath = “HKLM:\SOFTWARE\Microsoft”
Remove-Item -Path "$MyPath\CCM" -Force -Recurse 
Remove-Item -Path "$MyPath\CCMSetup" -Force -Recurse 
Remove-Item -Path "$MyPath\SMS" -Force -Recurse
 
# Remove SCCM Client from 64 Bit Registry
$MyPath = "HKLM:\SOFTWARE\Wow6432Node\Microsoft"
Remove-Item -Path "$MyPath\SMS" -Force -Recurse 
Remove-Item -Path "$MyPath\CCM" -Force -Recurse 
 
# Remove Folders and Files
$MyPath = $env:WinDir
Remove-Item -Path "$MyPath\CCM" -Force -Recurse
Remove-Item -Path "$MyPath\ccmsetup" -Force -Recurse
Remove-Item -Path "$MyPath\ccmcache" -Force -Recurse
Remove-Item -Path "$MyPath\SMSCFG.ini" -Force
Remove-Item -Path "$MyPath\SMS*.mif" -Force
 
# Remove Scheduled Task
Unregister-ScheduledTask -TaskName "Configuration Manager Health Evaluation" -Confirm:$False -ErrorAction SilentlyContinue
Unregister-ScheduledTask -TaskName "Configuration Manager Idle Detection" -Confirm:$False -ErrorAction SilentlyContinue
Unregister-ScheduledTask -TaskName "Configuration Manager Passport for Work Certificate Enrollment Task" -Confirm:$False -ErrorAction SilentlyContinue
 
# Remove Scheduled Task Folder
$scheduleObject = New-Object -ComObject schedule.service
$scheduleObject.connect()
$rootFolder = $scheduleObject.GetFolder("\Microsoft")
$rootFolder.DeleteFolder("Configuration Manager",$unll)
 
# Remove Certificates
Get-ChildItem -Path cert:\LocalMachine\SMS | Remove-Item
Posted in SCCM and tagged , , .

Leave a Reply