![](/img/trans.png)
[英]Automating Windows Server Updates with PSwindowsUpdate module. Issue
[英]Installing Windows Updates via PSWindowsUpdate
我正在尝试远程使域计算机安装其 windows 更新。 这听起来应该很容易,但我已经为此工作了 7 多个小时,但无法让它工作。 我知道您可以通过 GPO 执行此操作,但这并不能让我对间隔进行足够的控制。 我希望我们的服务器每月安装并重新启动 - GPO 只能用于每周安装和重新启动。 由于我们的生产工作 24/7 我绝对不希望服务器在每月几个小时的停机时间之外重新启动,我可以进行维护!
我找到了几个使用模块PSWindowsUpdate的类似教程,但这些教程使用的是该模块的旧版本。 他们使用名为Invoke-WUInstall
,它在最新版本中不存在。 我曾尝试降级模块,但 packagesource 不提供早于 2.0.0.0 的版本 此外,项目页面不提供文档 - 没有示例 - 它也没有讨论或 bugtracker。 原作者的页面上有一个讨论,但他在2年前还是旧版本的时候就停止了。
我尝试使用Invoke-Command
而不是Invoke-WUInstall
,但 Windows 似乎不允许这样的远程更新安装。 PSWindowsUpdate 显然通过在目标机器上将命令作为计划任务运行来规避此问题,因此查看Get-Command -Module PSWindowsUpdate
的 output ,我想我可能需要改用Invoke-WUJob
并编写以下代码:
Import-Module -Name PSWindowsUpdate
Enable-PSRemoting -Force
ForEach ($hostname in $args) {
Write-Output "Processing $hostname"
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $hostname -Concatenate -Force
# Install PSWindowsUpdate on target machine
Invoke-Command -computername $hostname -ScriptBlock {
PackageManagement\Get-PackageProvider -Name NuGet -Force
inmo PSWindowsUpdate -Force
}
# Install the Updates
Invoke-WUJob -ComputerName $hostname -Script {
ipmo PSWindowsUpdate;
Install-WindowsUpdate -install -AcceptAll -IgnoreReboot
} -Confirm:$false -RunNow
}
我以在目标机器上拥有管理权限的用户身份运行它,output 看起来不错,但它没有做任何事情。
有没有人有使用该模块的经验? 您如何在 >= 2 的版本中正确执行此操作?
好吧,我已经做了类似的事情,也面临同样的问题。
那是我的解决方案:
创建一个 powershell 文件来执行您的命令。 放置所有命令以在此处安装更新。
将此文件复制到远程服务器。 你可以这样做:
复制 myfile.ps1 \\myserver\c$\temp\myfile.ps1;
运行远程脚本以在 RunOnce 中创建注册表,并使用命令设置值来运行脚本:
Set-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce" -Name ':InstallUpdates' -Value "c.\WINDOWS\system32\WindowsPowerShell\v1.0\powershell:exe -File c.\temp\myfile .ps1"
远程运行另一个命令以重新启动服务器。
服务器将重新启动,然后将在本地执行您的脚本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.