コマンドラインからWindows Updateをインストールする方法


17

コマンドラインからWindowsアップデートをインストールすることはできますか?グラフィカルな更新ツールは、Windows 7ではあまりうまく機能しないようです。時々、うまくいきます。時々、うまくいきません...私の問題は、詳細リストを表示するためにクリックしてもアップデートが表示されないことです。そのため、デフォルトでチェックオフされていない更新がある場合、それらをインストールできません...

だから、それらをインストールする他の方法はありますか?

回答:


12

Windows 7についてはわかりませんが、XP / Vistaでは、次のコマンドを実行してアップデートを検出およびダウンロードできます。

wuauclt /detectnow /reportnow

動作に問題がある場合は、WSUS Wikiをご覧ください。

それ以外の場合、特定の更新プログラムが必要な場合は、Microsoft Webサイトからダウンロードしてください。インストールを妨げる問題がある場合は、Windows Updateのログが対処するのが面倒であるため、これを見つけるのが最善の方法です。


1
リンクはもう有効だとは思わない。
ナタリーアダムス

Windowsの8.1またはWindows Server 2012での私のために動作しません
NUエベレスト

指定したコマンドは、更新プログラムを確認し、更新プログラムの状態をWSUSサーバーに報告します。更新を承認、ダウンロード、またはインストールすることはありません。/ updatenowパラメーターを追加して、利用可能な更新プログラムを強制的にインストールする必要があります。
-duct_tape_coder

また注目すべき、Win10 / 2016年に、wuaucltコマンドはusoclientの賛成で廃止され、参照omgdebugging.com/2017/10/09/...
duct_tape_coder

4

スクリプトを使用して、更新を同期的に確認、ダウンロード、インストールできます。Windows Coreサーバーの手動でのパッチ適用には、このvbscriptの修正版をよく使用します。

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 Update:

www.sysadminsoftware.com/udc.html

ツール(Updates Deployment Commander)は、まさにあなたが求めていることをすることができます。パラメーターを渡して特定のパッチを回避したり、特定のアップデートをターゲットにしたり、完了してからN分後に再起動したり、CSVでレポートを作成したりすることもできます。GUIユーティリティもいくつか付属しています。


2

特に新規インストール後にWindowsオペレーティングシステムにパッチを適用する必要がある場合は、Offline Updaterを真剣に検討してください。

スクリプトを使用して、提案するすべてのパッチ(Win2000、Win XP、Win 2003、Vista、Win2008、Win2012 32および64ビットが適切な場合)、多言語、サービスパック、.NETフレームワーク、およびOfficeパッチ(XP、2000 、2003、2007)。

それらをすべてダウンロードしたら、火曜日にすべてのパッチを更新し、変更のみを取得します。それはカタルージュを取得し、それらは毎日長くなっていますが(OS / Office revごとに多くのメグが今)。

ローカルマシンにファイルをダウンロードしたら、それらのCD / DVDイメージを作成するスクリプトがあります(必要に応じて、OSごとにDVDイメージを自動的に作成します)。

私がしていることは、書き込み保護タブを尊重するSDカードリーダーで、4GBのSDメモリーカードを使用することです。以前は2GBのカードを使用していましたが、Win XPとほとんどのOfficeがその上でビルドできるので、4GBのカードに移りました。

したがって、マシンのトラブルシューティングを行うとき、この以前は書き込み可能なデバイスを信頼できない、ウイルスに感染した可能性のあるマシンに挿入することを信頼します(私はそれについて何も知らないので、感染していると想定します)。

したがって、最初のステップとして最新のパッチを適用できます。

自動実行を使用するか、デバイス(キー、外部HD、CD、DVD、書き込み先)で実行可能ファイルを起動すると、ローカルマシンでWindows Updateサービスを使用してすべての更新を適用するスクリプトが開始されますが、代わりにそれらをダウンロードするためにネットワークを横断するのは、ローカルコピーを使用するだけです。

したがって、WinXPマシンを最新のSPおよびパッチに更新するには1時間以上かかる場合がありますが、途中でネットワークトラフィックがゼロになり、イーサネットケーブルを完全に抜いた状態で実行できます。

驚くほど便利なツール!

AutoUpdateがCDイメージを配布するパッチCDを事前に作成していたように、MicrosoftにMicrosoftしてはいけません。このツールはスクリプトを更新するため、ライセンスを取得したWindowsワークステーションですべてのパッチを入手する必要があります。


1

現在、duffbeer703による回答にコメントを追加することはできませんので、ここでは別の回答として:

The Internet ArchiveにアーカイブされたWSUSwikiへのリンクの最後の「良い」バージョンはこれです。元の回答で指定されたオプションは、このFAQエントリで説明されています。


コメント特権を得るために「少しの」評判ポイントを獲得するのに必要なことを知っていますか?いくつかの(関連する)編集を提案するだけです。彼らが承認されると、あなたはそれらのそれぞれに対して+2担当者を取得します...それを試してみてください!
-Pierre.Vriens

-2

そうは思わないが、Windows Updateを正しく動作させるには、ActiveXとInternet Explorerとのその他の統合が必要です。

Windows 7はまだほとんどリリース候補ではないため、これらの種類のバグを予想する必要があります。

MSDNのメンバーである場合、開発チームに特定のバグを提出するのが賢明かもしれません。


ええ、知っています。既にMSDNにバグを報告しています。それが修正されるまでジャスト)=別の方法を探して
Svish
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.