如何从命令行安装Windows更新


17

是否可以从命令行安装Windows更新?图形更新工具在Windows 7中似乎不能很好地工作。有时可以,有时却不能...我的问题是,单击查看详细信息列表时看不到任何更新。因此,当有默认情况下未选中的更新时,我将无法安装它们。

那么,还有其他方法可以安装那些软件吗?

Answers:


12

不确定Windows 7,但对于XP / Vista,可以运行以下命令来检测和下载更新:

wuauclt /detectnow /reportnow

如果您无法正常运行,请查看WSUS Wiki

否则,如果您需要特定的更新,只需从Microsoft网站下载即可。如果存在阻止您安装的问题,那么这是找出问题的最佳方法,因为Windows Update日志令人讨厌。


1
我认为该链接不再有效。
Natalie Adams

在Windows 8.1或Windows Server 2012上对我不起作用。
nueverest,2016年

您提供的命令将检查更新并将更新状态报告给WSUS服务器。它不批准,下载或安装任何更新。您需要添加/ updatenow参数以强制安装可用更新。
pipe_tape_coder

另外值得注意的是,在Win10 / 2016年,wuauclt命令赞成usoclient的过时,见omgdebugging.com/2017/10/09/...
duct_tape_coder

4

您可以使用脚本来同步检查,下载和安装更新。我经常使用此vbscript的修改版本来手动修补Windows Core服务器。

Set updateSession = CreateObject("Microsoft.Update.Session")
updateSession.ClientApplicationID = "MSDN Sample Script"

Set updateSearcher = updateSession.CreateUpdateSearcher()

WScript.Echo "Searching for updates..." & vbCRLF

Set searchResult = _
updateSearcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0")

WScript.Echo "List of applicable items on the machine:"

For I = 0 To searchResult.Updates.Count-1
    Set update = searchResult.Updates.Item(I)
    WScript.Echo I + 1 & "> " & update.Title
Next

If searchResult.Updates.Count = 0 Then
    WScript.Echo "There are no applicable updates."
    WScript.Quit
End If

WScript.Echo vbCRLF & "Creating collection of updates to download:"

Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")

For I = 0 to searchResult.Updates.Count-1
    Set update = searchResult.Updates.Item(I)
    addThisUpdate = false
    If update.InstallationBehavior.CanRequestUserInput = true Then
        WScript.Echo I + 1 & "> skipping: " & update.Title & _
        " because it requires user input"
    Else
        If update.EulaAccepted = false Then
            WScript.Echo I + 1 & "> note: " & update.Title & _
            " has a license agreement that must be accepted:"
            WScript.Echo update.EulaText
            WScript.Echo "Do you accept this license agreement? (Y/N)"
            strInput = WScript.StdIn.Readline
            WScript.Echo 
            If (strInput = "Y" or strInput = "y") Then
                update.AcceptEula()
                addThisUpdate = true
            Else
                WScript.Echo I + 1 & "> skipping: " & update.Title & _
                " because the license agreement was declined"
            End If
        Else
            addThisUpdate = true
        End If
    End If
    If addThisUpdate = true Then
        WScript.Echo I + 1 & "> adding: " & update.Title 
        updatesToDownload.Add(update)
    End If
Next

If updatesToDownload.Count = 0 Then
    WScript.Echo "All applicable updates were skipped."
    WScript.Quit
End If

WScript.Echo vbCRLF & "Downloading updates..."

Set downloader = updateSession.CreateUpdateDownloader() 
downloader.Updates = updatesToDownload
downloader.Download()

Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")

rebootMayBeRequired = false

WScript.Echo vbCRLF & "Successfully downloaded updates:"

For I = 0 To searchResult.Updates.Count-1
    set update = searchResult.Updates.Item(I)
    If update.IsDownloaded = true Then
        WScript.Echo I + 1 & "> " & update.Title 
        updatesToInstall.Add(update) 
        If update.InstallationBehavior.RebootBehavior > 0 Then
            rebootMayBeRequired = true
        End If
    End If
Next

If updatesToInstall.Count = 0 Then
    WScript.Echo "No updates were successfully downloaded."
    WScript.Quit
End If

If rebootMayBeRequired = true Then
    WScript.Echo vbCRLF & "These updates may require a reboot."
End If

WScript.Echo  vbCRLF & "Would you like to install updates now? (Y/N)"
strInput = WScript.StdIn.Readline
WScript.Echo 

If (strInput = "Y" or strInput = "y") Then
    WScript.Echo "Installing updates..."
    Set installer = updateSession.CreateUpdateInstaller()
    installer.Updates = updatesToInstall
    Set installationResult = installer.Install()

    'Output results of install
    WScript.Echo "Installation Result: " & _
    installationResult.ResultCode 
    WScript.Echo "Reboot Required: " & _ 
    installationResult.RebootRequired & vbCRLF 
    WScript.Echo "Listing of updates installed " & _
    "and individual installation results:" 

    For I = 0 to updatesToInstall.Count - 1
        WScript.Echo I + 1 & "> " & _
        updatesToInstall.Item(i).Title & _
        ": " & installationResult.GetUpdateResult(i).ResultCode   
    Next
End If

这样做似乎很吸引人,但是我当然没有在Windows 7下对其进行过测试。如果需要的话,还有指向另一篇文章的链接,该文章用于定位特定的更新。

还有一个Powershell模块,可以提供类似的体验。

快速浏览后,我还发现该第三方应用程序也使用了更新API,但具有更多选项(尽管需要您信任第三方代码)。


2

从命令行进行Windows更新:

www.sysadminsoftware.com/udc.html

该工具(更新部署指挥官)可以满足您的要求。您还可以传递参数来避免某些补丁,定位特定的更新,在完成后N分钟重启,以CSV创建报告等。它还附带了几个GUI实用程序。


2

如果您必须打补丁Windows操作系统,尤其是在全新安装后,请认真查看Offline Updater

它使用脚本来下载您建议的所有修补程序(因此酌情选择Win2000,Win XP,Win 2003,Vista,Win2008,Win2012 32和64位),多语言,Service Pack,.NET框架和Office修补程序(XP,2000 ,2003,2007)。

将它们全部下载后,只需在星期二更新每个补丁,然后仅获取更改。尽管它确实会引起轰动,并且它们每天都在变长(每个OS / Office版本现在有很多兆)。

一旦下载了本地计算机上的文件,就会有一个脚本来制作它们的CD / DVD映像(如果需要,它将自动针对每个OS的DVD映像自动生成CD / DVD映像)。

我要做的是在SD卡读卡器中使用4GB SD存储卡,该读卡器具有写保护选项卡。我曾经使用2GB的卡,但是我几乎无法容纳Win XP,并且现在大多数Office都基于它构建,因此我转向了4GB的卡。

因此,在对机器进行故障排除时,我相信将这个以前可写的设备插入到不受信任的,可能是受病毒感染的机器中(因为我对此一无所知,因此我假设它已被感染),并且知道我的设备已被写保护。

因此,我可以将其更新为第一步。

如果您使用自动运行,或在设备(密钥,外部HD,CD,DVD,无论您在何处写入)上启动可执行文件,它将启动一个脚本,该脚本使用本地计算机上的Windows Update服务来应用所有更新,但是只需下载本地副本即可。

因此,将WinXP计算机更新到最新的SP和修补程序可能仍需要1个多小时,但是在此过程中网络流量为零,您可以在完全拔掉以太网电缆的情况下进行操作。

非常有用的工具!

不应该像Microsoft那样,像AutoUpdate的家伙那样运行Microsoft,他们正在预先构建补丁CD,该补丁CD分发了CD映像。此工具将更新脚本,并且您必须在许可的Windows工作站上获取所有补丁。


1

我目前不能添加评论的答案duffbeer703,所以在这里作为一个单独的答案:

Internet存档中存档的WSUSwiki链接的最后一个“良好”版本是this。原始答案中给出的选项在此FAQ条目中进行了描述。


您是否知道获得“一点点”的声誉点才能获得评论特权?只是建议一些(相关的)编辑。如果他们获得批准,您将为每个人获得+2代表...试试吧!
Pierre.Vriens '16

-2

我不这么认为,Windows Update需要一些ActiveX以及与Internet Explorer的其他集成才能正常工作。

由于Windows 7仍不是候选版本,因此您应该预料到这些错误。

如果您是MSDN的成员,将您遇到的特定错误提交给开发团队可能是明智的。


是的,我知道。已经在MSDN上提交了一个错误。只是在寻找一种替代方法,直到它被修复=)
Svish
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.