Manually Remote install Patches on Workstation by PowerShell

Environment:

1. WSUS (Downstream Server – Local Thailand)
2. Lansweeper
3. PowerShell

 

ทีมา ใช้ WSUS Sever ในการ install MS17-010 กับ Client 769 เครื่องแต่มี Failed 127 เครื่อง (XP + Windows 7) – 16.51%

1. ใช้ Lansweeper Report ว่าเครื่องใดบ้างทีไม่มีได้ทำ MS17-010

VMS Report

image

 

MS17-010 ที่ต้อง Install

KB4012598
KB4012212
KB4012215
KB4012213
KB4012216
KB4012217

 

Report จาก Lansweeper สำหรับ MS17-010 Missing Patch

https://www.lansweeper.com/forum/yaf_postst14994_Checking-MS17-010-patch-is-installed.aspx#post50961

image

 

Lansweeper Report

ลองเปรียบเทียบ computer 2 เครื่องว่า report มันถูกต้องจริงไหม?

PS C:\> Get-HotFix -Description "Security*" -ComputerName "Server01", "Server02" -Cred "Server01\admin01"

ตัวแรกมี KB4012212

Get-HotFix 1

ตัวที่สอง ไม่มี KB4012212

Get-HotFix 2

แสดงว่า report จาก Lansweeper ถูกต้อง

ขั้นตอนไปเราต้อง ทำการ install Patch เหล่านี้แบบ Manual โดยใช้ PowerShell Remote installing.

KB4012598
KB4012212
KB4012215
KB4012213
KB4012216
KB4012217

เวลาจะติดตั้ง Patch เราต้องสร้าง ComputerList.txt สำหรับเป็น source file แยกตาม

1. Operating System
2. Architecture x86 หรือ x64

Get-HotFix 3

image

image

 

คำสั่งและ concept สำหรับ remote install Patch ด้วย PowerShell

https://community.spiceworks.com/topic/2054098-silently-install-patches-remotely-and-reboot

  1. Copy all .msu files to C:\Temp on all machines in the list
  2. Silently install all
  3. Delete all .msu files from C:\Temp
  4. Prompt the console for a reboot of all said machines as a batch

 

$RootHotfixPath = ‘Patches\’ $Hotfixes = @(‘Windows6.1-KB3065987-v2-x64.msu’,’Windows6.1-KB3092627-x64.msu’,’KB3020369_x64.msu’,’KB3125574_x64.msu’) $Servers = Get-Content ‘MachineList.txt’ foreach ($Hotfix in $Hotfixes){ $HotfixPath = “$RootHotfixPath$Hotfix” foreach ($Server in $Servers){ if (Test-Path “\\$Server\c$\Temp”){ Write-Host “Processing $Server…” # Copy update package to local folder on server Copy-Item $Hotfixpath “\\$Server\c$\Temp” # Run command as SYSTEM via PsExec (-s switch) & C:\Windows\PsExec -s \\$Server wusa C:\Temp\$Hotfix /quiet /norestart write-host “& C:\Windows\PsExec -s \\$Server wusa C:\Temp\$Hotfix /quiet /norestart” if ($LastExitCode -eq 3010) { $ConfirmReboot = $False } else { $ConfirmReboot = $True } # Delete local copy of update package Remove-Item “\\$Server\c$\Temp\$Hotfix” Write-Host “Restarting $Server…” Restart-Computer -ComputerName $Server -Force -Confirm:$ConfirmReboot Write-Host } else { Write-Host “Folder C:\Temp does not exist on the target server” } } }

 

 


 

ก่อนทำเป็น Bulk ให้ลอง command ของ PowerSHell ก่อนว่า ถ้าเครือ่งเดียวจะ install ได้ไหม?

**ต้อง download PSEXEC มาใช้ที่เครื่องด้วย https://docs.microsoft.com/en-us/sysinternals/downloads/pstools

 

write-host "& C:\Windows\PsExec -s \\$Server wusa C:\Temp\$Hotfix /quiet /norestart"

 

write-host “& C:\Windows\PsExec -s \\$Server wusa C:\Temp\$Hotfix /quiet /norestart”

Get-HotFix 5

Restart-Computer –ComputerName $Server -Force -Confirm:$True

ลอง get-hotfix ดูอีกรอบ

Get-HotFix -Description “Security*” -ComputerName “$ServerName”

Get-HotFix 6

 

 

สรุป 3 คำสั่งที่ต้องใช้งาน

C:\PSTools\PsExec -s \\HostName wusa C:\Temp\windows6.1-kb4012212-x86.msu /quiet /norestart
Restart-Computer -ComputerName HostName -Force -Confirm:$ConfirmReboot
Get-HotFix -Description “Security*” -ComputerName “HostName”

Facebook Comments

Leave a Reply

Scroll to top