about_Scheduled_Jobs_Basics
簡単な説明
ジョブをスケジュールし、管理する方法について説明します。
詳細な説明
このドキュメントでは、スケジュールされたジョブの作成と管理の基本的なタスクを実行する方法について説明します。 より高度なタスクの詳細については、 about_Scheduled_Jobs_Advancedを参照してください。
PSScheduledJob モジュールに含まれるコマンドレットの詳細については、「PSScheduledJobを参照してください。
スケジュールされたジョブを作成する方法
スケジュールされたジョブを作成するには、 Register-ScheduledJob
コマンドレットを使用します。 このコマンドレットには、ジョブが実行される名前とコマンドまたはスクリプトが必要です。 RunNow パラメーターを追加してジョブをすぐに実行するか、ジョブ の作成時にジョブ トリガーを作成してジョブ オプションを設定するか、既存のジョブを編集します。
スクリプトを実行するジョブを作成するには、 FilePath パラメーターを使用してスクリプト ファイルへのパスを指定します。 コマンドを実行するジョブを作成するには、 ScriptBlock パラメーターを使用します。
Register-ScheduledJob
コマンドレットは、Get-Process
コマンドを実行する ProcessJob を作成します。 このスケジュールされたジョブには、既定のジョブ オプションがあり、ジョブ トリガーはありません。
Register-ScheduledJob -Name ProcessJob -ScriptBlock { Get-Process }
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
8 ProcessJob {} Get-Process True
ジョブ トリガーを作成する方法
ジョブ トリガーは、スケジュールされたジョブを自動的に開始します。 ジョブ トリガーには、1 回限りまたは定期的なスケジュールや、ユーザーがログオンしたときや Windows が起動する場合などのイベントを指定できます。 各ジョブには、0 個、1 個、または複数のジョブ トリガーを指定できます。
ジョブ トリガーを作成するには、 New-JobTrigger
コマンドレットを使用します。 次のコマンドは、毎週月曜日と木曜日の午前 5 時にジョブを開始するジョブ トリガーを作成します。
このコマンドは、ジョブ トリガーを $T
変数に保存します。
$T = New-JobTrigger -Weekly -DaysOfWeek "Monday", "Thursday" -At "5:00 AM"
ジョブ トリガーは省略可能です。 スケジュールされたジョブはいつでも、Register-ScheduledJob
コマンドに RunNow パラメーターを追加するか、Start-Job
コマンドレットを使用して開始できます。
ジョブ トリガーを追加する方法
スケジュールされたジョブにジョブ トリガーを追加すると、スケジュールされたジョブのスケジュールされたジョブ XML ファイルにジョブ トリガーが追加され、スケジュールされたジョブの一部になります。
スケジュールされたジョブを作成するとき、または既存のジョブを編集するときに、スケジュールされたジョブにジョブ トリガーを追加できます。 スケジュールされたジョブのジョブ トリガーはいつでも変更できます。
PowerShell では、タスク スケジューラが使用するのと同じジョブ トリガーの一部が使用されます。 ジョブ トリガーの詳細については、 New-JobTrigger コマンドレットのヘルプ トピックを参照してください。
次の例では、スプラッティングを使用して、Register-ScheduledJob
コマンドレットに渡されるパラメーター値である$JobParms
を作成します。 詳細については、 about_Splatting.md を参照してください。
Register-ScheduledJob
は、スケジュールされたジョブを作成するために@JobParms
を使用します。 Trigger パラメーターを使用して、$T
変数にジョブ トリガーを指定します。
$JobParms = @{
Name = "ProcessJob"
ScriptBlock = {Get-Command}
Trigger = $T
}
Register-ScheduledJob @JobParms
既存のスケジュールされたジョブにジョブ トリガーをいつでも追加することもできます。 Add-JobTrigger
コマンドレットは、$T
変数のジョブ トリガーを、スケジュールされたジョブProcessJob に追加します。
Add-JobTrigger -Name ProcessJob -Trigger $T
その結果、ジョブ トリガーは、毎週月曜日と木曜日の午前 5 時にProcessJob を自動的に開始します。
ジョブ トリガーを取得する方法
スケジュールされたジョブのジョブ トリガーを取得するには、 Get-JobTrigger
コマンドレットを使用します。 Name、ID、および InputObject パラメーターを使用して、ジョブ トリガーではなくスケジュールされたジョブを指定します。
Get-JobTrigger
は、 ProcessJob のジョブ トリガーを取得します。
Get-JobTrigger -Name ProcessJob
Id Frequency Time DaysOfWeek Enabled
-- --------- ---- ---------- -------
1 Weekly 11/7/2011 5:00:00 AM {Monday, Thursday} True
ジョブ オプションを作成する方法
ジョブ オプションは、ジョブを開始および実行するための条件を確立します。 変更しない限り、すべてのジョブには既定のジョブ オプションがあります。 ジョブ オプションは、スケジュールされた時刻にジョブが実行されないようにする可能性があるため、ジョブ オプションを理解し、慎重に使用することが重要です。
PowerShell では、タスク スケジューラで使用されるのと同じジョブ オプションが使用されます。 ジョブ オプションの詳細については、 New-ScheduledJobOption のヘルプ トピックを参照してください。
ジョブ オプションは、スケジュールされたジョブ XML ファイルに格納されます。 スケジュールされたジョブを作成したり、いつでも変更したりするときに、ジョブ オプションを設定できます。
New-ScheduledJobOption
コマンドレットは、スケジュールされたジョブ オプションWakeToRunスケジュールされたジョブ オプションを True に設定するスケジュールされたジョブ オプションを作成します。 WakeToRun オプションは、スケジュールされた開始時刻にコンピューターがスリープ状態または休止状態にある場合でも、スケジュールされたジョブを実行します。 このコマンドは、ジョブ オプションを $O
変数に保存します。
$O = New-ScheduledJobOption -WakeToRun
ジョブ オプションを取得する方法
スケジュールされたジョブのジョブ オプションを取得するには、 Get-ScheduledJobOption
コマンドレットを使用します。 ジョブ オプションではなく、スケジュールされたジョブを指定するには、 Name、 ID、および InputObject パラメーターを使用します。
Get-ScheduledJobOption
は、 ProcessJob のジョブ オプションを取得します。
Get-ScheduledJobOption -Name ProcessJob
StartIfOnBatteries : False
StopIfGoingOnBatteries : True
WakeToRun : False
StartIfNotIdle : True
StopIfGoingOffIdle : False
RestartOnIdleResume : False
IdleDuration : 00:10:00
IdleTimeout : 01:00:00
ShowInTaskScheduler : True
RunElevated : False
RunWithoutNetwork : True
DoNotAllowDemandStart : False
MultipleInstancePolicy : IgnoreNew
JobDefinition : Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition
ジョブ オプションを変更する方法
スケジュールされたジョブを作成するとき、または既存のジョブを編集するときに、スケジュールされたジョブのジョブ オプションを変更できます。
スプラッティングされた $JobParms
は、プロセス ジョブを作成するために Add-JobTrigger
コマンドレットに渡されます。 ScheduledJobOption パラメーターを使用して、$O
変数にジョブ オプションを指定します。
$JobParms = @{
Name = "ProcessJob"
ScriptBlock = {Get-Process}
ScheduledJobOption = $O
}
Add-JobTrigger @JobParms
ジョブ オプションは、いつでも既存のスケジュールされたジョブに変更することもできます。
次のコマンドでは、Set-ScheduledJobOption
コマンドレットを使用して、ProcessJob scheduledJob の WakeToRun オプションの値を True に変更します。
Set-ScheduledJobOption
コマンドレットなど、PSScheduledJob モジュールのSet
コマンドレットには、Name または ID パラメーターがありません。 InputObject パラメーターを使用して、スケジュールされたジョブ オプションを指定したり、スケジュールされたジョブGet-ScheduledJobOption
コマンドレットからパイプ処理してSet-ScheduledJobOption
したりできます。
この例では、 Get-ScheduledJob
コマンドレットを使用して ProcessJob を取得します。 Get-ScheduledJobOption
コマンドレットを使用して、ProcessJob のジョブ オプションを取得し、Set-ScheduledJobOption
コマンドレットを使用して ProcessJob の WakeToRun ジョブ オプションを True に変更します。
Get-ScheduledJob -Name ProcessJob | Get-ScheduledJobOption |
Set-ScheduledJobOption -WakeToRun
スケジュールされたジョブ インスタンスを取得する方法
スケジュールされたジョブが開始されると、PowerShell は標準の PowerShell バックグラウンド ジョブに似たジョブ インスタンスを作成します。 Get-Job
、Stop-Job
、Receive-Job
などのジョブ コマンドレットを使用して、ジョブ インスタンスを管理できます。
Note
スケジュールされたジョブのインスタンスでジョブ コマンドレットを使用するには、 PSScheduledJob モジュールをセッションにインポートする必要があります。 PSScheduledJob モジュールをインポートするには、Import-Module PSScheduledJob
を入力するか、Get-ScheduledJob
などのスケジュールされたジョブ コマンドレットを使用します。
PowerShell のスケジュールされたジョブのすべてのインスタンスとすべてのアクティブな標準ジョブを取得するには、 Get-Job
コマンドレットを使用します。 Import-Module
コマンドレットは、PSScheduledJob モジュールをインポートし、ローカル コンピューター上のジョブGet-Job
取得します。
Import-Module PSScheduledJob
Get-Job
Get-Job
は、ローカル コンピューター上の ProcessJob のインスタンスを取得します。
Get-Job -Name ProcessJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------ ----- ----------- -------- -------
45 ProcessJob PSScheduledJob Completed True localhost Get-Process
46 ProcessJob PSScheduledJob Completed True localhost Get-Process
47 ProcessJob PSScheduledJob Completed True localhost Get-Process
48 ProcessJob PSScheduledJob Completed True localhost Get-Process
49 ProcessJob PSScheduledJob Completed True localhost Get-Process
50 ProcessJob PSScheduledJob Completed True localhost Get-Process
51 ProcessJob PSScheduledJob Completed True localhost Get-Process
既定の表示には開始時刻は表示されません。これは通常、同じスケジュールされたジョブのインスタンスを区別します。
Get-Job
コマンドレットは、パイプラインの下にオブジェクトを送信します。 Format-Table
コマンドレットは、スケジュールされたジョブの Name、ID、および BeginTime プロパティを表示します。
Get-Job ProcessJob | Format-Table -Property Name, ID, BeginTime
Name Id BeginTime
---- -- ---------
ProcessJob 43 11/2/2011 3:00:02 AM
ProcessJob 44 11/3/2011 3:00:02 AM
ProcessJob 45 11/4/2011 3:00:02 AM
ProcessJob 46 11/5/2011 3:00:02 AM
ProcessJob 47 11/6/2011 3:00:02 AM
ProcessJob 48 11/7/2011 12:00:01 AM
ProcessJob 49 11/7/2011 3:00:02 AM
ProcessJob 50 11/8/2011 3:00:02 AM
スケジュールされたジョブの結果を取得する
スケジュールされたジョブのインスタンスの結果を取得するには、 Receive-Job
コマンドレットを使用します。
Note
スケジュールされたジョブのインスタンスで Job コマンドレットを使用するには、 PSScheduledJob モジュールをセッションにインポートする必要があります。 PSScheduledJob モジュールをインポートするには、Import-Module PSScheduledJob
を入力するか、Get-ScheduledJob
などのスケジュールされたジョブ コマンドレットを使用します。
この例では、スケジュールされたジョブ (ID = 51) ProcessJob の最新のインスタンスの結果を取得します。
Import-Module PSScheduledJob
Receive-Job -ID 51 -Keep
スケジュールされたジョブの結果はディスクに保存されるため、Receive-Job
の Keep パラメーターは必要ありません。 ただし、 Keep パラメーターを指定しないと、各 PowerShell セッションでスケジュールされたジョブの結果を 1 回だけ取得できます。 新しい PowerShell セッションを開始するには、「 PowerShell
」と入力するか、新しい PowerShell ウィンドウを開きます。
関連項目
PowerShell