リモートデスクトップを使わずリモートでWindowsUpdate(パッチ適用)を実行する方法

スポンサーリンク




ネトエンの仕事の話

Windowsサーバの管理者はセキュリティ向上のため、毎月WindowsUpdateを行わなければいけません。
通常はメンテナンス対象サーバにリモートデスクトップ(RDP)してWindowsUpdateを実行しますが、毎回RDP接続するのが面倒なのでリモートから実行できないかと思い試しました。

この記事では、

  • WindowsUpdateの度にリモートデスクトップするのが面倒
  • リモートホストからWindowsUpdateを実行したい

こんな方に読んでもらいたいです。

スポンサーリンク

リモートWindowsUpdateのやり方

管理者が操作するコンピュータを接続元ホスト
実際にWindowsUpdateでパッチを適用したいコンピュータを接続先ホストと表現します。

接続元ホスト
接続元ホスト

作業時に操作するコンピュータ

接続先ホスト
接続先ホスト

実際にWindowsUpdateするコンピュータ

この方法は事前に接続先ホストで設定が必要になります。
まずはやり方を説明するのでイメージと合っているか確認してください。

接続元ホストでコマンドプロンプトを開いてコマンドを実行する

接続元ホスト
接続元ホスト

WindowsUpdateを開始するコマンド

schtasks /Run /S 192.168.50.217 /U Admin /P Adminpass /TN sample

コマンドが成功すると下記メッセージが表示される。

成功:スケジュール タスク"sample"の実行が試行されました。

接続先ホストでは、コマンドプロンプトが表示されてWindowsUpdateの処理ログが流れます。

接続先ホスト
接続先ホスト

自動でWindowsUpdate処理が開始される

2022/06/14 11:01:08.505 [INFO] Autoexec Disabled.
2022/06/14 11:01:09.474 --- Running Windows Update ---
2022/06/14 11:01:09.490 Searching for updates...
2022/06/14 11:01:10.091 Full Update
~中略~
2022/06/14 11:03:41.507 =-=-=-=-=- Windows Update finished -=-=-=-=-=
接続元ホスト
接続元ホスト

処理状況を確認するコマンド

schtasks /Query /S 192.168.50.217 /U Admin /P Adminpass /V /FO list /TN sample

表示される結果※一部抜粋

状態:         準備完了←準備完了は処理が終わっている
前回の実行時刻:2022/06/14 20:26:34
前回の結果:   0←0は正常終了

リモートでのWindowsUpdateの処理は以上になります。

接続元ホストから1行コマンドを実行するだけで接続先ホストのWindowsUpdateを実行する事ができました。これでリモートデスクトップやWindowsUpdate画面を開く手間を省くことができます。

この方法を試すには接続先ホストでいくつか設定が必要なので次の項目を確認してください。

事前に必要な設定

接続先ホストでは6つの設定が必要になります。

  • WindowsUpdateを行うプログラムファイルをダウンロード ←PowerShellに1行コピペ
  • プログラムファイルを実行するコマンドを作成 ←コピペでファイルを1つ作る
  • コマンドを実行するタスクを作成 ←コマンドプロンプトに1行コピペ
  • アカウントの制限を解除 ←ファイル名を指定して実行で画面を開いて2クリック操作
  • リモート接続で特権権限を使える設定 ←コマンドプロンプトに1行コピペ
  • リモート接続用のFWを解除 ←コマンドプロンプトに1行コピペ

全て1〜2ステップなので簡単にできます。

接続先ホスト
接続先ホスト

ここからの設定は全て接続先ホストで行ってください。

WindowsUpdateを行うプログラムファイルをダウンロードを取得

管理者権限でPowerShellを開いて下記コマンドを実行します。

Windows PowerShellの開き方
[Windowsキー+R]で「ファイル名を指定して実行」画面を開き「powershell」と入力して[Ctrl+Shift+Enter]で実行します。
[Ctrl+Shift+Enter]で実行すると管理者権限で起動されます。

if(-not (Test-Path C:\WindowsUpdate)){ md C:\WindowsUpdate } Invoke-WebRequest https://raw.githubusercontent.com/MuraAtVwnet/WindowsUpdate/master/AutoWindowsUpdate.ps1 -OutFile C:\WindowsUpdate\AutoWindowsUpdate.ps1

https://www.vwnet.jp/Windows/PowerShell/FullAutoWU.htm

上のコマンドを実行したら「C:\WindowsUpdate」を開いて「AutoWindowsUpdate.ps1」がある事を確認します。
インターネットに接続していないと失敗するので、失敗する場合はインターネットに接続できるPCでダウンロードしてから接続先ホストにコピーしてください。

プログラムファイルを実行するコマンドを作成

下記内容をコピペしてメモ帳に貼り付けてください。

rem
cls
@echo off
powershell -NoLogo -NoProfile -ExecutionPolicy RemoteSigned -File "C:\WindowsUpdate\AutoWindowsUpdate.ps1" Full

保存する場所を「C:\WindowsUpdate」ファイル名を「Launch.cmd」にして保存すれば完了です。

この設定は「AutoWindowsUpdate.ps1」を実行する為のコマンドファイルになります。
通常ファイル名の最後が.ps1になっているファイルは実行されないような設定になっていますが、「-ExecutionPolicy RemoteSigned」で一時的に実行可能にする設定にしています。

コマンドを実行するタスクを作成

管理者権限でコマンドプロンプトを開いて下記コマンドを実行してください。

schtasks /Create /TN sample /SC ONCE /SD 1900/01/01 /ST 00:00 /RL highest /TR C:\WindowsUpdate\Launch.cmd

成功すると、

警告: /ST が現時刻よりも早いため、タスクは実行されない可能性があります。
成功: スケジュール タスク "sample" は正しく作成されました。

が表示されます。

また、タスクスケジューラのタスクスケジューラライブラリに「sample」が表示されます。

タスクスケジューラの開き方
[Windowsキー+R]で「ファイル名を指定して実行」画面を開き「taskschd.msc」を入力してOKを押す

タスクスケジューラ画面

コマンドファイル「Launch.cmd」はリモートでは操作ができませんが、タスクスケジューラという機能はリモートで操作ができます。
なので「Launch.cmd」をタスクスケジューラに登録して、リモートで「Launch.cmd」の登録されているタスクを実行するような方法をとります。
タスクスケジューラは、日付や時間を指定する事で好きな時間にファイルを実行するWindowsの標準機能です。
今回は実行日を過去の日付に設定する事で勝手に起動はしないようにします。その代わりにコマンドによって強制的に実行します。

アカウントの制限を解除

この設定は接続先ホストでコマンドテスト実行する場合に必要になります。

[Windowsキー+R]で「ファイル名を指定して実行」画面を開き「UserAccountControlSettings」を入力してOKを押します。

ユーザーアカウント制御の設定画面が開いたら、操作バーを一番したの「通知しない」に移動させてOKを押します。

ユーザーアカウント制御の設定画面

この設定はコンピュータに変更を加える操作が行われた時の対処を選択します。
デフォルトでは画面を表示して「はい・いいえ」で判断させる状態になっています。
今回はコマンドで実行して判断画面は出したくないので通知しないように設定を変更します。

ここまで設定すれば一度接続先ホスト自身でコマンドを使ってタスクを動かしてみます。

接続先ホスト
接続先ホスト
schtasks /Run /TN sample

設定が問題なくできていれば、冒頭に説明した通り新しいコマンドプロンプトの画面が開き、処理のログが表示されます。
ちなみに接続元ホストで実行するコマンドとは少し違うので注意してください。

リモートユーザに特権権限を与える

接続先ホストで管理者権限でコマンドプロンプトを開いて下記コマンドを実行します。

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

成功した場合は、

この操作を正しく終了しました。

が表示されます。

通信に使うWindowsFWを解除

接続先ホストで管理者権限でコマンドプロンプトを開いて下記コマンドを実行します。

netsh advfirewall firewall set rule group="スケジュールされたリモート タスク管理" new enable=yes

成功した場合は、

4 規則を更新しました。
OK

が表示されます。

コマンドプロンプトを管理者権限で起動していないと下記メッセージが表示されます。

要求された操作には、権限の昇格が必要です。管理者として実行してください。

これは接続元ホストでschtasksコマンドを実行した時の通信を受信する為に必要な設定です。
この設定はポート番号135を接続先ホストで許可するものです。
接続元ホストと接続先ホスト間にファイアウォールがある場合はポート135を解放してください。(または、解放の依頼をファイアウォール管理者へ行ってください。)

参考にした情報

Auto Windows Update 完全自動化 - Qiita
ストーリー2019年12月現在、Windows7のサポート終了に向けて動いている今日この頃。この記事はすぐに必要無くなるでしょう。しかし。Windows Update って再起動何度もするから…
フルオートでWindows Updateする

接続元ホストで必要な設定は特にありません。
コマンドを実行して接続先ホストのWindowsUpdateが始まるか確認してみてください。

接続元ホスト
接続元ホスト
schtasks /Run /S 192.168.50.217 /U Admin /P Adminpass /TN sample

コマンドで色を付けた部分は接続先ホストの情報に書き換えてください。

192.168.50.217は接続先ホストのIPアドレス

Adminは接続先ホストのログインユーザー名

Adminpassは接続先ホストのログインパスワード

接続元ホスト
接続元ホスト

処理状況を確認するコマンド

schtasks /Query /S 192.168.50.217 /U Admin /P Adminpass /V /FO list /TN sample

表示される結果※一部抜粋

状態:         準備完了←準備完了は処理が終わっている
前回の実行時刻:2022/06/14 20:26:34
前回の結果:   0←0は正常終了

スポンサーリンク

うまく動かない場合の対処

接続元ホストで「エラー:この要求はサポートされていません。」が表示される

接続元ホスト
接続元ホスト
schtasks /Run /S 192.168.50.217 /U Admin /P 1 /TN sample

エラー:この要求はサポートされていません。

対処法

接続先ホストで「通信に使うWindowsFWを解除」を行ってください。

接続元ホストで「エラー:アクセスが拒否されました。」が表示される

接続元ホスト
接続元ホスト
schtasks /Run /S 192.168.50.217 /U Admin /P 1 /TN sample

エラー:アクセスが拒否されました。

対処法

接続先ホストで「リモートユーザに特権権限を与える」を行ってください。

接続元ホストで「エラー:アクセスが拒否されました。」が表示される

接続元ホスト
接続元ホスト
schtasks /Run /S 192.168.50.217 /U Admin /P 1 /TN sample

エラー:指定されたファイルが見つかりません。

対処法

接続先ホストで「コマンドを実行するタスクを作成」を行ってください。

接続元ホストで「前回の結果:1」が表示される

接続元ホスト
接続元ホスト
schtasks /Query /S 192.168.50.217 /U Admin /P Adminpass /V /FO list /TN sample

~前略~

前回の結果:1

~後略~

対処法

接続先ホストで「プログラムファイルを実行するコマンドを作成」を行ってください。

まとめ

今回はWindowsUpdateをリモートコマンドで実行する方法を紹介しました。
実際に使用するには接続先ホストでいくつか設定が必要なので、業務で使う場合は設定して問題ないか確認しましょう。
WindowsUpdateを少しでも楽に実行できるよう改善を続けましょう。

最後まで読んで頂き、ありがとうございます。

「この記事が参考になった」「お礼でコーヒー代をプレゼントしよう」という方がいましたらチップ(15円〜)をお願いいたします。

Amazonギフト券- Eメールタイプ - Amazonベーシック

メールのあて先は 「mizusibuki8080@gmail.com」です。
※上記のアドレスは投げ銭受け取り専用です。他のメールは受け取れない設定にしてあるのでご注意ください。

ネトエンの仕事の話
ネットワークエンジニアになった人
タイトルとURLをコピーしました