タスクスケジューラをGPOで一斉配布するには、Group Policy Preferences(GPP)の「コンピューターの構成」または「ユーザーの構成」「基本設定」「コントロール パネルの設定」「タスク」で、現行OS向けの「スケジュールされたタスク(Windows Vista以降)」を作成します。最初にスクリプトを単体でテストし、実行主体、権限、作業フォルダー、トリガー、再試行、ログ、終了条件を決めます。平文または復号可能なパスワードをGPOへ保存せず、端末ローカル処理はSYSTEM、ドメイン資源が必要なサーバータスクはgMSAなどの管理IDを検討し、検証OUから展開します。
GPOでタスクを配布するときの最短手順
GPOで配ったタスクが動かない場合は、GPOの適用、GPPによるタスク登録、登録後の実行を別々に確認します。タスクが端末にない症状と、登録済みなのに処理結果が出ない症状で調べる場所が変わります。
- 検証用OU等に対象を限定し、コンピューター構成かユーザー構成かを決める。
- GPPの「基本設定→コントロール パネルの設定→タスク」で「スケジュールされたタスク(Windows Vista以降)」を作る。
- タスク名、実行主体、トリガー、プログラム・引数・作業フォルダーを設定する。
- 既存タスクを残して必要な項目を変更するならUpdate、不存在時だけ作るならCreate等、目的に合うアクションを選ぶ。
- 対象端末でGPO適用と登録内容を確認し、その後に履歴・終了結果・実際の出力を確認する。
| 症状 | 確認する場所 | 混同しないこと |
|---|---|---|
| タスクが端末にない | GPOの対象OU・フィルター、GPPのエラーと項目の対象条件 | 実行スクリプトの終了コードを調べる前に登録を確認 |
| タスクはあるが設定が古い | タスク名、Create/Update、実際のActions・トリガー | GPOを更新しただけで既存タスクが変わるとは限らない |
| タスクはあるが開始しない | トリガー・有効状態・Conditions・履歴 | GPO適用済みと予定時刻の起動成功は別 |
| 実行済みだが出力がない | 実行主体、作業フォルダー、プログラムのログ・出力 | 終了コード0だけで業務上の成功を判断しない |
| ユーザーGPPで4098・0x80070005 | Commonの適用コンテキストとGeneralの実行アカウント | 適用主体と登録後の実行主体は別 |
タスク化する前に処理を単体で検証する
タスクスケジューラはプログラムやスクリプトを指定時刻に起動する仕組みであり、処理内容の正しさまでは保証しません。Microsoftの診断手順も、まずコマンド、PowerShell、バッチを同じ引数で直接実行し、エラーなく終了することを確認するよう案内しています。検証用データと最小権限のアカウントで、入力、出力、終了コード、所要時間、再実行時の挙動を記録します。
削除、移動、更新、再起動、サービス停止を含む処理は対象を限定し、バックアップ、ドライラン、排他制御、途中失敗時の復元を用意します。ネットワーク共有やWeb APIへ接続する場合は、名前解決、プロキシ、証明書、タイムアウト、資格情報の保管方法を確認します。タスクで動かないからと権限を管理者へ広げる前に、直接実行と非対話実行の差を切り分けます。
コンピュータータスクかユーザータスクかを選ぶ
端末保守、インベントリ、SYSTEMで完結する処理はコンピューターの構成、サインインした利用者のプロファイルやUIに関係する処理はユーザーの構成が候補です。タスクのGPP項目をユーザーOU/コンピューターOUのどちらへリンクするか、トリガー時に利用者がサインインしている必要があるかを決めます。共有PC、RDS、VDIでは同じユーザーが複数端末にタスクを作る影響も評価します。
ユーザー構成のGPP Scheduled TaskでCommonタブの「ログオンしているユーザーのセキュリティコンテキストで実行」を有効にすると、イベント4098・アクセス拒否で適用に失敗する既知事象があります。Microsoftはこのオプションを有効にせず、実際にタスクが動く主体はGeneralタブのSecurity Optionsで指定するよう案内しています。GPP項目の適用主体と、登録後タスクの実行主体を混同しません。
専用GPOを作り現行タスク形式を選ぶ

GPMCで目的別の新しいGPOを作り、コンピューターまたはユーザーの構成から「基本設定」「コントロール パネルの設定」「タスク」を開きます。右クリックして新規作成し、「スケジュールされたタスク(Windows Vista以降)」を選びます。古いOS用の下位互換タスクを現行Windows 10/11やWindows Serverへ流用しません。GPO名に目的、対象、所有部署を含め、Default Domain Policyへ混ぜません。
最初は検証用OUまたはセキュリティグループへ限定します。GPO全体のセキュリティフィルターと、GPP項目のCommonタブにある項目レベルの対象設定を使い分けます。OS版、端末名、セキュリティグループ、ファイル/レジストリ存在などで絞れますが、AND/ORの組み合わせを単純にし、代表端末で真偽を確認します。WMIクエリを大量端末で複雑に使い、ログオン時間を悪化させません。
Create・Update・Replace・Deleteを使い分ける
Createは存在しないタスクを作成、Updateは指定した項目だけを既存タスクへ反映、Replaceは既存タスクを削除して再作成、Deleteは削除です。通常の継続管理ではUpdateを基本にし、既存の未指定プロパティを残すかを確認します。Replaceは確実に全項目を揃えられますが、更新のたび削除・再登録され、実行中タスク、履歴、次回実行時刻へ影響する可能性があります。
Createのまま設定を変更しても既存タスクが更新されず、古い内容が残る場合があります。Replaceへ安易に変えるのではなく、期待する変更と実際の登録XMLを比較します。「この項目が適用されなくなったら削除する」はGPPのアクションをReplaceへ変え、対象外時に削除する動作があります。Microsoftの説明どおりローミング環境なども考慮し、撤回用Delete項目を明示する方法と比較して選びます。

Updateはタスクが存在しない場合にも新規作成します。「存在する端末だけ更新する」という絞り込みではありません。対象端末に作成してよいかを先に決め、名前が同じ別用途のタスクへ設定を反映しないようにしてください。項目の名前は、変更・削除したいタスク名と一致する必要があります。
Generalで名前・実行主体・権限を決める
タスク名とフォルダーは組織固有の接頭辞を使い、Microsoft/Windows配下の組み込みタスク名と衝突させません。説明に所有部署、目的、変更番号、ログ先を記載します。「ユーザーがログオンしているかどうかにかかわらず実行」「最上位の特権で実行」は必要性を検証します。SYSTEMは端末ローカルの広い権限を持ちますが、利用者のネットワークドライブやユーザープロファイルを通常見られません。
管理者権限が不要な処理を最上位で実行せず、実行ファイルとスクリプトの書き込み権限を一般ユーザーへ与えません。一般ユーザーが変更できるパスをSYSTEMタスクで実行すると権限昇格につながります。ファイルは管理者のみ更新可能なローカルパスへ配り、署名・ハッシュ・ACLを確認します。ドメイン共有から直接実行せず、改ざん検知した承認済みローカルコピーを使う設計を検討します。
GPOへパスワードを保存しない

MicrosoftのMS14-025は、GPPでスケジュールされたタスクなどの資格情報をSYSVOLへ保存すると、認証済みユーザーが取得・復号して権限昇格できる問題を修正し、GPMCからパスワード配布機能を削除しました。古いGPOにcpasswordが残っている場合は、新しいタスクを作るだけでは解消しません。ドメイン内の既存GPP XMLを監査し、該当資格情報を削除・変更します。
端末ローカルで完結する処理はSYSTEMや仮想アカウントを使い、ドメイン資源へアクセスするサーバータスクはgMSAを検討します。gMSAはDCがパスワードを管理し、許可されたホストが取得でき、Task Schedulerもサポート対象です。ただし作成、KDS、ホスト許可、ログオン権、対象資源のACLが必要です。通常の共有ユーザーIDと固定パスワードをタスクへ埋め込む代替には戻りません。
Actionsで完全パスと安全な引数を指定する
Actionには実行プログラムの完全パスを指定し、PowerShellなら承認済みスクリプトの完全パス、引数、Start inを分けます。相対パスや現在ディレクトリへ依存すると、非対話実行時に別ファイルを読んだり出力先を失ったりします。引数へパスワード、トークン、個人情報を直接含めません。コマンドラインはプロセス一覧やイベント、管理ツールから見える可能性があります。
PowerShellの実行ポリシーをBypassで常用したり、インターネットから取得したスクリプトをその場で実行したりしません。署名、コードレビュー、ハッシュ、実行ACL、依存モジュールを管理します。出力ログは書き込み先を明示し、機密値をマスクし、最大サイズと保持期間を設定します。スクリプトが多重起動して同じファイルやDBを同時更新しないよう、タスクの重複実行設定と処理側ロックを合わせます。
TriggersとConditionsを業務時間に合わせる

日次、起動時、ログオン時、イベント時など、処理目的に必要な最小トリガーを設定します。複数トリガーが同時成立する場合の多重起動、タイムゾーン、夏時間、スリープ、ネットワーク未接続、ランダム遅延を確認します。全端末が毎時00分に同じサーバーへ接続すると負荷が集中するため、利用可能なランダム遅延や端末グループ分割を使います。
AC電源、アイドル、ネットワーク接続、タスクを実行するためのスリープ解除などConditionsを業務要件に合わせます。ノートPCでバッテリー時に停止すると永久に実行されない場合があり、WakeToRunは利用者の電力・プライバシーへ影響します。開始できなかったときの再試行、最大実行時間、要求時実行、期限切れタスクの扱いを決め、無限再試行や無制限実行を避けます。
適用結果とタスクの実行結果を別々に確認する
gpresultで対象GPOが適用されたことを確認し、イベントビューアーのApplicationでGroup Policy Preferencesのイベント4098などを確認します。次にTask Scheduler Libraryでタスク名、登録主体、トリガー、次回実行、Actions、Conditionsを読み取り、エクスポートしたXMLを承認済み設計と比較します。GPO適用成功はタスク実行成功ではなく、タスク登録成功も処理結果成功ではありません。
手動実行できる保守時間にRunを試し、Last Run Result、History、処理ログ、期待する出力を確認します。Microsoftは「アプリケーションとサービス ログ」「Microsoft」「Windows」「TaskScheduler」「Operational」の確認と、問題時にタスクXMLを収集するよう案内しています。0終了でも処理が空振りするスクリプトがあるため、件数、更新時刻、整合性を検証し、資格情報や機密データをログへ残しません。
gpresultの対象とGPPの結果を確認する
gpresultはグループポリシーの結果を表示するコマンドで、「/scope computer」「/scope user」で確認範囲を分けられます。ユーザー構成で配った項目を調べる際は、意図するユーザーの結果を確認します。GPO一覧に名前が見えていても、項目レベルの対象条件が真になったことや、個々のGPPタスクが登録されたことまで一度に証明するものではありません。
登録後に動かない場合は、タスクのXMLとTaskSchedulerのOperationalログを保存し、起動したか・実行中なのか・終了したが出力がないのかを分けます。GPOの編集とタスクの実行結果を同じ確認欄で済ませず、どの段階で失敗したかを記録してください。
段階展開と撤回タスクを用意する
検証端末、IT部門、限定OU、全社の順に展開し、ノートPC、VDI、共有端末、サーバー、オンライン/オフライン、再起動後を試します。実行成功率、平均時間、失敗コード、サーバー負荷、利用者影響を監視します。Immediate Taskは一度だけの緊急処理に見えても全対象でコードを実行するため、通常のScheduled Task以上に対象と削除、再実行防止を慎重に設計します。

ロールバックはGPOリンクを外すだけでは不十分で、GPPタスクが端末へ残る場合があります。承認済みDelete項目または適用対象外時削除を検証し、実行中タスクを安全に停止してから登録解除します。スクリプトや生成ファイルを削除する場合は別の確認済み手順とし、再帰削除をタスク撤回に含めません。撤回後にgpresult、タスク一覧、次回実行、Operationalログ、業務データを確認し、GPOバックアップを保持します。
確認チェックリスト
- スクリプトを同一主体・引数で単体テストした
- コンピューター/ユーザー構成と実行主体を区別した
- 現行OS向けScheduled Taskを限定GPOで作った
- Create/Update/Replace/Deleteの差を確認した
- 一般ユーザーが変更できるファイルをSYSTEMで実行していない
- GPOへパスワードやcpasswordを保存していない
- 完全パス、ログ、重複実行、再試行、最大時間を設定した
- GPP適用とTask Scheduler実行結果、撤回を別々に確認した
公式情報・参考資料
- Microsoft Learn:Group Policy Preferencesの動作と項目レベル対象設定
- Microsoft Learn:GPPのScheduled TaskとCreate/Replace/Update/Delete
- Microsoft Security Bulletin:GPP資格情報の漏えい対策MS14-025
- Microsoft Learn:ユーザーGPPタスクのイベント4098と実行コンテキスト
- Microsoft Learn:スケジュールされたタスクが実行されない場合の診断
- Microsoft Learn:gMSAをタスクで使うための管理

コメント