Назад | Перейти на главную страницу

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

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

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

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

wuauclt /detectnow /reportnow

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

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

Вы можете использовать сценарий для синхронной проверки, загрузки и установки обновлений. Я часто использую модифицированную версию этот 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 обновления, но с некоторыми дополнительными параметрами (хотя и требует, чтобы вы доверяли стороннему коду).

Центр обновления Windows из командной строки:

www.sysadminsoftware.com/udc.html

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

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

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

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

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

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

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

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

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

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

Невероятно полезный инструмент!

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

В настоящее время я не могу добавить комментарий к ответ по duffbeer703, поэтому здесь как отдельный ответ:

Последней "хорошей" версией ссылки на WSUSwiki, заархивированной в Интернет-архиве, является этот. Варианты, указанные в исходном ответе, описаны в этом Запись в FAQ.

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

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

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