Files
PowerShell-scripts/SCCM-WU/Fix-WU-SCCM-DualScan.ps1
T

103 lines
3.2 KiB
PowerShell

$ErrorActionPreference = 'SilentlyContinue'
Write-Host "[1/8] WU services stoppen..."
Stop-Service wuauserv -Force
Stop-Service bits -Force
Stop-Service cryptsvc -Force
Write-Host "[2/8] WUfB registry waarden verwijderen..."
$wu = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate'
$au = "$wu\AU"
$keys = @(
'BranchReadinessLevel',
'DeferFeatureUpdates',
'DeferFeatureUpdatesPeriodInDays',
'DeferQualityUpdates',
'DeferQualityUpdatesPeriodInDays',
'ManagePreviewBuilds',
'ManagePreviewBuildsPolicyValue',
'PauseFeatureUpdates',
'PauseFeatureUpdatesStartTime',
'PauseQualityUpdates',
'PauseQualityUpdatesStartTime',
'ProductVersion',
'TargetReleaseVersion',
'TargetReleaseVersionInfo',
'DeferUpgrade',
'DeferUpgradePeriod',
'DeferUpdatePeriod',
'ExcludeWUDriversInQualityUpdate'
)
foreach ($k in $keys) {
Write-Host " - $k"
Remove-ItemProperty -Path $wu -Name $k -Force
}
Write-Host "[3/8] OS-specifieke fix bepalen..."
$build = (Get-CimInstance Win32_OperatingSystem).BuildNumber
Write-Host " Build: $build"
if ($build -in 14393, 17763, 20348) {
Write-Host " Server 2016/2019/2022: DisableDualScan = 1 zetten"
New-ItemProperty -Path $wu -Name 'DisableDualScan' -PropertyType DWord -Value 1 -Force | Out-Null
}
if ($build -eq 26100) {
Write-Host " Server 2025: policy-driven update source waarden zetten"
$srcKeys = @(
'SetPolicyDrivenUpdateSourceForFeatureUpdates',
'SetPolicyDrivenUpdateSourceForQualityUpdates',
'SetPolicyDrivenUpdateSourceForDriverUpdates',
'SetPolicyDrivenUpdateSourceForOtherUpdates'
)
foreach ($k in $srcKeys) {
Write-Host " - $k"
New-ItemProperty -Path $wu -Name $k -PropertyType DWord -Value 1 -Force | Out-Null
}
if (-not (Test-Path $au)) {
New-Item -Path $au -Force | Out-Null
}
New-ItemProperty -Path $au -Name 'UseUpdateClassPolicySource' -PropertyType DWord -Value 1 -Force | Out-Null
}
Write-Host "[4/8] WU cache leegmaken..."
Remove-Item 'C:\Windows\SoftwareDistribution\DataStore\*' -Recurse -Force
Remove-Item 'C:\Windows\SoftwareDistribution\Download\*' -Recurse -Force
Write-Host "[5/8] WU services starten..."
Start-Service cryptsvc
Start-Service bits
Start-Service wuauserv
Write-Host "[6/8] CcmExec stoppen (max 60 sec)..."
$svc = Get-Service ccmexec
if ($svc.Status -eq 'Running') {
Stop-Service ccmexec -Force
try {
$svc.WaitForStatus('Stopped', (New-TimeSpan -Seconds 60))
Write-Host " CcmExec netjes gestopt"
}
catch {
Write-Host " CcmExec hangt, force kill..."
Stop-Process -Name CcmExec -Force
Start-Sleep -Seconds 5
}
}
Write-Host "[7/8] CcmExec starten..."
Start-Service ccmexec
Start-Sleep -Seconds 10
Write-Host "[8/8] SCCM cycles triggeren..."
$triggers = @(
'{00000000-0000-0000-0000-000000000021}',
'{00000000-0000-0000-0000-000000000022}',
'{00000000-0000-0000-0000-000000000113}',
'{00000000-0000-0000-0000-000000000114}'
)
foreach ($t in $triggers) {
Write-Host " - Trigger $t"
Invoke-WmiMethod -Namespace root\ccm -Class SMS_Client -Name TriggerSchedule -ArgumentList $t | Out-Null
}
Write-Host ""
Write-Host "Klaar. Geef de scan 10-15 min voordat je Software Center checkt."