64 lines
1.5 KiB
PowerShell
64 lines
1.5 KiB
PowerShell
$flagFolder = "C:\ProgramData\PrinterHKeyClean"
|
|
$flagFile = "${flagFolder}\v1.flag"
|
|
|
|
if (!(Test-Path $flagFolder)) {
|
|
New-Item -Path $flagFolder -ItemType Directory -Force | Out-Null
|
|
}
|
|
|
|
if (Test-Path $flagFile) {
|
|
Write-Host "Script has already run. Exiting."
|
|
exit
|
|
}
|
|
|
|
$profileListKey = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
|
|
|
|
$sids = Get-ChildItem $profileListKey
|
|
|
|
$printerPaths = @(
|
|
'\Printers\Connections',
|
|
'\Printers\ConvertUserDevModesCount',
|
|
'\Software\Xerox\PrinterDriver',
|
|
'\Software\Microsoft\Windows NT\CurrentVersion\Devices'
|
|
)
|
|
|
|
$HKLMPrinterPaths = @(
|
|
'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers',
|
|
'HKEY_LOCAL_MACHINE\SOFTWARE\Xerox\PrinterDriver'
|
|
)
|
|
|
|
net stop spooler
|
|
|
|
foreach ($printerPath in $HKLMPrinterPaths) {
|
|
try {
|
|
Remove-Item -Path "Registry::$printerPath" -Recurse -Force -ErrorAction Stop
|
|
} catch {
|
|
Write-Host "Error: $($_.Exception.Message)"
|
|
}
|
|
}
|
|
|
|
foreach ($sidKey in $sids) {
|
|
$sid = $sidKey.PSChildName
|
|
$profilePath = (Get-ItemProperty -Path $sidKey.PSPath -Name ProfileImagePath).ProfileImagePath
|
|
|
|
|
|
|
|
foreach ($printerPath in $printerPaths) {
|
|
try {
|
|
Remove-Item -Path "Registry::HKEY_USERS\$sid$printerPath" -Recurse -Force -ErrorAction Stop
|
|
} catch {
|
|
Write-Host "Error: $($_.Exception.Message)"
|
|
}
|
|
}
|
|
|
|
|
|
if (-not $mounted) {
|
|
$unloadResult = & reg.exe unload "HKU\$sid" 2>&1
|
|
}
|
|
}
|
|
|
|
net start spooler
|
|
|
|
gpupdate /force
|
|
|
|
New-Item -Path $flagFile -ItemType File -Force
|