【自動化入門】タスクスケジューラとPowerShellで定期メンテナンスを自動化する方法

Windows

「毎週決まった時間にログを削除している」
「サービスの再起動、キャッシュクリア、手作業ばかりで面倒…」

そんなときに使いたいのが、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 という名前で保存しておきます。

タスクスケジューラに登録する手順

  1. タスクスケジューラを開く
    • スタートメニューから「タスクスケジューラ」を検索して起動。
  2. 新しい基本タスクの作成
    • 右側の「基本タスクの作成」をクリック
    • 名前と説明を入力(例:ログ削除スクリプト)
  3. トリガー(実行タイミング)を設定
    • 「毎日」「毎週」などの頻度と時刻を指定
  4. 操作(実行内容)を設定
    • 「プログラムの開始」を選択
    • プログラム:powershell.exe
    • 引数に以下を入力:
-ExecutionPolicy Bypass -File "C:\Path\To\cleanup_logs.ps1"

パスはスクリプトの保存先に置き換えてください。

  1. 完了!

トラブルを防ぐ設定ポイント

チェック項目内容
管理者権限で実行「最上位の特権で実行する」にチェックを入れる
実行ユーザーの設定サービスなどにアクセスするにはSYSTEMまたは管理者ユーザーが必要
ログ出力の追加スクリプト内に Out-File などでログを残すと安心
実行確認手動で「タスクの実行」からテストしておくことが重要

よくある質問とその対処法

Q
PowerShellが起動してもスクリプトが動かない
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でも簡単に設定できる
  • 管理者権限やエラーハンドリングも忘れずに!

自動化の第一歩として、まずは頻繁に行う単純作業から始めてみましょう。

徐々に複雑な処理も自動化していくことで、業務効率が大幅に向上します。

システム管理者の作業負担を減らし、より重要な業務に集中できる環境を整えていきましょう!

コメント

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