Windowsの運用管理を快適にする10の裏ワザ/表ワザ
[ テクニカルライター 山市 良 ]

テクニック.4 - タスクスケジューラの使いこなし

2021年10月29日配信
2023年09月28日更新

yamaichi_tec004_top_1800x540

 

 Windows標準のタスク機能を利用すると、さまざまなタイミング、条件に基づいて、管理操作を自動化することができます。タスクは[タスクスケジューラ](Taskschd.msc)、Schtasks.exeコマンド、およびPowerShellのScheduledTasksモジュールのコマンドレット(Get-Command -module ScheduledTasksで確認可能)を使用して作成および管理できます。ここでは[タスクスケジューラ](Taskschd.msc)と一部コマンドラインを利用した活用例を紹介します。

 

■ 週末に再起動をスケジューリングする

 再起動保留状態の更新プログラムのインストールを完了させるため、サーバーで週末に再起動を実施するというシナリオを考えてみましょう。再起動は毎週必要なわけではなく、必要時にのみ簡単に再起動をスケジューリングすることにします。

 [タスクスケジューラ](Taskschd.msc)を起動し、次の2つのタスクを作成します。MyScheduledRebootタスクは毎週土曜日の23:59にshutdown.exe /r /t 0コマンドを実行して再起動するタスクです。もう1つのDisableMyScheduledRebootタスクは、システム起動時にMyScheduledRebootタスクの状態を“無効”にセットするタスクです。

 

タブ名 項目名  設定値
全般 名前 MyScheduledReboot
  セキュリティオプション

✅ユーザーがログオンしているかどうかにかかわらず実行する

✅最上位の特権で実行する

トリガー タスクの開始 スケジュールに従う、毎週、土曜日、23:59
操作 操作 プログラムの開始
  プログラム/スクリプト

%SystemRoot%¥System32¥shutdown.exe 

または

C:¥Windows¥System32¥shutdown.exe

  引数の追加 /r /t  0

 

 

タブ名 項目名 設定値
全般 名前 MyScheduledReboot
  セキュリティオプション

✅ユーザーがログオンしているかどうかにかかわらず実行する

✅最上位の特権で実行する

トリガー タスクの開始 スタートアップ時(システム起動時)
操作 操作 プログラムの開始
  プログラム/スクリプト

%SystemRoot%¥System32¥schtasks.exe

または

C:¥Windows¥System32¥schtasks.exe

  引数の追加 /change  /tn MyScheduledReboot /Disable

 

 2つのタスクを作成したら、“準備完了”状態になっているMyScheduledTaskタスクを右クリックして[無効]を選択し、タスクを“無効”の状態に切り替えます。または、DisableMyScheduledRebootタスクを手動で一度実行します。

 

001

画面1 毎週末に再起動を実施するMyScheduledRebootタスクを作成し、“無効”状態にしておく

 

002

 画面2 システム起動時にMyScheduledRebootタスクの状態を“無効”にセットするためのタスク

 

 2つのタスクをこのように準備しておくことで、週末に再起動が必要な際に簡単かつすばやく再起動をスケジューリングできるようになります。PowerShellのEnable-ScheduledTaskコマンドレットまたはSchtasks.exeコマンドを次のように実行することで、MyScheduledRebootタスクが“準備完了”の状態にセットされます。すると、その週の週末に再起動が自動実行されます。そして、再起動後はDisableMyScheduledRebootタスクによって再びMyScheduledRebootタスクは“無効”の状態に戻ります。
Enable-ScheduledTask -TaskName MyScheduledReboot 
または  
Schtasks.exe /change /tn  MyScheduledReboot /Enable 

 

■PowerShellコマンドのスケジューリング

 タスクの[プログラムの開始]操作にPowerShellコマンドレットのコマンドラインを指定したい場合は、次のように設定します。先ほどのDisableMyScheduledRebootタスクの[プログラムの開始]操作は、この方法で<PowerShellのコマンドライン>の部分にDisable-ScheduledTask -TaskName MyScheduledRebootと指定することで構成することもできます。

 

タブ名 項目名 設定値
操作 操作 プログラムの開始
  プログラム/スクリプト

%SystemRoot%¥System32¥WindowsPowerShell¥v1.0¥powershell.exe 

または

C:¥Windows¥System32¥WindowsPowerShell¥v1.0¥powershell.exe

  引数の追加

-Command "<PowerShellのコマンドライン>"

または

-Command "& {<PowerShellのコマンドライン>}"

  開始 コマンドラインの実行を開始するカレントディレクトリ、省略すると%SystemRoot%¥System32

 

■PowerShellスクリプト(.ps1)のスケジューリング

タスクの[プログラムの開始]操作にPowerShellのスクリプト(.ps1)をパラメーター付きで指定したい場合は、次のように設定します。スクリプトの実行ポリシーの現在の設定に関係なく、確実にスクリプトを実行させることが可能です(画面3)。スクリプトのパスには、[開始]に指定した場所からの相対パス(例: .\script.ps1)で記述することもできます。

 

タブ名 項目名 設定値
操作 操作 プログラムの開始
  プログラム/スクリプト

%SystemRoot%¥System32¥WindowsPowerShell¥v1.0¥powershell.exe 

または

C:¥Windows¥System32¥WindowsPowerShell¥v1.0¥powershell.exe

  引数の追加

-Command "<PowerShellのコマンドライン>"

または

-Command "& {<PowerShellのコマンドライン>}"

  開始 コマンドラインの実行を開始するカレントディレクトリ、省略すると%SystemRoot%¥System32

 

003

 画面3 PowerShellスクリプト(.ps1)をタスクで実行させる場合の設定

 

■タスクをコマンドラインから即時実行する

Start-ScheduledTaskまたはSchtasks.exe /RUNコマンドを使用すると、登録済みのタスク(Windowsに組み込みのタスクを含む)を即時に実行できます。
 Start-ScheduledTask -TaskName MyScheduledReboot  [-TaskPath “<タスクパス>”] 

または 

Schtasks.exe /RUN /I /TN MyScheduledReboot   

注:タスクのプロパティの[条件]タブで[次の間アイドル状態の場合のみタスクを開始する]がチェックされている場合、Start-ScheduledTaskはタスクをすぐに実行せずに、キューに挿入済み(Queued)にします。Schtasks.exe /RUNコマンドに/Iオプションを付けることでこの問題を回避できます。[コンピューターをAC電源で使用している場合のみタスクを開始する]がチェックされている場合も、バッテリ稼働時に同様の影響がありますが、/Iオプションで回避できます。

 

004

 

※本ページは2022年6月22日現在の情報です。

 

■ ホワイトペーパーをダウンロードする

こちらのページの続きを含めた、全10テクニックをまとめたホワイトペーパーをご覧いただけます。以下のフォームよりお申込みください。

最新記事