Как установить обновления Windows из командной строки

17

Можно ли установить обновления Windows из командной строки? Средство графического обновления не очень хорошо работает в Windows 7. Иногда это происходит, иногда нет ... Моя проблема в том, что я не вижу никаких обновлений, когда нажимаю, чтобы увидеть список подробностей. Поэтому, когда есть обновления, которые не отмечены по умолчанию, я не могу установить их ...

Итак, есть ли другой способ установить их?

Svish
источник

Ответы:

12

Не уверен насчет Windows 7, но с XP / Vista вы можете запустить следующую команду для обнаружения и загрузки обновлений:

wuauclt /detectnow /reportnow

Если у вас возникли проблемы с его работой, ознакомьтесь с WSUS Wiki .

В противном случае, если у вас есть конкретное обновление, которое вы хотите, просто загрузите с веб-сайта Microsoft. Если есть какая-то проблема, мешающая вам установить, это лучший способ выяснить это, потому что журналы Центра обновления Windows очень полезны.

duffbeer703
источник
1
Я не думаю, что эта ссылка больше действительна.
Натали Адамс
У меня не работает на Windows 8.1 или Windows Server 2012.
nu everest
Команда, которую вы дали, проверит наличие обновлений и сообщит о состоянии обновления на сервер WSUS. Он НЕ утверждает, загружает или устанавливает какие-либо обновления. Вам нужно добавить параметр / updatenow, чтобы принудительно установить доступные обновления.
duct_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

Инструмент (Updates Deployment Commander) может сделать то, что вы просите. Вы также можете передать параметры, чтобы избежать определенных исправлений, целевых обновлений, перезагрузки через N минут после завершения, создания отчетов в CSV и т. Д. Он также поставляется с парой утилит GUI.

сисадмин
источник
2

Если вам нужно исправлять операционные системы Windows, особенно после новой установки, серьезно посмотрите на Offline Updater .

Он использует сценарии для загрузки всех предложенных вами исправлений (например, Win2000, Win XP, Win 2003, Vista, Win2008, 32 и 64-разрядной версии Win2012), мультиязычности, пакетов обновлений, каркасов .NET и исправлений Office (XP, 2000). , 2003, 2007).

Как только вы загрузите их все, вы просто обновляете каждый патч во вторник и получаете только изменения. Хотя он получает каталожники, и они становятся длиннее с каждым днем ​​(много мегабайт на ОС / Office rev).

Как только вы загрузите файлы на свой локальный компьютер, появится сценарий для создания образов CD / DVD из них (теперь это будет автоматически для образов DVD для каждой ОС, если хотите).

Что я делаю, так это использую карту памяти SD 4 ГБ в устройстве чтения карт памяти SD, которое поддерживает вкладку защиты от записи. Раньше я использовал карты 2 ГБ, но я едва мог приспособить Win XP, и большая часть Office теперь основывается на нем, поэтому я перешел на карты 4 ГБ.

Таким образом, при поиске и устранении неисправностей компьютера я доверяю установку этого ранее доступного для записи устройства на ненадежную, возможно зараженную вирусом машину (поскольку я ничего не знаю об этом, я предполагаю, что она заражена), зная, что мое устройство защищено от записи.

Таким образом, я могу исправить это в качестве первого шага.

Если вы используете автозапуск или запускаете исполняемый файл на устройстве (ключ, внешний HD, CD, DVD, где бы вы его не написали), он запускает сценарий, который использует службу Центра обновления Windows на локальном компьютере, чтобы применить все обновления, но вместо этого идти через провод, чтобы загрузить их, он просто использует локальную копию.

Таким образом, все еще может потребоваться более 1 часа для обновления машины WinXP до последней версии SP и исправлений, но сетевой трафик на этом пути нулевой, и вы можете сделать это с полностью отключенным кабелем Ethernet.

Удивительно полезный инструмент!

Не должно идти вразрез с Microsoft, как ребята из AutoUpdate, которые предварительно создавали патч-диск, который распространял образ компакт-диска. Этот инструмент обновляет сценарии, и вы должны получить все исправления на вашей лицензированной рабочей станции Windows.

geoffc
источник
1

Я не могу себе добавить комментарий к ответу по duffbeer703 , так вот как отдельный ответ:

Последний «хороший» вариант ссылки на WSUSwiki в архиве на The Internet Archive является это . Параметры, приведенные в исходном ответе, описаны в этом разделе часто задаваемых вопросов .

Олаф Мандель
источник
Знаете ли вы о том, что нужно, чтобы заработать «немного» очков репутации, чтобы получить право комментирования? Просто предложите некоторые (соответствующие) изменения. если они получат одобрение, вы получите +2 повторения для каждого из них ... попробуйте!
Pierre.Vriens
-2

Я не верю, что для правильной работы Центра обновления Windows требуется ActiveX и другая интеграция с Internet Explorer.

Поскольку Windows 7 по-прежнему едва ли является кандидатом на релиз, следует ожидать подобных ошибок.

Возможно, будет мудро сообщить о вашей конкретной ошибке команде разработчиков, если вы являетесь участником MSDN.

WerkkreW
источник
Да, знаю. Уже подали ошибку на MSDN. Просто ищу альтернативный метод, пока он не будет исправлен =)
Свиш