普段、何気に利用しているWindows Update。適用する時間や日付を指定するとなると
少しか面倒です。
Windows 2012 R2でWindows Updateのタスクを自動で実行する仕組みを設定した時に色々と困りました。
Windows Updateを制御するコマンドは、一般的に「wuauclt.exe」が知られています。
WSUSより更新プログラムを即反映させるために「/DetectNow」のオプションが有ります。この引数は
有名で検索すれば色々と出てきます。このコマンドで更新プログラムが確認できても自動で適用はされ
ません。
更新プログラムを自動で適用するにはグループポリシー(ローカルポリシー)の設定も必要になります。
[コンピュータの構成]->[管理テンプレート]->[Windowsコンポーネント]->[Windows Update]にある
「自動更新を構成する」を設定します。
「自動更新の構成」には2~4の選択があり、
2:ダウンロードをインストールを通知
3:自動ダウンロードしてインストールを通知
4:自動ダウンロードしてインストール日時を指定
5.ローカルの管理者の設定選択を許可
となっています。ダウンロードもインストールも自動で行う場合、必然的に「4」を選択することになります。
「4」を選ぶとインストールする日と時間が選択できるのですが、選択できる日が毎日か日~月と適用する時間だけで
日付は指定できず、「4」にしておかないと自動でインストールもしてくれません。
例えば、「毎月20日にWindows Updateを自動で適用したい」場合、WSUS側できちんと制御すれば
対応できると思うのですが、特定のサーバ類だけとなると、設定が・・・。
システムによっては予めWindows Updateを検証してから本番適用が必要場場合があり、なかなか要件を
満たすことが出来ません。
タスクスケジューラの「Windows Update」に「AUScheduledInstall」のタスクが登録されているのを
ご存知でしょうか。このタスクの説明に
「スケジュールされている更新プログラムのインストールをコンピューターで開始します」とあります。
このタスクですが、先程のポリシーと大きく関わっており、「4」選択すると利用できます。ポリシーを
設定せずに手動で呼び出してみたのですが、うまく動きません。
wuauclt.exeの引数として「/UpdateNow」が有るのをご存知でしょうか。
この引数ですが、先程のポリシー設定とタスクと連動していい感じにWindows Updateを実行してくれます。
今回はこのコマンドを利用してWindows Updateの処理を任意の時間で自動に処理する設定にしました。
このコマンドを利用してWindows Updateを適用する場合、次の注意が必要です。
1.Windows Updateのサービスは無効にする。
デフォルトでこのサービスは「手動」になっています。ポリシーの設定を「4」にしていると
その時間になるとWindows Updateが実行されてしまい、予期せぬ結果を招きます。
2.そもそも、処理させるのがちょっと面倒。
無効にしているサービスを手動変更(コマンド)し、/DetectNowを実行してアップデートをチェックし
/UpdateNowを実行してアップデートをインストールし、その後に再起動。OSが起動してくると
サービスを手動から無効に変更。
一連の流れを組み込む必要があります。
対象のサーバが1台だけだとタスクを駆使して対応できるのですが、台数が多いとメンテナンスが大変
です。そうなるとやはりスクリプト(VBScriptやPowerShell等)を作る必要があります。
スクリプトで対応するとき、次のことを考える必要があります。
1.WindowsUpdateサービスを手動に変更する時間
2.wuauclt /DetectNow を実行する時間
3.再起動を実行する時間
4.WindowsUpdateサービスを無効に変更する時間
今回はPowerShellでこれらの処理を作成し、自動で任意のタイミングでWindows Updateを自動で
処理できるように組み込みました。
Windows 2008R2の時とWindows 2012R2ではなんとなく仕様が変更になっているような気がします。
そもそも、好きなタイミングで「AUScheduledInstall」のタスクを実行できる方法が探し出せれば
苦労することもなかったのですが・・・。
少しか面倒です。
Windows 2012 R2でWindows Updateのタスクを自動で実行する仕組みを設定した時に色々と困りました。
Windows Updateを制御するコマンドは、一般的に「wuauclt.exe」が知られています。
WSUSより更新プログラムを即反映させるために「/DetectNow」のオプションが有ります。この引数は
有名で検索すれば色々と出てきます。このコマンドで更新プログラムが確認できても自動で適用はされ
ません。
更新プログラムを自動で適用するにはグループポリシー(ローカルポリシー)の設定も必要になります。
[コンピュータの構成]->[管理テンプレート]->[Windowsコンポーネント]->[Windows Update]にある
「自動更新を構成する」を設定します。
「自動更新の構成」には2~4の選択があり、
2:ダウンロードをインストールを通知
3:自動ダウンロードしてインストールを通知
4:自動ダウンロードしてインストール日時を指定
5.ローカルの管理者の設定選択を許可
となっています。ダウンロードもインストールも自動で行う場合、必然的に「4」を選択することになります。
「4」を選ぶとインストールする日と時間が選択できるのですが、選択できる日が毎日か日~月と適用する時間だけで
日付は指定できず、「4」にしておかないと自動でインストールもしてくれません。
例えば、「毎月20日にWindows Updateを自動で適用したい」場合、WSUS側できちんと制御すれば
対応できると思うのですが、特定のサーバ類だけとなると、設定が・・・。
システムによっては予めWindows Updateを検証してから本番適用が必要場場合があり、なかなか要件を
満たすことが出来ません。
タスクスケジューラの「Windows Update」に「AUScheduledInstall」のタスクが登録されているのを
ご存知でしょうか。このタスクの説明に
「スケジュールされている更新プログラムのインストールをコンピューターで開始します」とあります。
このタスクですが、先程のポリシーと大きく関わっており、「4」選択すると利用できます。ポリシーを
設定せずに手動で呼び出してみたのですが、うまく動きません。
wuauclt.exeの引数として「/UpdateNow」が有るのをご存知でしょうか。
この引数ですが、先程のポリシー設定とタスクと連動していい感じにWindows Updateを実行してくれます。
今回はこのコマンドを利用してWindows Updateの処理を任意の時間で自動に処理する設定にしました。
このコマンドを利用してWindows Updateを適用する場合、次の注意が必要です。
1.Windows Updateのサービスは無効にする。
デフォルトでこのサービスは「手動」になっています。ポリシーの設定を「4」にしていると
その時間になるとWindows Updateが実行されてしまい、予期せぬ結果を招きます。
2.そもそも、処理させるのがちょっと面倒。
無効にしているサービスを手動変更(コマンド)し、/DetectNowを実行してアップデートをチェックし
/UpdateNowを実行してアップデートをインストールし、その後に再起動。OSが起動してくると
サービスを手動から無効に変更。
一連の流れを組み込む必要があります。
対象のサーバが1台だけだとタスクを駆使して対応できるのですが、台数が多いとメンテナンスが大変
です。そうなるとやはりスクリプト(VBScriptやPowerShell等)を作る必要があります。
スクリプトで対応するとき、次のことを考える必要があります。
1.WindowsUpdateサービスを手動に変更する時間
2.wuauclt /DetectNow を実行する時間
3.再起動を実行する時間
4.WindowsUpdateサービスを無効に変更する時間
今回はPowerShellでこれらの処理を作成し、自動で任意のタイミングでWindows Updateを自動で
処理できるように組み込みました。
Windows 2008R2の時とWindows 2012R2ではなんとなく仕様が変更になっているような気がします。
そもそも、好きなタイミングで「AUScheduledInstall」のタスクを実行できる方法が探し出せれば
苦労することもなかったのですが・・・。