AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 10122
Accepted
Svish
Svish
Asked: 2009-05-20 13:20:40 +0800 CST2009-05-20 13:20:40 +0800 CST 2009-05-20 13:20:40 +0800 CST

如何从命令行安装 Windows 更新

  • 772

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

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

windows windows-7 windows-update
  • 6 6 个回答
  • 85448 Views

6 个回答

  • Voted
  1. Best Answer
    duffbeer703
    2009-05-20T13:47:23+08:002009-05-20T13:47:23+08:00

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

    wuauclt /detectnow /reportnow
    

    如果您在使用它时遇到问题,请查看WSUS Wiki。

    否则,如果您有想要的特定更新,只需从 Microsoft 网站下载。如果有一些问题阻止您安装,这是最好的找出方法,因为 Windows 更新日志很难处理。

    • 12
  2. Oskar Duveborn
    2009-05-20T16:34:56+08:002009-05-20T16:34:56+08:00

    您可以使用脚本同步检查、下载和安装更新。我经常使用这个 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,但有更多选项(尽管需要您信任第三方代码)。

    • 4
  3. geoffc
    2009-05-20T18:06:53+08:002009-05-20T18:06:53+08:00

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

    它使用脚本来下载您建议的所有补丁(如 Win2000、Win XP、Win 2003、Vista、Win2008、Win2012 32 位和 64 位在适当的情况下)、多语言、服务包、.NET 框架和 Office 补丁(XP、2000 , 2003, 2007)。

    将它们全部下载后,您只需在星期二更新每个补丁,并仅获取更改。尽管它确实获得了目录并且它们每天都在变长(现在每个 OS/Office rev 都有很多兆)。

    一旦你在本地机器上下载了文件,就会有一个脚本来制作它们的 CD/DVD 映像(如果你愿意,它会自动为每个操作系统的 DVD 映像制作)。

    我所做的是在支持写保护标签的 SD 读卡器中使用 4GB SD 存储卡。我曾经使用 2GB 卡,但我几乎无法安装 Win XP 并且现在大多数 Office 都基于它构建,所以我转向了 4GB 卡。

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

    因此,我可以将其作为第一步进行修补。

    如果您使用自动运行,或在设备上启动可执行文件(密钥、外部 HD、CD、DVD,无论您在哪里编写),它都会启动一个脚本,该脚本使用本地计算机上的 Windows 更新服务来应用所有更新,但通过网络下载它们只是使用本地副本。

    因此,将 WinXP 机器更新到最新的 SP 和补丁可能仍需要 1 个多小时,但在此过程中网络流量为零,您可以在完全拔下以太网电缆的情况下完成。

    非常有用的工具!

    不应该与 Microsoft 发生冲突,就像 AutoUpdate 的人一样,他们正在预先构建补丁 CD,分发 CD 映像。这个工具更新脚本,你必须去获得你许可的 Windows 工作站上的所有补丁。

    • 2
  4. sysadmin
    2012-06-15T04:42:59+08:002012-06-15T04:42:59+08:00

    从命令行更新 Windows:

    www.sysadminsoftware.com/udc.html

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

    • 2
  5. Olaf Mandel
    2016-06-01T07:13:18+08:002016-06-01T07:13:18+08:00

    我目前无法通过duffbeer703对答案添加评论,因此这里作为单独的答案:

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

    • 1
  6. WerkkreW
    2009-05-20T13:39:28+08:002009-05-20T13:39:28+08:00

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

    由于 Windows 7 仍然勉强是一个候选版本,因此您应该预料到这些类型的错误。

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

    • -2

相关问题

  • 您最喜欢的云计算提供商是什么?[关闭]

  • Vanilla Powershell 是否足以成为 Windows 和 DB 服务器管理员的语言?

  • 为什么添加新驱动器后我的磁盘驱动器访问速度如此之慢?

  • 在 Windows Server 2003 下使用 wscipt 从 .asp 文件运行 .exe

  • 最佳混合环境(OS X + Windows)备份?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve