中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Powershell批量安裝Windows服務器補丁

發布時間:2020-09-17 20:46:58 來源:網絡 閱讀:1697 作者:marbury 欄目:系統運維

場景

Windows Server經常需要安裝安全補丁,wsus安裝補丁的策略,尤其在重啟服務器這塊,不滿足需求,人工逐臺安裝又需要大量的時間。因此部署一臺控制機,通過運行PowerShell腳本遠程批量安裝Windows補丁,可以極大的提升工作效率。

目標

批量安裝Windows server補丁。

引言

Microsoft定義了一個 WS-Management 的協議,這個協議為計算機設備遠程交換管理數據提供了一個公開的標準。在 Windows 平臺上,MS 通過 Windows 遠程管理服務(Windows Remote Management service,簡稱 WinRM) 實現了 WS-Management 協議。這就是我們可以通過 PowerShell 執行遠程操作的基礎,因為 PowerShell 就是通過 WinRM 服務來進行遠程操作的。


但實際測試中,當我們使用如下命令遠程安裝時候,卻總是安裝失敗。

Invoke-Command -ComputerName  $Computer -ScriptBlock { wusa.exe   xxx.msu /quiet /norestart}

通過日志可以看到,報錯如下: 無法安裝 Windows 更新 ,因為發生錯誤: 2147942405“拒絕訪問。“

原來,微軟不支持使用wusa和其API遠程安裝補丁更新,解決方案是使用dism或者add-windowspackage代替。

https://support.microsoft.com/en-us/help/2773898/windows-update-standalone-installer-wusa-returns-0x5-error-access-deni

實現

批量安裝主要三步:

  • 拷貝補丁文件【下載補丁->控制機->目標機】
  • 遠程安裝補丁文件
  • 驗證安裝結果

第一步: 拷貝文件

下載補丁文件(.msu),拷貝到控制機對應目錄(如c:\fix),通過腳本將其解壓(加壓后便于dism或者add-windowspackage安裝)并拷貝到目標機。

"computer_list.txt" 用戶存儲目標機器名稱,每行一個。這個文件是唯二需要管理員手工編輯的(另一個就是下載補丁拷貝到控制機)。

本步: 右擊,使用powershell運行"copy.ps1"

#Script_name:copy.ps1

$PC = Get-Content("C:\scripts_wusa\computer_list.txt")
$FileMSU = Get-ChildItem C:\fix -Name
$CAB_PATH = "C:\fix_cab\"
wusa.exe "C:\fix\$FileMSU" /extract:$CAB_PATH
#解壓過程休息90s
Start-Sleep -Seconds 90

$i = 0

foreach ($h in $PC){

$i++
Copy-Item -Path $CAB_PATH -Destination \\$h\C$\ -Recurse -Force

if ($h -eq $PC[-1]){
    Write-Progress -Activity "進度顯示" -status "正在處理最后一臺主機 $h !"
    Write-Output "總計處理 $i 臺主機,傳輸完畢!"
    #Start-Sleep -Seconds 20
    pause
}
else{
    Write-Progress -Activity "進度顯示" -status "正在處理 第 $i 臺主機 $h ,請耐心等待!"  -PercentComplete  ($i/$PC.count*100)
}

}

第二步: 運行遠程安裝腳本
這個步驟共2個腳本,一個腳本用來執行安裝動作,另一個腳本用來調用第一個,執行遠程操作。

本步: 右擊,使用powershell運行 "Remote_install.ps1"

要注意的是: 域內計算機,域管理員登陸控制機后,遠程操作時不用在進行認證。域外計算機,必須要通過參數 -Credential 提供遠程操作管理憑據認證。

安裝腳本:

#Script_name:action_fix.ps1

$FileCAB = Get-ChildItem  C:\fix_cab  *KB*.cab -Name
Foreach ($file in $FileCAB)
{
 Add-WindowsPackage -Online -PackagePath C:\fix_cab\$file  -NoRestart  
}

遠程調用:

#Script_name:Remote_install.ps1

$PC = Get-Content("C:\scripts_wusa\computer_list.txt")
$i=0
foreach ($h in $PC){

$i++
#域內計算機
Invoke-Command -ComputerName $h -FilePath C:\scripts_wusa\action_fix.ps1
#未加域計算機
#Invoke-Command -ComputerName $h -FilePath C:\action_fix.ps1 -Credential administrator
Write-Progress -Activity "安裝進度" -Status "正在為主機 $h 安裝補丁,請耐心等待!" -PercentComplete ($i/$PC.Count*100)

}

第三步: 遠程安裝結果驗證

這個步驟也2個腳本,一個腳本用來執行檢查動作,另一個腳本用來調用第一個,執行遠程操作。

本步: 右擊,使用powershell運行 "check_fix_install.ps1"

檢查安裝結果:

#Script_name:check_show

$FileCAB = Get-ChildItem  C:\fix_cab  *KB*.cab -Name

Function Get_fix()
{
     foreach ($i in $FileCAB){
        $KB = $i.Split("-")[1]
        Get-hotfix | where {$_.HotFixID -eq $KB }
      }
}

Get_fix

遠程調用:

#Script_name:check_fix_install.ps1

$PCs = Get-Content("C:\scripts_wusa\computer_list.txt")

foreach ($h in $PCs)
{ 
    $result = Invoke-Command -ComputerName $h -FilePath C:\scripts_wusa\get_fix.ps1
    if ($result){
        Write-Output "$h  install Sucess!"
    }
    else{
        Write-Output "$h  install Failure!"  
    }

}

pause

看一下第三步的運行結果(可以只打印安裝失敗的主機,畢竟我們更關心安裝失敗的):

Powershell批量安裝Windows服務器補丁

補丁安裝成功后,剩下的就是管理員選擇合理的時間,將服務器重啟就可以了,也可以通過婆powershell 遠程批量重啟。【Restart-Computer -ComputerName pc-1,pc-2,pc-N -Force】

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郸城县| 靖州| 兰西县| 施秉县| 神农架林区| 商丘市| 常州市| 西林县| 云安县| 吐鲁番市| 大连市| 钟山县| 乌兰察布市| 廉江市| 濮阳市| 蒙城县| 五河县| 镇宁| 定南县| 唐海县| 仁布县| 吉安市| 瓮安县| 习水县| 楚雄市| 英吉沙县| 武平县| 吉安县| 化德县| 南澳县| 旌德县| 高雄市| 巫溪县| 陆川县| 大宁县| 阳信县| 中阳县| 仙桃市| 乡宁县| 黔东| 江孜县|