Configuration Manager で、できる限り早く更新プログラムを適用する方法について

Last Update:

みなさま、こんにちは。Configuration Manager サポートです。
本ポストでは、Microsoft Endpoint Configuration Manager (以下、Configuration Manager) で更新プログラムを配信する運用をしている中で、可能な限り早く更新プログラムを適用させる方法をご紹介いたします。
OS やアプリケーションにおいては、深刻な脆弱性等が発覚した際に、脆弱性による被害を防ぐために、至急セキュリティ更新プログラムの適用が必要になる場合がございます。
そのとき、Configuration Manager コンソールから、更新プログラムを配信する際に、展開方法を [必須] としても、クライアントが更新プログラムの展開を検知し、ダウンロードおよびインストールするまではある程度時間がかかります。
それは、Configuration Manager クライアントは、基本的に Configuration Manager コンソールにて設定したスケジュールのとおり動作しているためです。

Configuration Manager クライアントが更新プログラムを適用するには、以下の順のとおり、3 つのサイクルの実行が必要となります。

  • ソフトウェア更新プログラムのスキャン サイクル
    ソフトウェアの更新ポイント (WSUS) サーバーに対してスキャンを行い、更新プログラムの必要有無を判断します。このサイクルは、既定で 7 日間隔で実行されます。
  • コンピューター ポリシーの取得および評価サイクル
    SCCM サーバーで設定された更新プログラムの展開を受信します。このサイクルは、既定で 1 時間間隔で実行されます。
  • ソフトウェア更新プログラムの展開評価サイクル
    過去に受信した展開でインストールに失敗した更新プログラムがあれば再評価し、インストールを再試行します。このサイクルは、既定で 7 日間隔で実行されます。

上記サイクルは、コントロール パネルを開き、[システムとセキュリティ] にある [Configuration Manager] をダブルクリックし、[操作] タブより、直ちに開始することができます。

これらのサイクルを手動で開始する場合は、(1) (2) (3) と順番に数分おきに実施いただくと、更新プログラムのダウンロードが始まります。更新プログラムのダウンロード完了したかどうかについては、Configuration Manager クライアントのキャッシュ フォルダー (既定で %windir%\ccmcache) に実行した時刻のフォルダーとファイルが存在するかで確認できます。

なお、通常の運用では、クライアントがネットワークに接続し、Configuration Manager のサーバー (管理ポイント、配布ポイント、ソフトウェアの更新ポイント) と問題なく通信できていれば、時間の経過とともに更新プログラムが適用可能となりますが、お急ぎで更新プログラムを適用させたい場合や長期間オフライン状態であった端末においては、PowerShell スクリプト等で、サイクルを直ちに実行することも可能です。

これからご案内するスクリプトは、以下の動作を実現しております。

  1. [ソフトウェア更新プログラムのスキャン サイクル] を開始する。
  2. 5 分待機
  3. [コンピューター ポリシーの取得および評価サイクル] を開始する。
  4. 5 分待機
  5. [ソフトウェア更新プログラムの展開評価サイクル] を開始する。

以下は、PowerShell スクリプトのサンプルとなります。 サンプルをご利用の際は、お客様環境で、事前に動作確認を行っていただきますようお願いいたします。
PowerShell スクリプト ファイルにして実行する場合は、ファイルの拡張子を .ps1 としていただき、以下のようなコマンドでご実行ください。

powershell.exe -ExecutionPolicy Bypass -File C:\temp\kickoffclientaction.ps1

1
2
3
4
5
((New-Object -comobject cpapplet.cpappletmgr).GetClientActions() | Where-Object {$_.Name -eq 'Updates Source Scan Cycle'}).PerformAction();
Start-Sleep 300
((New-Object -comobject cpapplet.cpappletmgr).GetClientActions() | Where-Object {$_.Name -eq 'Request & Evaluate Machine Policy'}).PerformAction();
Start-Sleep 300
((New-Object -comobject cpapplet.cpappletmgr).GetClientActions() | Where-Object {$_.Name -eq 'Software Updates Assignments Evaluation Cycle'}).PerformAction();

(補足情報)
スクリプトの本文を繰り返して、複数回実行するように追記していただくことも可能です。なお、待機時間につきましても、お客様のご要望に応じて、短く変更していただくことも可能でございます。Start-Sleep の単位は、秒となります。
また、'' で囲まれた部分を以下のように変更することで、今回ご紹介した 3 つのサイクル以外のサイクルの実行をすることも可能です。
今後の運用にお役立ていただけますと幸いでございます。

サイクル名 指定する文字列
アプリケーション展開の評価サイクル Application Global Evaluation Task
コンピューター ポリシーの取得および評価サイクル Request & Evaluate Machine Policy
ソフトウェア インベントリ サイクル Software Inventory Collection Cycle
ソフトウェア更新プログラムのスキャン サイクル Updates Source Scan Cycle
ソフトウェア更新プログラムの展開評価サイクル Software Updates Assignments Evaluation Cycle
ソフトウェア使用状況レポート サイクル Software Metering Usage Report Cycle
ハードウェア インベントリ サイクル Hardware Inventory Collection Cycle
ファイル収集サイクル Standard File Collection Cycle
ユーザー ポリシーの取得および評価サイクル Request & Evaluate User Policy
探索データ収集サイクル Discovery Data Collection Cycle