web-dev-qa-db-ja.com

Windowsタスクスケジューラを使用してPowerShellスクリプトを自動的に実行するにはどうすればよいですか?

メールを送信するPowerShellスクリプトが1つあります。そのスクリプトを1分ごとに自動的に実行したいと思います。タスクスケジューラを使用してどうすればよいですか?

現在、タスクを作成し、スクリプトのパスを提供しています。しかし、そのスケジューラは、実行する代わりにスクリプトを開きます。

60
AK47

スケジュールされたタスクを作成し、アクションを次のように設定します。

プログラム/スクリプト:Powershell.exe

引数:-File "C:\Users\MyUser\Documents\ThisisMyFile.ps1"

91
Kevin_

-RepeatIndefinitely以上でPowerShell 3.0または4.0を使用した例を次に示します。

# Trigger
$middayTrigger = New-JobTrigger -Daily -At "12:40 AM"
$midNightTrigger = New-JobTrigger -Daily -At "12:00 PM"
$atStartupeveryFiveMinutesTrigger = New-JobTrigger -once -At $(get-date) -RepetitionInterval $([timespan]::FromMinutes("1")) -RepeatIndefinitely

# Options
$option1 = New-ScheduledJobOption –StartIfIdle

$scriptPath1 = 'C:\Path and file name 1.PS1'
$scriptPath2 = "C:\Path and file name 2.PS1"

Register-ScheduledJob -Name ResetProdCache -FilePath $scriptPath1 -Trigger  $middayTrigger,$midNightTrigger -ScheduledJobOption $option1
Register-ScheduledJob -Name TestProdPing -FilePath $scriptPath2 -Trigger $atStartupeveryFiveMinutesTrigger
14
JPBlanc

タスクスケジューラでスクリプトへのパスのみを使用する代わりに、タスクスケジューラでスクリプトを使用してPowerShellを起動する必要があります。

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -NonInteractive -File "C:\Path\To\Your\PS1File.ps1"

これらのスイッチの説明については、powershell /?を参照してください。

それでも問題が解決しない場合は、 この質問 をお読みください。

6
Ocaso Protal

私の場合、スクリプトにはパラメーターがあるため、次のように設定します。

引数-Command "& C:\scripts\myscript.ps1 myParam1 myParam2"

4
Carlos Coelho

Unblock-Fileコマンドレットを使用して、この特定のスクリプトの実行のブロックを解除できます。これにより、セキュリティ上の懸念のために不要な永続的なポリシー変更を行うことができなくなります。

Unblock-File path_to_your_script

ソース:nblock-File

2
AlexeyGy

インターネットでの数時間のテストと調査の後、ビデオWindowsタスクを使用してPowerShellスクリプトをスケジュールするおかげで、タスクスケジューラを使用してPowerShellスクリプトを開始する方法がようやく見つかりましたジャック・フルーによるスケジューラー@sharepointjack

プログラム/スクリプト-> powershell.exeにフルパスを入力

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe

引数を追加します->スクリプトへのフルパス、および「」なしのスクリプト。

開始(オプション)->スクリプトが存在するディレクトリ、「」なし。

2
Mickael