🖥️ WSUS 客戶端強制報到全策略(清 GUID、COM、PsExec)
在 WSUS 環境中,最常見的問題之一就是「客戶端不報到、不同步、不會出現在 WSUS 主控台」。 本篇提供一套企業級、完整可落地的強制報到策略,涵蓋:
- 🔧 清除 WSUS Client GUID(重建識別碼)
- 🔧 重置 SoftwareDistribution 及授權
- 📡 強制檢查更新與報到(wuauclt / usoclient / PowerShell)
- 🧩 COM API 強制報到(SYSTEM Level)
- 🛠️ PsExec SYSTEM 層級 COM 報到(最強方式)
- 🔁 自動化腳本一次完成(已可直接落地)
這些方法皆已在企業大量 Win10 / Win11 環境實測,可有效處理報不到、GUID 重複、紀錄損毀等問題。
📌 第一章:確認 WSUS 客戶端狀態
1.1 查看客戶端目前註冊狀態
Get-WindowsUpdateLog
Get-Item "HKLM:\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate"
1.2 常見失效徵兆
- WSUS 主控台看不到該機器
- 報到日期停留數天甚至數週
- GUID 重複(多台同一 GUID)
- SoftwareDistribution 損毀
📌 第二章:清除 WSUS GUID(完整重置法)
此方法會讓 Windows 重新產生 WSUS Client ID,是最常用的修復流程。
2.1 PowerShell 一鍵清除 GUID
# 停止 Windows Update 服務
net stop wuauserv
net stop bits
# 移除 WSUS 判別碼
Remove-Item "HKLM:\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate" -Recurse -Force
# 重建 SoftwareDistribution
Remove-Item "C:\Windows\SoftwareDistribution" -Recurse -Force
# 重新啟動服務
net start wuauserv
net start bits
# 重新產生 GUID
wuauclt /resetauthorization /detectnow
重置後,系統會重新註冊 WSUS 並建立新的 ClientID。
📌 第三章:強制檢查更新與報到(官方工具)
3.1 Windows 10 / 11(USO Client)
usoclient startscan
usoclient startdownload
usoclient startinstall
usoclient resumeupdate
3.2 舊版 Windows(WUAUCLT)
wuauclt /detectnow
wuauclt /reportnow
注意:在 Win10/Win11 上,wuauclt 部分參數已被標示 deprecated,但 /reportnow 仍可強制回報 WSUS。
📌 第四章:使用 COM API 強制報到(WSUS 最核心方式)
若想真正強制 Windows 立即與 WSUS 報到(不受排程與延遲限制),官方唯一方法就是 COM API:
$updateSession = New-Object -ComObject Microsoft.Update.Session
$updateSearcher = $updateSession.CreateUpdateSearcher()
$searchResult = $updateSearcher.Search("IsInstalled=0")
這會立即觸發 Windows Update 與 WSUS 同步。
4.1 完整 COM API 強制報到腳本
$Session = New-Object -ComObject "Microsoft.Update.Session"
$Searcher = $Session.CreateUpdateSearcher()
$Result = $Searcher.Search("IsInstalled=0 and Type='Software'")
Write-Host "Updates Found: " $Result.Updates.Count
此方法比 USO/WAUCLT 更可靠。
📌 第五章:PsExec SYSTEM 層級 COM 報到(最強策略)
有些機器就算用 PowerShell 也無法強制報到,原因是:
WSUS 報到行為必須在 SYSTEM 權限下才能完全生效。因此要使用 PsExec 以 SYSTEM 身份執行 COM API:
5.1 使用 PsExec SYSTEM 報到
psexec -sid powershell.exe
5.2 在 SYSTEM 裡執行 COM 報到
$Session = New-Object -ComObject "Microsoft.Update.Session"
$Searcher = $Session.CreateUpdateSearcher()
$Searcher.Search("IsInstalled=0")
這是最強制、最保險、最高成功率的 WSUS 報到方法。
📌 第六章:企業級「一鍵修復」整合腳本(推薦)
以下腳本整合了你需要的所有功能: 清除 GUID → 重建資料夾 → 時間同步 → 強制報到 → SYSTEM COM 報到。
6.1 wsus_fix.ps1 — 一鍵完整修復
# 1. 時間同步
w32tm /resync /force
# 2. 停止服務
net stop wuauserv
net stop bits
# 3. 清 GUID + 重建更新資料夾
Remove-Item "HKLM:\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate" -Recurse -Force
Remove-Item "C:\Windows\SoftwareDistribution" -Recurse -Force
# 4. 啟動服務
net start wuauserv
net start bits
# 5. 強制偵測
wuauclt /resetauthorization
wuauclt /detectnow
# 6. USO 強制偵測
usoclient startscan
# 7. COM API(User Mode)
$Session = New-Object -ComObject "Microsoft.Update.Session"
$Searcher = $Session.CreateUpdateSearcher()
$Searcher.Search("IsInstalled=0") | Out-Null
Write-Host "初步修復完成,如需最高成功率請執行 SYSTEM COM 報到"
---
6.2 SYSTEM 最高成功率模式(需 PsExec)
另存為 wsus_system_report.ps1:
$Session = New-Object -ComObject "Microsoft.Update.Session"
$Searcher = $Session.CreateUpdateSearcher()
$Searcher.Search("IsInstalled=0")
Write-Host "SYSTEM 層級 WSUS 強制報到完成"
執行方式:
psexec -sid powershell.exe -file wsus_system_report.ps1
---
📌 第七章:遠端多台電腦批次修復(PsExec)
針對企業環境(大量 PC),可批次執行:
psexec @hosts.txt -s powershell.exe -file wsus_fix.ps1
hosts.txt 格式:
PC001
PC002
PC003
📌 第八章:最佳實務建議(企業級)
- 🕒 每月定期執行清理 SoftwareDistribution
- 🧱 統一 SCCM/WSUS GPO 設定,避免 GUID 重複
- 🔐 依需求開啟 Telemetry,提升 WSUS 回報成功率
- 📡 定期執行 SYSTEM COM 報到(最完整)
- 📂 保留完整更新事件記錄(UpdateLog)
📌 結語
WSUS 報不到通常不是單一原因,而是 GUID、授權、更新資料夾、SYSTEM 權限、COM API 全部綁在一起。 本篇提供的整合策略已驗證多年,是目前企業環境成功率最高、最穩定、最完整的「WSUS 客戶端強制修復方案」。
下一篇將延伸介紹: 《WSUS + PowerShell GUI 工具:自動修復、批次診斷與系統模式 COM 報到(進階版)》
沒有留言: