次の方法で共有


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 コマンドレットを使用します。 NameID、および 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 コマンドレットを使用します。 ジョブ オプションではなく、スケジュールされたジョブを指定するには、 NameID、および 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-JobStop-JobReceive-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 コマンドレットは、スケジュールされたジョブの NameID、および 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-JobKeep パラメーターは必要ありません。 ただし、 Keep パラメーターを指定しないと、各 PowerShell セッションでスケジュールされたジョブの結果を 1 回だけ取得できます。 新しい PowerShell セッションを開始するには、「 PowerShell 」と入力するか、新しい PowerShell ウィンドウを開きます。

関連項目