繁体   English   中英

通过 PSWindowsUpdate 安装 Windows 更新

[英]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 的版本中正确执行此操作?

好吧,我已经做了类似的事情,也面临同样的问题。

那是我的解决方案:

  1. 创建一个 powershell 文件来执行您的命令。 放置所有命令以在此处安装更新。

  2. 将此文件复制到远程服务器。 你可以这样做:

    复制 myfile.ps1 \\myserver\c$\temp\myfile.ps1;

  3. 运行远程脚本以在 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"

  4. 远程运行另一个命令以重新启动服务器。

  5. 服务器将重新启动,然后将在本地执行您的脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM