悩 なやみ箱 暮らしと日常の悩みを、手順で解決するサイト

タスクスケジューラでPowerShellのスクリプトが手動では動くのに実行されない

2026年9月時点
■ 先に結論

タスクから起動すると、作業フォルダーや実行アカウントが手動と変わることがあるためです。
プログラムは powershell.exe にし、引数で -ExecutionPolicy Bypass -File とスクリプトのフルパスを渡します。
スクリプト内のパスもフルパスにし、ログオンの設定を見直します。

  1. スクリプトを直接動かして確かめる
  2. 実行するプログラムを powershell.exe にし、.ps1 は引数で渡す
  3. 引数に -ExecutionPolicy Bypass を入れる
  4. スクリプト内の相対パスをフルパスか $PSScriptRoot 基準に直す
  5. ログオンしているときだけ実行する設定で一時的に試す
  6. 元の設定に戻しても結果(出力ファイルなど)ができていれば解決

※2026年9月時点のMicrosoft公式ドキュメントに基づく、Windows 11/10の「タスク スケジューラ」とWindows PowerShell 5.1(powershell.exe)での説明です。

壁掛け時計の下の机に、デスクライトと鉢植え、マグカップ、キーボード、積んだ本が並んでいる絵

1スクリプトを直接動かして確かめる

公式の切り分け記事も、タスクに入れる前にPowerShellやコマンド プロンプトでスクリプトを直接テストするよう勧めています。コマンド プロンプトで、タスクに書くのと同じ powershell.exe -ExecutionPolicy Bypass -File "C:\scripts\backup.ps1" を打ちます(作業フォルダーと実行アカウントは手動のまま)。手動がPowerShell 7なら pwsh.exe で試します。ここでエラーが出るなら、タスクではなくスクリプト側を直します。

出典: スケジュールされたタスクが実行されていない

2実行するプログラムを powershell.exe にする

.ps1 をダブルクリックPowerShellは実行しない

タスクでは powershell.exe を起動し、-File でスクリプトを渡す

タスクの操作では、プログラムの欄に powershell.exe、引数の欄に -ExecutionPolicy Bypass -File "C:\scripts\backup.ps1" と書きます。-File より後ろはすべてスクリプトへ渡す値になるので、-File とパスは最後に置きます。

手動でPowerShell 7を使っているなら、プログラムの欄も pwsh.exe にそろえます。

出典: about_Scripts / about_PowerShell_exe / about_Pwsh

3実行ポリシーはそのタスクの中だけで指定する

Windows クライアントの既定の実行ポリシーは Restricted で、スクリプトを実行できません。自分に設定した実行ポリシー(CurrentUser)は現在のユーザーにのみ効くため、タスクが別のアカウントで動くと効かないことがあります。-ExecutionPolicy はそのセッションだけの指定で、レジストリの設定は変えずに済みます。

Bypass は何もブロックせず警告も出さない設定です。自分で書いたか、中身を確かめたスクリプトだけに使ってください。また、グループ ポリシーで決められた実行ポリシーより優先されることはないので、会社のPCで効かない場合は管理者に相談します。

出典: about_Execution_Policies

4作業フォルダーとスクリプト内のパスを確かめる

作業フォルダーを指定しないと、タスクは %windir%\system32 で実行されます。.\data.csv のような相対パスも、そこを基準に探されます。操作の編集画面で作業フォルダーを指定する欄にスクリプトのフォルダーを入れるか、パスをフルパスか $PSScriptRoot(実行中のスクリプトのフォルダーが入る)基準に直します。

出典: New-ScheduledTaskAction / about_Scripts

5ログオンの設定で切り分ける

ログオンしているときだけ実行
  • ログオン中に手動実行で動くか試す
  • 動けば実行アカウントまわりが原因と考えられる
ログオンにかかわらず実行
  • タスクを動かすアカウントを確かめる
  • そのアカウントでファイルに入れるか確かめる

公式の切り分け手順も、ログオン時だけの設定で実行アカウントまわり(セキュリティ コンテキスト)の問題かを見分けるよう勧めています。切り分け用の一時的な設定なので、動いたら元に戻し、実行アカウントがファイルやフォルダーに入れるかを確かめます。

出典: スケジュールされたタスクが実行されていない

それでも動かない時のチェックリスト

正常に完了しても期待した出力が無いことがあるので、スクリプトの結果で確かめます。

出典: スケジュールされたタスクが実行されていない / about_PowerShell_exe / Start-Transcript