PowerShellを決まった時間に自動で実行する方法(タスクスケジューラ)

スポンサーリンク

🖥 タスクスケジューラとは?

Windowsに標準搭載されている タスクスケジューラ は、指定した時間やイベントに応じてプログラムやスクリプトを自動実行できる機能です。

PowerShellスクリプトと組み合わせることで、定期的なログ収集・サービス再起動・バックアップ処理 などを完全自動化できます。

スポンサーリンク

🔑 基本的な流れ

  1. PowerShellスクリプト(.ps1ファイル)を作成
  2. タスクスケジューラで新しいタスクを登録
  3. 実行条件(時間・イベント)を設定
  4. 実行するプログラムとして powershell.exe を指定し、スクリプトを呼び出す
スポンサーリンク

🛠 実例:ログ収集スクリプトを毎日自動実行

1. スクリプト作成

例:イベントログを毎日保存するスクリプト

# save_log.ps1
$time = Get-Date -Format "yyyyMMdd_HHmm"
Get-EventLog -LogName System -Newest 100 | Export-Csv "C:\Logs\system_$time.csv" -NoTypeInformation -Encoding UTF8

※ Logs フォルダが存在しない場合は事前に作成してください。

Get-EventLog は旧式機能のため、実務では Get-WinEvent の使用が推奨されます(PowerShell 7 では Get-EventLog が使用不可)。

※環境によって文字コードの扱いが異なるため注意
 もし文字化けする場合は -Encoding Default を試す(※PowerShell 5.1 と PowerShell 7 では CSV の出力文字コードが異なるため、環境によっては文字化けが発生します。)

2. タスクスケジューラで登録

  1. 「タスクスケジューラ」を開く
  2. 「タスクの作成」を選択
  3. トリガー → 「毎日 午前3時」などを設定
  4. 操作 → 「プログラムの開始」を選択し、以下を入力

プログラム/スクリプト

powershell.exe

※PowerShell 7 を使う場合は pwsh.exe を指定する必要がある

引数の追加実行させたいファイルのパス

-File "C:\Scripts\save_log.ps1"

または(スクリプト内に実行ポリシーが設定されてない場合)、

-ExecutionPolicy Bypass -File "C:\Scripts\save_log.ps1"

開始(オプション)(=作業ディレクトリ)

「操作」→「開始(オプション)」は実行時の作業ディレクトリを指定する項目です。
ここを設定しないと System32 で実行されるため、相対パスが失敗します。
必ずスクリプトを置いたフォルダを指定しましょう。

"C:\Scripts\"

※「C:\Scripts\」は分かりやすいですが、初心者には「初心者は管理者権限が不要なユーザーフォルダ内に保存するのが安全」

例:C:\Users\<ユーザー名>\Documents\Scripts\
  (フォルダ「Scripts」は事前に作成)

3. 実行確認

  • 設定した時間になると自動的にスクリプトが実行され、ログファイルが保存される
  • 手動で「タスクの実行」をクリックして動作確認も可能
スポンサーリンク

⚠️よくあるトラブルと対策

1. 実行ポリシーのエラーが出た場合

PowerShell スクリプト(.ps1)を実行すると、

実行ポリシーによりスクリプトの実行が禁止されています」といったエラーが出ることがあります。

※タスクスケジューラでの引数にこれを入れると、実行ポリシー関連のエラーがほぼ防げます。

powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\save_log.ps1"

-ExecutionPolicy Bypass は“その実行の時だけ”適用され、ローカルの設定を書き換えないため、比較的安全です。

※実行ポリシーについて詳しく知りたい場合は、以下の記事でわかりやすくまとめています:

2. 管理者権限を必要とする処理 を実行する場合

タスク作成時(イベントログ取得やサービス再起動など)エラー回避のため、

✔ 「最上位の特権で実行する

オンにする必要があります。

3. タスクスケジューラ実行時はカレントディレクトリが System32

タスクスケジューラ実行時はカレントディレクトリが System32 になります。

そのため、相対パス相対的ディレクトリ参照で失敗しがちです。

📌 推奨:

  • スクリプト内のパスは必ず 絶対パスで指定
  • タスクの「操作」→「開始(オプション)」にスクリプトのフォルダを入れると安定する
スポンサーリンク

📌 実務での活用シナリオ

  • 定期バックアップ 毎日指定フォルダをコピーして保存
  • サービス監視+再起動 サービスが停止していたら自動再起動
  • ログ収集・監査対応 セキュリティログを定期的に保存し、監査用に活用
スポンサーリンク

🎯 まとめ

  • タスクスケジューラを使えば、PowerShellスクリプトを 時間指定やイベントトリガーで自動実行 できる
  • 実務では「ログ収集」「サービス再起動」「バックアップ」などで大きな効果を発揮
  • 設定はGUIで簡単に行えるため、初心者でもすぐに導入可能

コメント

タイトルとURLをコピーしました