web-dev-qa-db-ja.com

WindowsUpdateがインストールされているかどうかを確認します

ワークステーションにソフトウェアをリモートインストールするためにITサポート部門が使用するPowerShellスクリプトがあります。このスクリプトは、複数の製品のインストールを(次々に)サポートしているため、実行に時間がかかる可能性があります。

昨日、技術者はスクリプトを使用して、数日間電源がオフになっていたマシンに複数のソフトウェア製品をリモートでインストールしました。

すべてのワークステーションを対象としたWindowsUpdate GPOがあり、毎週水曜日の午後9時に更新プログラムをインストールするように構成されています。ワークステーションがこのスケジュールされたインストール日を逃した場合、更新プログラムは60分後にインストールされます。次に、マシンの電源がオンになります。

技術者がリモートワークステーションに対してソフトウェアをインストールしているときに、Windows Updateの再スケジュールが開始されました。したがって、技術者のインストールとWindowsUpdateの両方が同時にインストールされていました。これにより、彼がインストールしていた製品(SQL Server Management Studio)がクラッシュしました。

スクリプトを変更して、WindowsUpdateが現在インストールされているかどうかを確認したいと思います。はいの場合は、技術者に警告し、スクリプトを中止します。いいえの場合は、Windows Updateサービス(wuauserv)を停止して無効にします。これにより、スクリプトの使用中にサービスが開始される可能性がなくなり、スクリプトが最後に達したときにサービスを開始して再度有効にします。

WindowsUpdateが現在インストールされているかどうかを確認するための堅牢な方法が見つかりません。

どんな提案も歓迎します。オブジェクト、コマンドラインツール、WMIを使用したり、レジストリを読み取ったりできてうれしいです...

PDATE 1. 06/04/13:私が望んでいたのは、WindowsUpdateサービスのステータスを照会する何らかの方法です。アップデートが現在インストールされている場合、アップデートがインストールされているという事実を尊重し、技術者に後で戻ってくるようにアドバイスすることをお勧めします。現在、次のシナリオでwuauservサービスを停止した場合の影響を判断するためにいくつかのテストを実施しています。

  1. アップデートがインストールされる前にサービスを停止します。
  2. アップデートのインストール中にサービスを停止します。

PDATE 2. 06/04/13: Windows 7 VMが数日間オンになっていないため、模倣することができました。先日、技術者が直面した状況。スナップショットを利用して、さまざまなテストを実施することができました。

GPO Windows Update設定を担当するように変更し、ワークステーションの電源を入れてから再スケジュール時間を60分から10分に短縮したことを指摘しておく必要があります(テストを少し簡単にするため)。

テスト1)アップデートがインストールされる前にwuauservサービスを停止しました。

アップデートは12:40にインストールされる予定でした。

PowerShellを使用してリモートでwuauservを停止します。 WindowsUpdate.logを調整していたところ、次のように表示されました。

2013-04-06      12:36:00:287     984    e68     Service *********
2013-04-06      12:36:00:287     984    e68     Service **  END  **  Service: Service exit [Exit code = 0x240001]
2013-04-06      12:36:00:287     984    e68     Service *************

なんらかの魔法でサービスが再開できた場合に備えて、12.40まで待ちました。それはしませんでした。

サービスを開始すると、WindowsUpdate.logに次のように書き込まれ、サービスが再開されたことを確認しました。

2013-04-06    12:42:07:571     984    e70    Misc    ===========  Logging initialized (build: 7.6.7600.256, tz: +0100)  ===========
2013-04-06    12:42:07:571     984    e70    Misc      = Process: C:\Windows\system32\svchost.exe
2013-04-06    12:42:07:571     984    e70    Misc      = Module: c:\windows\system32\wuaueng.dll
2013-04-06    12:42:07:571     984    e70    Service    *************
2013-04-06    12:42:07:571     984    e70    Service    ** START **  Service: Service startup
2013-04-06    12:42:07:571     984    e70    Service    *********

ログはまた、10分の再スケジュールが再び適用されたことを確認しました。

Success    Content Install    Installation Ready: The following updates are downloaded and ready for installation. This computer is currently scheduled to install these updates on 06 April 2013 at 12:52

テスト2)アップデートのインストール中にwuauservサービスを停止しました

これは、サービスを停止する直前のWindowsUpdate.logの抜粋です。

2013-04-06      13:25:00:372    1004    4dc     DnldMgr Preparing update for install, updateId = {F13298D7-7EC1-4D33-9A57-A367F54BA4DA}.106.
2013-04-06      13:25:00:372    3472    790     Handler :::::::::::::
2013-04-06      13:25:00:372    3472    790     Handler :: START ::  Handler: CBS Install
2013-04-06      13:25:00:372    3472    790     Handler :::::::::
2013-04-06      13:25:00:372    3472    790     Handler Starting install of CBS update F13298D7-7EC1-4D33-9A57-A367F54BA4DA
2013-04-06      13:25:00:419    3472    790     Handler CBS package identity: Package_for_KB2698365~31bf3856ad364e35~AMD64~~6.1.1.2
2013-04-06      13:25:00:434    3472    790     Handler Installing self-contained with source=C:\Windows\SoftwareDistribution\Download\8fff2597df465a2957121c20dbd4bcec\windows6.1-kb2698365-x64.cab, workingdir=C:\Windows\SoftwareDistribution\Download\8fff2597df465a2957121c20dbd4bcec\inst

これは私がサービスを停止したときに記録されたものです:

2013-04-06      13:25:19:957    3472    3e4     Handler CUHCbsHandler::Cancel called with fReleaseThreadNow=0
2013-04-06      13:25:19:957    1004    ed0     AU      ###########  AU: Uninitializing Automatic Updates  ###########
2013-04-06      13:25:19:973    3472    3e4     Handler CUHCbsHandler::Cancel called with fReleaseThreadNow=1
2013-04-06      13:25:19:973    3472    790     Handler WARNING: CBS handler has been told to exit immediately.
2013-04-06      13:25:19:973    3472    790     Handler FATAL: Completed install of CBS update with type=2, requiresReboot=0, installerError=0, hr=0x80242008
2013-04-06      13:25:19:973    3472    790     Handler :::::::::
2013-04-06      13:25:19:973    3472    790     Handler ::  END  ::  Handler: CBS Install
2013-04-06      13:25:19:973    3472    790     Handler :::::::::::::
2013-04-06      13:25:19:988    1004    4dc     Agent     * WARNING: Exit code = 0x8024000B
2013-04-06      13:25:19:988    1004    4dc     Agent   *********
2013-04-06      13:25:19:988    1004    4dc     Agent   **  END  **  Agent: Installing updates [CallerId = AutomaticUpdates]
2013-04-06      13:25:19:988    1004    4dc     Agent   *************
2013-04-06      13:25:19:988    1004    4dc     Agent   WARNING: WU client failed installing updates with error 0x8024000b
2013-04-06      13:25:20:004    1004    ed0     Report  REPORT EVENT: {72199C19-359E-4D78-A075-4EAA44C368D9}    2013-04-06 13:25:19:973+0100  1186     101     {D5FD720E-0F2C-4363-AA87-6AD4A6D11B0E}  106     8024000b        AutomaticUpdates        Success Content Install User cancelled the installation.
2013-04-06      13:25:20:035    1004    ed0     Report  CWERReporter::HandleEvents - WER report upload completed with status 0x8
2013-04-06      13:25:20:035    1004    ed0     Report  WER Report sent: 7.6.7600.256 0x8024000b D5FD720E-0F2C-4363-AA87-6AD4A6D11B0E Install 101 Managed
2013-04-06      13:25:20:035    1004    ed0     Report  CWERReporter finishing event handling. (00000000)
2013-04-06      13:25:20:160    1004    ed0     Service *********
2013-04-06      13:25:20:160    1004    ed0     Service **  END  **  Service: Service exit [Exit code = 0x240001]
2013-04-06      13:25:20:160    1004    ed0     Service *************

ご覧のとおり、現在インストールされている更新がキャンセルされたことが記録されています。

行われていたインストールが優雅にキャンセルされたことを願っていますか?しかし、その答えはよくわかりません... Windiws Updateの大部分はMSIを使用しているため、ファイルとレジストリの変更をロールバックしてワークステーションを安定した状態に保つ機能を使用することを望んでいます。

2
Fitzroy

ネットストップwuauserv

実行されているかどうかは関係ありません。このコマンドが完了した後は関係ありません。

スクリプトが完了したら

ネットスタートwuauserv

1
cybernard

あなたとAthomSfereがハッシュアウトしたので、インストールの途中でこれらのプロセスを強制終了することはお勧めしません。ただし、Windowsで検索する主な2つのインストール名がmsiexec.exesetup.exeであるため、PowerShellスクリプトでそれらを検索できます。これらのプロセスが実行されている場合は、スクリプトが実行されているループを作成します。それらの両方が閉じられるまでスリープします。 (擬似コード)のようなもの:

while($(get-process -like msiexec.exe).count -gt 1 -or $(get-process -like setup.exe).count -gt 1){
    sleep 300
}

インストールされた更新が再起動を必要とする可能性があるため、このソリューションを部分的にのみお勧めします。再起動が必要な場合、再起動が保留されているとスクリプトがインストールされたソフトウェアがインストールされないため、とにかく失敗するのに最適な嵐です。 。

理想的には、ソフトウェアの展開にsccmのようなものを活用するのに十分な大きさのインフラストラクチャがある場合および Windows Updateはそれが必要であり、最終的にはそれらの競合を防ぎます(少なくとも私の経験のソフトウェアとインストールされた更新から) sccmからは競合しません。同時にではなく、連続してインストールされます)。

1
MDMoore313

私は現在、名前を確認するためにドメインマシンを使用していませんが、これを処理する方法は次のとおりです。

実行中のプロセスを探します。

  1. msiexec.exe
  2. Setup.exe
  3. SCCMプロセス-正確な名前を忘れてしまいました。
  4. SMSプロセス-名前も忘れてしまった、殺す

実行中の最初の2つ(およびもう1つはCompanyNameSetup.exe)をチェックして、現在のインストールがあるかどうかを確認します。そうでない場合は、SCCMおよびSMSプロセスを強制終了して、新しいインストールをプッシュできないようにします。

インストールを実行してから再起動するか、SCCMおよびSMSプロセス/サービスを再起動します。

以下のコメントの後:私はこれがpsuedoのルートになると思います:

while (msiexec.exe isRunning OR Setup.EXE isRunning)
{wait for completion}
net stop wuauserv  #Prevent installs
taskkill /im Wuauclt.exe /f  #Kill an empty Wuauclt.exe

次に、スクリプトを呼び出すことができます。インストールが完了したら、呼び出すだけです。

net start wuauserv  #Start WSUS service
1
Austin T French