๐ฅ️ 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 ๅ ฑๅฐ(้ฒ้็)》
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ