问题简要
如何使用 Windows 内置程序(批处理/PowerShell)或免费工具(最好是命令行)实现自动化,步骤如下:
- 扫描 WU 上所有当前可用的更新
- 立即下载并安装它们(即无需任何限制/调度/后台)
- 如果有必要,请重新启动,关闭所有不能自动关闭的内容。
我还希望在“设置”面板中触发与现有 WU 相同的后台机制,而不是通过设置自己的下载位置或其他方式使用单独的基础设施。
背景
我有一台不定期重启或没有固定工作时间表的 PC。WU 正在运行,但其所有自动重启功能均已完全禁用,因此它不会在某些绝对不方便的时间妨碍工作。有时我会抽出时间运行完整的更新周期,这时就会出现机会之窗。要手动执行此操作,我需要:
- 打开 WU 设置
- 运行“检查更新”以发现因任何原因而缺少的最新更新
- 点击“下载”,然后等待任意长的时间,因为这显然只是安排实际的下载,并且下载和安装都会根据 PC 负载受到严重限制
- 等待过程完成,并在必要时手动重启电脑 - 尝试使用电源菜单中的“更新和重启”通常只会安装已下载的内容,并跳过未下载的内容
- 重启通常会显示之前隐藏的更新,这些更新与刚刚安装的更新无关 - 在至少一次新安装的请求重启后,设置的 WU 面板似乎会停止显示新更新
我想自动执行所有这些步骤,并且如果可能的话,减少重启次数。
到目前为止我尝试过
PSWindowsUpdate
PowerShell 的第三方模块,但它似乎显示不同的可用更新集 - 例如,它建议我安装 Silverlight - 并且它安装的任何内容都不会出现在“查看更新历史记录”列表中。
usoclient.exe
看起来很有希望,但没有官方文档,并且从一些在线人们拼凑一些工作脚本的例子来看,似乎没有可靠的方法来检测何时所有更新都完成安装并且需要重新启动。
答案1
Windows 10 已实现用于安装更新的新命令 - usoclient
。以前的命令WUAUCLT
不再起作用。
您还需要第三方产品来关闭更新并重启 - 关机更新。
以下是以管理员身份使用它的方法:
usoclient ScanInstallWait
usoclient StartInstall
REM Wait 40 mins to allow all the installs to complete
timeout /T 2400
\path\ShutdownWithUpdates.exe /r /f
这种方法有三个问题:
- 目前还不清楚我们需要等待多长时间才能安装更新,因为 40 分钟只是任意的
- 无法知道已安装的更新是否需要进一步更新,因此需要再次运行该脚本一次或多次
- 可能安装了太多可选更新。
参考:
PowerShell 方法以管理员身份使用以下命令:
安装 Windows 更新模块(一次性命令):
Install-Module PSWindowsUpdate
检查并下载最新更新:
Get-WindowsUpdate
安装最新更新:
Install-WindowsUpdate
该方法也存在上述问题 2 和问题 3。