「毎週決まった時間にログを削除している」
「サービスの再起動、キャッシュクリア、手作業ばかりで面倒…」
そんなときに使いたいのが、WindowsのタスクスケジューラとPowerShellスクリプトの組み合わせです。
この2つを活用すれば、定期的なメンテナンス作業を完全自動化できます。
本記事では、タスクスケジューラでPowerShellスクリプトを定期実行する方法をわかりやすく解説し、よくあるメンテナンスタスクの具体例もご紹介します!
タスクスケジューラとは?
タスクスケジューラ(Task Scheduler)は、Windowsに標準搭載されている自動実行ツールです。
指定した日時や間隔で、アプリやスクリプトを自動で実行できます。
PowerShellスクリプトと連携すれば、曜日・時間ごとの自動メンテナンスや監視処理も簡単に実現できます。
実現できる定期メンテナンスの例
メンテナンス内容 | 実行例 |
---|---|
一時ファイルの削除 | キャッシュ・ログのクリーンアップ |
サービスの再起動 | Spooler や WSearch などの定期リフレッシュ |
ログ収集&整理 | 特定のログをZip化、移動、メール送信など |
バックアップ処理 | フォルダを別ドライブにコピー |
アップデートスクリプトの実行 | ChocolateyやWingetを使ったパッケージ更新 |
PowerShellスクリプトを作成する

まずは実行したいメンテナンス処理をPowerShellで記述します。
例:C:\Logs 内の30日以上前のログを削除
$logPath = "C:\Logs"
Get-ChildItem $logPath -Recurse -Include *.log |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Remove-Item -Force
# 実行ログを残す
"$(Get-Date) - 古いログ削除処理を実行しました" | Out-File "C:\Logs\maintenance.log" -Append
これを cleanup_logs.ps1
という名前で保存しておきます。
タスクスケジューラに登録する手順
- タスクスケジューラを開く
- スタートメニューから「タスクスケジューラ」を検索して起動。
- 新しい基本タスクの作成
- 右側の「基本タスクの作成」をクリック
- 名前と説明を入力(例:ログ削除スクリプト)
- トリガー(実行タイミング)を設定
- 「毎日」「毎週」などの頻度と時刻を指定
- 操作(実行内容)を設定
- 「プログラムの開始」を選択
- プログラム:
powershell.exe
- 引数に以下を入力:
-ExecutionPolicy Bypass -File "C:\Path\To\cleanup_logs.ps1"
- 完了!
トラブルを防ぐ設定ポイント

チェック項目 | 内容 |
---|---|
管理者権限で実行 | 「最上位の特権で実行する」にチェックを入れる |
実行ユーザーの設定 | サービスなどにアクセスするにはSYSTEMまたは管理者ユーザーが必要 |
ログ出力の追加 | スクリプト内に Out-File などでログを残すと安心 |
実行確認 | 手動で「タスクの実行」からテストしておくことが重要 |
よくある質問とその対処法
- QPowerShellが起動してもスクリプトが動かない
- A
スクリプトパスにスペースがある場合は “ダブルクォーテーション” で囲む → 実行ポリシーが制限されている場合、
-ExecutionPolicy Bypass
を指定
- Qタスクが「完了」と表示されるのにスクリプトが実行されていない
- A
スクリプト内でエラーが発生している可能性。まずは手動で実行してみる → PowerShellがパスが通っていない場合は、フルパスで指定する
- Qエラー時に通知が欲しい
- A
以下のようにエラー処理を追加できます:
try { # メイン処理 Get-ChildItem $logPath -Recurse -Include *.log | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item -Force "$(Get-Date) - 成功: ログ削除完了" | Out-File "C:\Logs\maintenance.log" -Append } catch { $errorMsg = $_.Exception.Message "$(Get-Date) - エラー: $errorMsg" | Out-File "C:\Logs\maintenance.log" -Append # メール通知なども可能 Send-MailMessage -To "admin@example.com" -From "system@example.com" -Subject "メンテナンスエラー" -Body $errorMsg -SmtpServer "mail.example.com" }
まとめ:手作業を減らしてメンテナンスを自動化しよう!
タスクスケジューラとPowerShellを連携させれば、時間のかかるメンテナンス作業を自動化できます。
一度設定してしまえば、毎週・毎日ミスなく同じ処理を実行可能になるため、業務の効率化・安定運用に直結します。
ポイントまとめ
- タスクスケジューラで定期メンテナンスを自動化できる
- PowerShellで柔軟な処理を記述可能
- GUIでも簡単に設定できる
- 管理者権限やエラーハンドリングも忘れずに!
自動化の第一歩として、まずは頻繁に行う単純作業から始めてみましょう。
徐々に複雑な処理も自動化していくことで、業務効率が大幅に向上します。
システム管理者の作業負担を減らし、より重要な業務に集中できる環境を整えていきましょう!
コメント