Netwrix 1Secureは、データとアイデンティティ全体にわたる統合された可視性を提供します。14日間の無料トライアルでフルアクセス可能です。無料トライアルを開始

リソースセンターブログ

タスク スケジューラから PowerShell スクリプトを実行する方法

タスク スケジューラから PowerShell スクリプトを実行する方法

Aug 26, 2025

Windows タスク スケジューラにより、管理者は決められたスケジュールに従って、またはシステム イベントに応じて PowerShell スクリプトを自動的に実行できます。これにより、バックアップ、更新、監視、クリーンアップなどのタスクで一貫性が向上し、時間を節約でき、人為的なミスも減らせます。スクリプトは GUI または PowerShell の cmdlet(Register-ScheduledTask, New-ScheduledTaskTrigger など)でスケジュールできます。ベストプラクティスには、最小特権のアカウントの使用、ログ記録とエラー処理、スクリプト署名、誤用を防ぐための定期的な見直しが含まれます。

はじめに

Windows タスク スケジューラにより、ユーザーは特定の日付と時刻にタスクを実行するように、あらかじめ定義したスケジュールに従って実行するように、または特定のイベントによってトリガーされたときに実行するように設定できます。Windows オペレーティング システムに組み込まれているこのツールは、効率の向上と、繰り返しタスクを確実に実行することに役立ちます。この記事では、 タスク スケジューラから PowerShell スクリプトを実行する方法 と、PowerShell を使ってスケジュールされたタスクを作成する方法を説明します。


自動化のための PowerShell スクリプトの設定

タスク スケジューラを理解する

タスク スケジューラ ライブラリは、定義されたすべてのタスクをフォルダーに整理してまとめたコレクションです。各タスクについて、GUI では次のタブが提供されます。

  • 全般 — タスクの名前と説明、タスクを実行するアカウント、その他のセキュリティ オプション。
  • トリガー — タスクを開始する条件。時間ベース(例:毎日、毎週)、イベントベース(例:システム起動時またはユーザー ログオン時)、またはカスタムにできます
  • 操作 — タスクがトリガーされたときに実行される処理。たとえば、プログラムを開始します。
  • 条件 — コンピューターの状態に基づいてタスクの実行を制御する基準。たとえば、特定の期間コンピューターがアイドル状態の場合にのみ実行する
  • 設定 — タスクの実行方法やタイミングを決める追加の設定。たとえば、失敗した場合はタスクを再起動したり、想定より長く実行された場合は停止したりします
  • 履歴 — 実行開始時刻、実行終了時刻、および遭遇したエラーや警告など、タスク実行の履歴
Image

PowerShell スクリプトを自動化するためにタスク スケジューラを使うメリット

PowerShell タスク スケジューラを通じて PowerShell スクリプトを自動化すると、以下のような多くのメリットがあります:

  • 時間の節約 — タスク スケジューラから PowerShell スクリプトを実行すると、手動実行に本来費やしていたかなりの時間を節約できます。これは、勤務時間外に実行する必要があるスクリプトに特に有効です。
  • 一貫性 — 自動化により、人為的なミスのリスクが低減します。スケジュールされた PowerShell スクリプトは、毎回まったく同じ操作を同じ順序で実行します。
  • 信頼性 — タスク スケジューラ(Task Scheduler)を使用すると、バックアップやクリーンアップ ルーチンなどの重要なメンテナンス タスクを定期的に実行できます。これによりシステムの信頼性が向上し、データ損失やシステム障害のリスクを低減できます。
  • リソース効率 — システムの利用率が低い時間帯にスクリプトを実行するようスケジュールすることで、集中的なタスクがピーク時のシステム パフォーマンスを低下させないようにできます。
  • 柔軟性 — タスク スケジューラ(Task Scheduler)では、システム起動時、ログオン時、アイドル時、または特定のイベントに応じてタスクを実行するなど、さまざまなスケジュール オプションを利用できます。これにより、スクリプトの実行をお客様の要件に合わせて調整できます。
  • エラーハンドリング — スクリプトが失敗した場合に再実行を試みるよう、タスク完了時または失敗時にメールを送信するよう、さらにイベント ログを書き込むように、スケジュール タスクを設定できます。これにより、タイムリーなトラブルシューティングが可能になり、自動化プロセスの健全性について常に把握できます。
  • セキュリティ — タスク スケジューラ(Task Scheduler)を使うと、PowerShell スクリプトを、ユーザーがログオンしていなくても、昇格した権限を持つアカウントを含む特定のユーザー アカウントで実行できます。これにより、機密性の高いタスクが安全に実行されることを支援し、より高い権限が必要なスクリプトの自動化も可能になります。 ただし、攻撃者は悪意のある目的で、スケジュールされたタスクやトリガーされたタスクを悪用する可能性があるため、潜在的な悪用を監視するために、監査(auditing)または追跡(tracking)システムを活用することをおすすめします。 Netwrix Access Analyzer は、悪意のある活動を軽減できるツールの好例です。
  • 統合と拡張性 — PowerShell スクリプトをスケジュールすることで、システム イベントに反応したり、複数のタスクをオーケストレーションしたりするなど、高度な自動化シナリオを実現できます。
  • 複雑なワークフローの管理 — タスク スケジューラ(Task Scheduler)は、タスクを連鎖させたり、前のタスクの成功または失敗に基づいて条件ロジックを使ったりするなど、複雑なワークフローを管理できます。複数の相互依存するタスクを慎重にオーケストレーションする必要があるシナリオでは、これは非常に役立ちます。
  • 使いやすさ — 強力な機能がありながらも、タスク スケジューラ(Task Scheduler)には直感的なグラフィカル インターフェイスが用意されており、自動化タスクのセットアップと管理の手順を簡単にします。さらに高度なユーザー向けに、タスク スケジューラはコマンドライン ツールや PowerShell cmdlet を使って設定・管理することも可能です。

PowerShell スクリプト用のスケジュールを作成する手順

タスク スケジューラ(Task Scheduler)で PowerShell スクリプトをスケジュールする前に、スクリプトが拡張子 .ps1 で保存されていること、そして正しく動作することをテスト済みであることを確認してください。

次に、次の手順を実行します:

  • タスク スケジューラを開く: Win + R を押し、taskschd.msc[ファイル名を指定して実行] ダイアログに入力して Enter を押します。
Image
  • 右側の [操作] ペインで [タスクの作成] をクリックします。
  • [全般] タブで、次の手順を行います:
  • タスクの名前と説明を入力します。
  • 適切なセキュリティ オプションを設定します。たとえば、ユーザーがログオンしているかどうかにかかわらず実行を選択すると、ログオンしていなくてもタスクが実行されます。スクリプトで管理者権限が必要な場合は、最高の特権で実行 を確認してください。

変更を保存するには OK をクリックします。

Image
  • トリガー」タブに移動して、「新規」 をクリックします。次に 「新しいトリガー」 ウィンドウで、次のいずれかを選択します:
  • タスクを開始するタイミング
  • たとえば 1 回、毎日、毎週など、実行頻度
  • 指定した時間よりも長くタスクが実行された場合にタスクを停止するなど、必要に応じてその他のオプションを設定します

OK」をクリックして変更を保存します。

Image
  • Actions」タブに移動し、New をクリックして、PowerShell スクリプトを実行する新しいアクションを設定します:
  • Action」のドロップダウン メニューから Start a program を選択します。
  • Program/script」のフィールドに、 powershell.exe と入力します。
  • 引数の追加」フィールドに、次を入力します。スクリプトへのフルパスを指定してください: -File C:\Scripts\scriptname.ps1
  • 開始位置」フィールドで、必要に応じてスクリプトのディレクトリを指定します。これは通常、スクリプトが相対パスに依存している場合を除き不要です。

OK をクリックして変更を保存します

Image
  • OK をクリックして、次に 条件 タブへ進みます。タスクを実行する条件を設定します。たとえば、コンピューターがAC電源につながっているときだけ実行する、または特定のネットワークに接続しているときだけ実行するように指定できます。選択内容を保存するには OK をクリックします。
Image
  • 次に 設定 タブへ進み、次の内容を設定します:
  • 必要に応じてタスクを実行できるようにする — タスクを手動で実行できるようにしたい場合は、この項目を選択します。
  • タスクが失敗した場合 — タスクが失敗したときに実行する内容を指定します(例:タスクを再起動する)。
  • 実行時間が次の時間を超えたらタスクを停止 — 必要に応じて時間制限を設定します。
  • タスクがすでに実行中の場合 — タスクがトリガーされたものの、すでに実行中である場合にどうするかを選択します。
Image
  • OK をクリックしてタスクを確定します。タスクを実行するユーザー アカウントの認証情報の入力を求められます。

高度な設定とベストプラクティス

スクリプトの実行と表示を制御する

タスク スケジューラを使用するときに、スクリプトの実行と表示を制御するには、以下のパラメータを Add arguments フィールドの Action タブで使用できます:

  • NoExit — このパラメータを追加すると、スクリプト実行後に PowerShell またはコマンド プロンプト ウィンドウが自動的に閉じないようにできます。デバッグに役立てたり、出力を直接確認するためにコンソール ウィンドウを開いたままにしたい場合に便利です。
  • Command — このパラメータを使用して、実行するスクリプトの完全パスと必要な引数を指定します。

たとえば、次の内容を Add arguments フィールドに指定することができます。

      -NoExit -Command -File C:\Scripts\InstallOfSoftware.ps1
      

スクリプトのアクティビティをログに記録するために、出力をテキストファイルまたはその他の宛先へリダイレクトする

Windows タスク スケジューラでよくある問題のトラブルシューティング

ここでは、予定したタスクが期待どおりに実行されない原因になり得るよくある問題と、その解決方法を紹介します。

タスクが開始されず、実行されません。

  • タスクを実行するユーザー アカウントに、タスクの実行およびタスクで参照されているファイルやディレクトリへのアクセスに必要な権限があることを確認してください。
  • トリガー設定、アクション パラメータ、条件など、タスクの構成設定をもう一度確認してください。
  • タスクが有効になっていることを確認してください。
  • タスクが特定のユーザー アカウントで実行される場合は、パスワードが変更されているかどうかを確認し、必要に応じてタスク用のパスワードを更新してください。

タスクは手動では実行されますが、自動では実行されません。

  • トリガー設定が正しいことを確認してください。よくある問題として、開始時刻の誤りや、スケジュールの誤設定などがあります。
  • たとえば「コンピューターが一定時間アイドル状態のときのみ実行する」といった、タスクの実行を妨げる可能性のある条件がないか確認してください。タスクがアイドル時間中、またはコンピューターが使用されていないときに実行されるようにスケジュールされている場合、スリープや休止状態などの電源設定によって実行が阻止されることがあります。タスクが実行されるように、システムがアクティブな状態を維持できるように電源設定を調整してください。

タスクが予期せず停止する、または正しく動作しない。

  • タスクがスムーズに実行されるために、十分なメモリ、CPU、またはディスク容量が利用可能か確認してください。
  • タスクにスクリプトの実行が含まれる場合は、スクリプトがタスク スケジューラ(Task Scheduler)の外部でも正しく動作することを確認してください。2つの状況で環境変数、パス、または権限がどのように異なる可能性があるかを考慮してください。

タスクが特定のエラーコードで失敗します。

タスクの履歴またはイベント ログに記載されているエラー コードを調べて、問題の最新情報と解決方法を確認してください。

タスクは実行されますが、何も行いません。

  • タスクのアクション セット(例:プログラムの起動)が正しく構成されていることを確認してください。
  • ポリシーの制限によりスクリプトが実行されない場合は、システムの実行ポリシーを上書きしてスクリプトを実行できるようにするために、-ExecutionPolicy Bypass 引数を追加することを検討してください。
  • 実行ファイルまたはスクリプトへのパスが正しいこと、またコマンドライン引数が適切に指定されていることを確認してください。
  • タスクの出力先がファイルまたは別の場所である場合は、パスが正しいことを確認し、実行アカウントに必要な書き込み権限があることを確認してください。

「Monitor and Secure Scheduled Tasks」の無料トライアルを依頼する

よくあるユースケースの実践的な例

よくある管理タスクの例となるスクリプト

以下は、Windows タスク スケジューラを使って自動化したい可能性のある一般的な管理タスクに関する、実用的なユースケースとサンプル スクリプトです。

フォルダーをバックアップする

次のスクリプトを使用して、C ドライブ上のフォルダーをローカル D ドライブ上のフォルダーにバックアップできます。

      Copy-Item -Path "C:\Source\*" -Destination "D:\Backup" -Recurse -Force
      

ソフトウェアの更新をインストールする

ソフトウェアまたはシステム コンポーネントを自動的に更新するには、次のスクリプトを使用します。

      Install-WindowsUpdate -AcceptAll -AutoReboot
      

ユーザー通知を送信

今後のイベントに関するリマインダーを電子メールの配信リストに送信するには、このスクリプトを使用します:

      Send-MailMessage -To "AbbeyCrawford@milkyway.com" -From "AbbeyTucker@milkyway.com" -Subject "Daily Meeting Reminder" -Body "This is a reminder about the meeting scheduled for 10:00 AM." -SmtpServer "smtp.milkyway.com"
      

セキュリティスキャンを実行

マルウェアや脆弱性を検出するために、セキュリティスキャンを自動的に実行するには、このスクリプトを使用します:

      Start-MpScan -ScanType QuickScan
      

一時ファイルをクリーンアップ

このスクリプトは、指定したディレクトリから一時ファイルを削除します:

      Get-ChildItem -Path C:\Windows\Temp\*, $env:TEMP\* -Recurse | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
      

サービスを再起動する

Web サーバーや Microsoft SQL Server サービスなどのサービスを再起動するには、次のようなコマンドを使用できます:

      Restart-Service -Name W3SVC
      
      Restart-Service -Name MSSQLSERVER
      

複雑な PowerShell スクリプトのスケジュール実行

より複雑な PowerShell スクリプトもスケジュール実行できます。以下の例が示すとおり、スクリプトの各セクションの目的を説明するコメントを含めるのがベストプラクティスです。

ディスク容量の使用状況をレポートする

このスクリプトは、ディスク容量の使用状況を簡単に概要として示します:

      # Script to report disk space usage

Get-PSDrive -PSProvider FileSystem |

Select-Object Name, @{Name="UsedGB";Expression={"{0:N2}" -f (($_.Used - $_.Free)/1GB)}}, @{Name="FreeGB";Expression={"{0:N2}" -f ($_.Free/1GB)}}, @{Name="TotalGB";Expression={"{0:N2}" -f ($_.Used/1GB)}} |

Format-Table -AutoSize
      

システムの健全性を監視する

時間の経過とともにシステムのパフォーマンスを追跡するには、この PowerShell スクリプトを使用して、CPU使用率、メモリ使用量、ディスク容量をファイルに記録できます:

      # Define the log file path

$logFile = "C:\SystemHealthLog.txt"

# Function to get system health metrics

function Get-SystemHealth {

    # Get CPU usage

    $cpuUsage = Get-Counter '\Processor(_Total)\% Processor Time'

    # Get memory usage

    $memoryUsage = Get-Counter '\Memory\Available MBytes'

    # Get disk space usage for C: drive

    $diskSpace = Get-PSDrive -Name C

    $usedSpace = $diskSpace.Used / 1MB

    $freeSpace = $diskSpace.Free / 1MB

    $totalSpace = $diskSpace.Used + $diskSpace.Free / 1MB

    # Format output

    $cpuUsageFormatted = "{0:N2}%" -f $cpuUsage.CounterSamples[0].CookedValue

    $memoryUsageFormatted = "{0:N2} MB" -f $memoryUsage.CounterSamples[0].CookedValue

    $diskSpaceFormatted = "Used: {0:N2} MB, Free: {1:N2} MB, Total: {2:N2} MB" -f $usedSpace, $freeSpace, $totalSpace

    # Write to log file

    $logEntry = "Date and Time: $(Get-Date) - CPU Usage: $cpuUsageFormatted, Memory Available: $memoryUsageFormatted, Disk Space: $diskSpaceFormatted"

    Add-Content -Path $logFile -Value $logEntry

}

# Run the health check

Get-SystemHealth
      

スケジュール済みタスクの変更または削除

1つ以上のスケジュールされたタスクを変更または削除する前に、既存のすべてのタスクを確認したい場合があります。タスクの一覧を見るには、次の Get-ScheduledTask コマンドレットを実行するだけです。

スケジュールされたタスクを変更する

タスクを変更するには、それを右クリックして Properties を選択します(以下のとおり)。次に必要な設定を編集し、OK をクリックして変更を保存します。

Image

スケジュールされたタスクを削除する

スケジュールされたタスクを削除するには、それを右クリックして Delete を選択し、操作を確認します。

Image

PowerShell スクリプトで予定(スケジュール)タスクを作成する

PowerShell のスケジューリング入門

予定(スケジュール)タスクを作成するには、タスク スケジューラ(Task Scheduler)に加えて、PowerShell という別の選択肢があります。PowerShell のインターフェイスから直接予定(スケジュール)タスクを作成および管理すると、生産性、正確性、セッションの信頼性を大幅に向上させることができ、とりわけ CimSession を使ってリモート システムを管理する場合に効果的です。

予定(スケジュール)タスクを作成および管理するために使用される主な PowerShell コマンドの例は次のとおりです:

  • New-ScheduledTask — PowerShell で新しい予定(スケジュール)タスクのオブジェクトを作成します
  • Register-ScheduledTask — 新しい予定タスクを登録します
  • New-ScheduledTaskAction — 予定タスクの操作を定義します
  • New-ScheduledTaskPrincipal — タスクが実行されるユーザー アカウントを保存します
  • New-ScheduledTaskSettingsSet — 予定タスクの設定を定義します
  • New-ScheduledTaskTrigger — 予定タスクのトリガーを定義します

スケジュール タスク管理に PowerShell を使用する利点

PowerShell を使ってスケジュール タスクを実行する利点は、次のとおりです:

  • 使いやすさ — 複雑なトリガー、条件、アクションを簡単に指定できます。
  • 柔軟性 — 単純なファイルのクリーンアップから、複雑なシステム診断や修復まで幅広いタスクを実行できる、高度なスクリプトを作成して実行できます。
  • 時間の節約 — PowerShell のスケジュール タスクを使用して PowerShell スクリプトを実行すると、反復的または複雑なタスクを手作業で行う必要がなくなります。
  • トラブルシューティングが容易 — PowerShell スクリプトは、エラーに関する詳細情報をログに記録したり、場合によっては自動的に是正を試みたりできます。
  • リモート実行 — スケジュールされたタスクは、複数のマシンで実行し、スロットリング(実行の抑制)できます。これは、大規模なネットワーク環境で特に有益です。
  • セキュリティ — PowerShell には、実行 ポリシー や署名済みスクリプトなど、数多くのセキュリティ機能が含まれており、許可されたスクリプトだけがシステム上で実行されるようにするのに役立ちます。
  • 効率性 — タスクのスケジューリングに PowerShell を使うと、通常はサードパーティの自動化ツールよりもシステム リソースの消費が少なくて済みます。
  • 適応性 — PowerShell のスケジュールされたタスクは、変化するニーズに合わせて簡単に修正、複製、または拡張できます。

PowerShellでスケジュールされたタスクを作成する

スケジュールされたタスクを作成するための PowerShell スクリプトには、次の要素が含まれます。

  • $action — タスクが実行する内容を指定します。たとえば、PowerShell スクリプトの実行、アプリケーションの起動、コマンドの実行などです。
      $action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\InstallOfSoftware.ps1"
      
  • $trigger — タスクが実行されるタイミングを指定します。たとえば、特定の時刻、毎日または毎週、またはシステム イベントに基づく実行などです。
      $trigger = New-ScheduledTaskTrigger -Daily -At "10:00AM"
      
  • $principal — タスクが実行されるユーザー アカウントを指定します。

$principal = New-ScheduledTaskPrincipal -UserId “NT AUTHORITY\SYSTEM” -LogonType Password

  • $settings — タスクの失敗時の扱い方、実行条件、バッテリー電源使用時の動作などのオプションが含まれます:
      $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable
      
  • Register-ScheduledTask — このコマンドはタスクをタスク スケジューラに登録します:
      Register-ScheduledTask -TaskName “Installation of Software" -Action $action -Trigger $trigger -Principal $principal -Settings $settings
      

以下で、完全なスクリプトの実行例を確認できます:

Image

初心者向け Windows PowerShell スクリプト入門

もっと詳しく

セキュリティに関する考慮事項とベストプラクティス

スケジュールされたタスクがもたらすセキュリティ上の影響

タスクをスケジュールするときは、Task Scheduler を使用する場合でも PowerShell を使用する場合でも、以下のセキュリティ上の懸念に必ず注意してください。

  • 権限管理 — スケジュールされたタスクは、タスクがスケジュールされたアカウントの権限で実行されるため、悪用される可能性があります。このリスクは、そのアカウントに昇格したアクセス権がある場合に高くなります。スケジュールされたタスクは、必要な最小限の権限を持つアカウントで実行するようにしてください。
  • スクリプトのセキュリティ — スケジュールされたタスクが呼び出すスクリプトや実行ファイル自体が、セキュリティ上の脆弱性の侵入口になり得ます。たとえば、悪意のある攻撃者は、保護されていないディレクトリに保存されているスクリプトを置き換えたり改変したりして、有害なコマンドを実行できます。
  • プロセス・ハイジャック — スケジュールされたタスクが予測可能で、かつ高い権限で実行される場合、攻撃者は、そのタスクが本来実行すべきスクリプトを悪意のあるコードに置き換える可能性があります。
  • 監査と説明責任 — 悪意のある活動を検知して対応するためには、スケジュールされたタスクの作成、変更、実行に関する詳細なログを保持することが不可欠です。
  • サービス拒否(DoS) — 重要なタイミングに過度なシステムリソースを消費するタスクをスケジュールすることで、攻撃者はホストシステムが本来の機能を実行する能力を妨害できる可能性があります。

適切なセキュリティ・コンテキストでスクリプトを実行し、高権限アカウントを使用することの影響

攻撃対象領域(attack surface)を最小限に抑えるために、常に、そのタスクを実行するのに必要な最小権限を持つアカウントでスクリプトを実行し、管理者権限でスクリプトを実行することは避けてください。これを実現するには、スクリプトが必要とするリソース、権限、そしてスロットル制限(throttle limits)を理解する必要があります。たとえば、そのスクリプトはシステムファイルの変更を要するのか、特定のデータへのアクセスが必要なのか、あるいはネットワーク経由の通信が必要なのか、という点を確認してください。

さらに、実行ポリシーを使用して、スクリプトが実行できる条件を制御します。たとえば、信頼できる発行元によって署名されたスクリプトのみをシステムが実行するように制限できます。

サービスとして実行する必要があるスクリプトには、Windows のマネージド サービス アカウント(MSA)またはグループ マネージド サービス アカウント(gMSA)の使用を検討してください。これらはパスワードが自動的に管理されるため、より安全です。

スケジュール タスクを作成するためのベストプラクティス

スケジュール タスクを使用するメリットを最大限に活かすために、次のベストプラクティスに従ってください。

  • 各タスクに明確な目的があることを確認してください。タスクが何を行うのか、そしてなぜ必要なのかを両方記録して、将来そのタスクに関わる可能性のある他の人を助けられるようにします。
  • 明確な命名規則を確立してください。 混乱や不適切なタスク実行を防ぐため、各スケジュール済みタスクに一意の taskpath が設定されていることを確認してください。
  • 見直してテストしてください。 実行する前にスクリプトを慎重に確認してください。特に、外部ソースから入手したものでは、不審なコードがないかに注目しましょう。運用環境にスケジュール済みタスクを導入する前に、ステージング環境または開発環境で十分にテストしてください。承認済みスクリプトのリポジトリを維持することも、良い実践です。
  • エラーハンドリングを実装してください。 すべてのスクリプトが、一般的なエラーを適切に処理でき、注意が必要な問題が発生した場合は関連するチームメンバーに通知するようにしてください。
  • 依存関係を理解してください。 タスクが外部サービスやデータに依存している場合は、可用性の確認と、障害や遅延が発生した際の適切な(円滑な)ハンドリングが行えるようにしてください。
  • リソース使用量を考慮してください。 ロジックを変更したり、実行頻度を調整したりするなどして、タスクのリソース消費を抑える方法を検討してください。タスクは必要なときに必要なだけ実行しますが、性能上の問題を引き起こすほど頻繁に実行しないようにしましょう。タスクを実行するタイミングを選ぶ際は、他のシステムの稼働状況や、想定される競合などの要因を考慮してください。
  • セキュリティに注意する。上記のセキュリティガイドラインに加えて、安全なリソースへのアクセスが必要なタスクには適切な認証および認可の対策を必ず使用し、タスクが意図せずに機密データを公開しないようにしてください。
  • 重要なタスクで既定(デフォルト)の設定に頼らない。タスクの構成は、あなたの具体的なニーズに合わせてカスタマイズしてください。
  • スクリプトを安全な場所に保存する。スクリプトを実行または変更する必要があるユーザーだけがアクセスできるようにしてください。
  • スクリプトに署名する。 可能な限り、信頼できる認証局(CA)が発行したデジタル証明書でスクリプトに署名してください。これによりスクリプトの作成者を検証できるだけでなく、署名後にスクリプトが改ざんされていないことも保証されます。
  • 監視とアラートを実装する。 ログは、問題の切り分けやタスクの動作を把握するうえで非常に役立ちます。スクリプトの異常なアクティビティやパフォーマンス低下を管理者に通知できるツールがあれば、より迅速な対応が可能になります。
  • 定期的にスケジュールされたタスクを見直し、更新してください。 これには、依存関係の更新、新しい業務ニーズに基づくスケジュール調整、不要になったタスクの停止が含まれます。

結論

Windows タスク スケジューラにより、業務ユーザーや管理者は、毎日や毎週などの定期的なスケジュールで、特定の日付と時刻に PowerShell スクリプトを実行したり、特定の条件が満たされたときに実行したりできます。タスク スケジューラを使ってタスクを自動化すると、タスクを正確かつ確実に実行しながら時間を節約できます。より高度なユーザーは PowerShell を使って、スケジュールされたタスクを作成・管理することも可能です。

スクリプトをスケジュールする際は、タスクの目的を文書化すること、スクリプト内でエラー処理やログ記録を使用すること、そして 最小特権の原則 を用いて過剰な権限を避けてください。権限が侵害され、攻撃者に悪用されると、セキュリティ上の脅威になり得ます。

よくある質問

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

Windows タスク スケジューラは、Windows オペレーティング システムに標準で搭載されているツールで、ユーザーがタスクやプロセスを自動的に実行するようにスケジュールできます。タスク スケジューラを使えば、指定した曜日と時刻、または毎日や毎週のような一定の間隔で実行するようにタスクを設定できます。

PowerShell スクリプトを自動化するためにタスク スケジューラを使うべき理由は何ですか?

タスク スケジューラから PowerShell スクリプトを実行することを選べば、反復的な作業を自動化できるため、あなたが追加の手間をかけなくても、確実かつ正確に実行されます。

タスク スケジューラを開くにはどうすればよいですか?

Win + R」を押して[ファイル名を指定して実行]ダイアログを開きます。taskschd.msc と入力し、Enter を押します。

タスク スケジューラで新しいタスクを作成するにはどうすればよいですか?

タスク スケジューラ ウィンドウの右側にある[操作]ペインで Create Task をクリックします。タスクの名前と説明を入力し、[操作][トリガー][条件][設定]タブで適切な設定を選択して、Save をクリックします。

タスクに名前と説明を付けるメリットは何ですか?

タスクが何を行うのか、そしてなぜそれが必要なのかを説明する、有用で分かりやすい名前と明確な説明を用意することで、各タスクに明確な目的があることを確認しやすくなり、将来そのタスクを扱う他の担当者による保守作業も進めやすくなります。

スケジュールされたタスクのトリガーをどうやって確認しますか?

タスクの Trigger タブでは、タスクをいつ実行するか(スケジュールどおり、システム起動時、またはユーザーのログオン時など)を指定できるほか、繰り返し間隔やその他の条件も設定できます。

タスク スケジューラで PowerShell スクリプトを実行するように設定するにはどうすればよいですか?

  1. Actions」タブに移動し、New をクリックして Start a program をドロップダウン メニューから選択します。
  2. Program/script」フィールドに、 入力 powershell.exe
  3. Add arguments」フィールドに、次を入力します。引数 InstallofSoftware.ps1 をスクリプトの名前に置き換えてください:
      -File C:\Scripts\InstallofSoftware.ps1
      

ユーザーがログオンしていなくてもタスクを実行するには、どうすればよいですか?

タスクの「全般」タブで、オプション Run whether a user is logged on or not を選択します。

タスクの権限を管理し、スクリプトが指定した時間が経過したら停止するようにするにはどうすればよいですか?

タスクは、実行されるアカウントの権限を持ちます。タスクを実行するアカウントは「全般」タブで指定できます。

スクリプトを指定した期間後に停止するには、[設定] タブで タスクが次の時間より長く実行された場合は停止 を選択し、希望する時間数または日数を指定します。

スクリプトの実行状況の表示(可視性)を制御するにはどうすればよいですか?

「Action(操作)」タブで -NoExit または -Command パラメーターを Add Argument フィールドに追加すると、スクリプトの実行と表示(可視性)を制御できます。

想定どおりに実行されないタスクをトラブルシューティングするのに役立つヒントはありますか?

パスワードの期限切れや変更によってタスクが失敗することがあります。設定が不適切、または悪意を持って設計されたスケジュールタスク(例:過剰にシステムリソースを消費するタスク)は、ホストマシンでサービス拒否(DoS)につながり、その可用性とパフォーマンスを低下させる可能性があります。

既存のスケジュールされたタスクをどのように変更しますか?

Windows タスク スケジューラ ライブラリでタスクを右クリックし、Properties を選択して、タスクの設定を必要に応じて変更します。

スケジュールされたタスクを削除するにはどうすればよいですか?

タスク スケジューラ ライブラリでタスクを右クリックし、Delete を選択します。

タスクのスケジューリングに PowerShell を使う利点は何ですか?

タスク スケジューラの GUI と比べて、PowerShell はタスクの構成、エラー処理、ログ記録に関してよりきめ細かな制御を提供し、カスタムのスケジューリング ロジックを定義しやすくします。さらに PowerShell を使うと、集中した場所から複数のリモート システム上でタスクをスケジュールし、実行することができます。

New-ScheduledTaskTrigger および Register-ScheduledTask cmdlet は何のために使用しますか?

New-ScheduledTaskTrigger の cmdlet はタスクのトリガーを定義するために使用され、Register-ScheduledTask の cmdlet は Windows タスク スケジューラにタスクを登録するために使用されます。

スケジュールされたタスクにはどのようなセキュリティ上の影響がありますか?

高い権限を持つアカウントでスケジュールされたタスクを実行すると、そのアカウントが侵害された場合にセキュリティ リスクが増大します。したがって、常に最小権限の原則を念頭に置いてアカウントを選択してください。

適切なセキュリティ コンテキストでスクリプトを実行するには、どうすればよいですか?

最も重要なのは、タスクを完了するために必要な最小限の権限を持つアカウントの下でスクリプトを実行することです。また、適切な場合は、マネージド サービス アカウント(MSA)またはグループ マネージド サービス アカウント(gMSA)を使用してください。実行ポリシーを利用して、信頼できる発行元によって署名されたスクリプトのみを許可するように制限することを検討しましょう。可能な限り、信頼できる Certificate Authority が発行したデジタル証明書でスクリプトに署名してください。

スケジュールされたタスクを整理し、管理するためのベスト プラクティスは何ですか?

主なベスト プラクティスとして、スクリプトをアクセス権限を制御できる安全な場所に保存し、本番環境に導入する前にテスト環境でスクリプトを評価することが挙げられます。

よくある質問

共有する

もっと詳しく

著者について

Tyler Reese

プロダクト マネジメント担当副社長、CISSP

ソフトウェア セキュリティ業界で20年以上の経験を持つ Tyler Reese は、今日の企業が直面している急速に変化するアイデンティティおよびセキュリティ上の課題について深く理解しています。現在、彼は Netwrix Identity and Access Management ポートフォリオのプロダクト ディレクターを務めており、市場動向の評価、IAM 製品ラインの方向性の設定、そして最終的にはエンド ユーザーのニーズに応えることが主な責任です。彼の専門的な経験は、Fortune 500 企業向けの IAM コンサルティングから、大手のダイレクト・トゥ・コンシューマー企業のエンタープライズ アーキテクトとしての業務まで多岐にわたります。現在、彼は CISSP の認定資格を保有しています。