
Windowsの運用管理を快適にする10の裏ワザ/表ワザ
[ テクニカルライター 山市 良 ]
2021年10月29日配信
2023年09月28日更新
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タスクを手動で一度実行します。
画面1 毎週末に再起動を実施するMyScheduledRebootタスクを作成し、“無効”状態にしておく
画面2 システム起動時にMyScheduledRebootタスクの状態を“無効”にセットするためのタスク
2つのタスクをこのように準備しておくことで、週末に再起動が必要な際に簡単かつすばやく再起動をスケジューリングできるようになります。PowerShellのEnable-ScheduledTaskコマンドレットまたはSchtasks.exeコマンドを次のように実行することで、MyScheduledRebootタスクが“準備完了”の状態にセットされます。すると、その週の週末に再起動が自動実行されます。そして、再起動後はDisableMyScheduledRebootタスクによって再びMyScheduledRebootタスクは“無効”の状態に戻ります。
Enable-ScheduledTask -TaskName MyScheduledReboot
または
Schtasks.exe /change /tn MyScheduledReboot /Enable
タスクの[プログラムの開始]操作に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)をパラメーター付きで指定したい場合は、次のように設定します。スクリプトの実行ポリシーの現在の設定に関係なく、確実にスクリプトを実行させることが可能です(画面3)。スクリプトのパスには、[開始]に指定した場所からの相対パス(例: .\script.ps1)で記述することもできます。
タブ名 | 項目名 | 設定値 |
操作 | 操作 | プログラムの開始 |
プログラム/スクリプト |
%SystemRoot%¥System32¥WindowsPowerShell¥v1.0¥powershell.exe または C:¥Windows¥System32¥WindowsPowerShell¥v1.0¥powershell.exe |
|
引数の追加 |
-Command "<PowerShellのコマンドライン>" または -Command "& {<PowerShellのコマンドライン>}" |
|
開始 | コマンドラインの実行を開始するカレントディレクトリ、省略すると%SystemRoot%¥System32 |
画面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オプションで回避できます。
※本ページは2022年6月22日現在の情報です。
こちらのページの続きを含めた、全10テクニックをまとめたホワイトペーパーをご覧いただけます。以下のフォームよりお申込みください。