当前位置:首页 > CN2资讯 > 正文内容

Powershell批量安装Windows服务器补丁powershell安装软件

15小时前CN2资讯

场景

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 远程批量重启。【Restart-Computer -ComputerName pc-1,pc-2,pc-N -Force】

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/30547.html

    分享给朋友:

    “Powershell批量安装Windows服务器补丁powershell安装软件” 的相关文章

    CN2与BGP:哪个延迟更低?解析网络延迟的真相

    CN2与BGP的延迟对比在互联网世界中,延迟(Latency)是衡量网络性能的重要指标之一。无论是游戏玩家、跨国企业,还是普通用户,低延迟的网络体验都是大家追求的目标。在众多网络技术中,CN2和BGP两种网络方案备受关注。它们各自拥有独特的技术特点,但究竟哪个延迟更低?本文将深入探讨这个问题。CN2...

    存储VPS:高效处理大量数据,灵活配置,按需付费

    什么是存储VPS 存储VPS是一种专门为处理大量数据而设计的虚拟专用服务器。它提供了广泛的磁盘空间,并且通常针对高容量存储需求进行了优化。无论是个人用户还是企业用户,存储VPS都能满足他们对数据存储的高要求。这种服务器不仅具备强大的存储能力,还提供了灵活的配置选项,用户可以根据自己的需求选择合适的硬...

    腾讯云国际站:全球云服务解决方案,助力企业高效发展

    腾讯云国际站是腾讯在全球范围内提供云服务的重要平台。作为腾讯国际化战略的核心组成部分,腾讯云国际站通过其强大的技术实力和全球化的基础设施布局,为全球用户提供高效、稳定的云服务解决方案。无论是企业还是个人开发者,都可以通过腾讯云国际站享受到腾讯在云计算领域的最新成果。 腾讯云国际站的发展历程 腾讯云国...

    不限制流量套餐:选择适合你的最佳电信方案

    在我们这个信息高速发展的时代,手机成为了我们日常生活中不可或缺的一部分。而随着视频、游戏和社交媒体等应用的流行,很多用户的流量需求逐渐增加。这也促使电信运营商们纷纷推出了“不限流量套餐”,以满足用户对流量的广泛需求。 简单来说,不限流量套餐意指用户可以在一个月内不限流量使用手机数据,虽然很多套餐背后...

    IEPL:企业国际以太网专线的优势与申请指南

    什么是IEPL 当我第一次接触IEPL(International Ethernet Private Line)时,我意识到它是一种为企业提供国际级别的网络连接服务,特别适合那些需要在不同国家和地区之间高效、安全传输数据的公司。这项服务一般由电信运营商提供,旨在帮助企业实现及时的信息交流和数据传输。...

    在Ubuntu上使用宝塔面板进行服务器管理的全方位指南

    宝塔面板简介 作为一款在服务器管理领域取得广泛认可的工具,宝塔面板在Linux系统中尤为突出,特别是针对Ubuntu用户而言。通过提供直观的操作界面,宝塔有效地简化了复杂的Linux服务器管理过程。对于我这样的用户来说,宝塔无疑是一个不可多得的助手,轻松应对日常维护和配置工作。 宝塔面板不仅仅是一款...