Files
2025-05-14 13:25:48 -04:00

132 lines
3.4 KiB
PowerShell

<#
.Description
Script to detect if there is any trace of SCCM agent.
Will check for CcmExec service and registry keys for services, SMS Certs, and MDM Authority.
.Notes
Source: https://github.com/robertomoir/remove-sccm/blob/master/remove-sccmagent.ps1
Source: https://www.optimizationcore.com/deployment/sccm-client-complete-remove-uninstall-powershell-script/
Source: https://jamesachambers.com/remove-microsoft-sccm-by-force/
Source: https://github.com/ChadSimmons/Scripts/blob/default/ConfigMgr/Troubleshooting/Remove-ConfigMgrClient.ps1
#>
#region Settings
$Error.Clear()
$Result = 0
$DetectSummary = ""
#New lines, easier to read Agentexecutor Log file.
Write-Host "`n`n"
#endregion Settings
#region Functions
Function Test-IfServiceExistExit1 {
Param
(
[string]$ServiceName
)
$DetectSummary = ""
$Service = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue
If ($null -eq $Service) {
Write-Host "Service $ServiceName was not found."
}
else {
Write-Warning "Service $ServiceName exists."
if (-not ($DetectSummary -eq "")) { $DetectSummary += ", " }
$DetectSummary += "$ServiceName service exists"
return 1, $DetectSummary
}
return 0, $DetectSummary
}
Function Test-IfRegKeyExistExit1 {
Param
(
[string]$RegKeyPath
)
$DetectSummary = ""
$RegKey = Get-Item -Path $RegKeyPath -ErrorAction SilentlyContinue
if ($null -eq $RegKey) {
Write-Host "Registry Key $RegKeyPath was not found."
}
else {
Write-Warning "$RegKeyPath exists."
if (-not ($DetectSummary -eq "")) { $DetectSummary += ", " }
$DetectSummary += "$RegKeyPath exists"
return 1, $DetectSummary
}
return 0, $DetectSummary
}
#endregion Functions
#region Main
#Look for the services related to SCCM client.
$Services = ("CcmExec", "CCMSetup", "smstsmgr", "CmRcService")
foreach ($Serv in $Services) {
# Verify that services do not exist
$result, $serviceSummary = Test-IfServiceExistExit1 $Serv
if ($result -eq 1) {
$Result = 1
}
$DetectSummary += $serviceSummary
}
#Verify that all registry keys from SCCM agent do not exist.
$RegServicesPath = "HKLM:\SYSTEM\CurrentControlSet\Services"
$RegSoftwarePath = "HKLM:\SOFTWARE\Microsoft"
$RegSoftwareWowPath = "HKLM:\SOFTWARE\Wow6432Node\Microsoft"
$RegSmsCertsPath = "HKLM:\SOFTWARE\Microsoft\SystemCertificates\SMS\Certificates"
$RegServices = (
"$RegServicesPath\CcmExec",
"$RegServicesPath\CCMSetup",
"$RegServicesPath\smstsmgr",
"$RegServicesPath\CmRcService",
"$RegSoftwarePath\CCM",
"$RegSoftwarePath\CCMSetup",
"$RegSoftwarePath\SMS",
"$RegSoftwarePath\DeviceManageabilityCSP",
"$RegSoftwareWowPath\CCM",
"$RegSoftwareWowPath\CCMSetup",
"$RegSoftwareWowPath\SMS",
"$RegSmsCertsPath\*"
)
foreach ($RegService in $RegServices) {
# Verify that Registry Keys do not exist
$result, $regKeySummary = Test-IfRegKeyExistExit1 $RegService
if ($result -eq 1) {
$Result = 1
}
$DetectSummary += $regKeySummary
}
#New lines, easier to read Agentexecutor Log file.
Write-Host "`n`n"
# Return result
if ($Result -eq 0) {
Write-Host "OK $([datetime]::Now) : SCCM not found."
Exit 0
} else {
Write-Host "WARNING $([datetime]::Now) : $DetectSummary"
Exit 1
}
#endregion Main