132 lines
3.4 KiB
PowerShell
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
|