about_Scheduled_Jobs_Basics
適用対象: Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0
トピック
about_Scheduled_Jobs_Basics
概要
ジョブをスケジュールし、管理する方法について説明します。
詳細説明
このトピックでは、スケジュールされたジョブを作成および管理するための基本的なタスクを実行する方法について説明します。高度なタスクについては、「about_Scheduled_Jobs_Advanced」を参照してください。
スケジュールされたジョブの作成方法
スケジュールされたジョブを作成するには、Register-ScheduledJob コマンドレットを使用します。このコマンドレットには、名前と、ジョブで実行するコマンドまたはスクリプトが必要です。RunNow パラメーターを追加することでジョブをすぐに実行するか、ジョブの作成時かその後で、ジョブ トリガーを作成しジョブ オプションを設定します。
スクリプトを実行するジョブを作成するには、FilePath パラメーターを使用してスクリプト ファイルのパスを指定します。コマンドを実行するジョブを作成するには、ScriptBlock パラメーターを使用します。
次のコマンドでは、Get-Process コマンドを実行する ProcessJob を作成します。このスケジュールされたジョブは、既定のジョブ オプションを使用し、ジョブ トリガーはありません。
PS C:\> Register-ScheduledJob -Name ProcessJob -ScriptBlock { Get-Process }
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
8 ProcessJob {} Get-Process True
ジョブ トリガーの作成方法
ジョブ トリガーは、スケジュールされたジョブを自動的に開始します。ジョブ トリガーでは、1 回のみ、定期的なスケジュール、またはイベント (ユーザーがログオンしたときや Windows が起動したときなど) を指定できます。各ジョブには、ゼロ個、1 個、または複数のジョブ トリガーを設定できます。
ジョブ トリガーを作成するには、New-JobTrigger コマンドレットを使用します。次のコマンドは、毎週月曜日と木曜日の午前 5 時 00 分にジョブを開始するジョブ トリガーを作成します。ジョブ トリガーは $t 変数に保存されます。
$t = New-JobTrigger -Weekly -DaysOfWeek "Monday", "Thursday" -At "5:00 AM"
ジョブ トリガーは省略可能です。Register-ScheduledJob コマンドに RunNow パラメーターを追加するか、Start-Job コマンドレットを使用することで、スケジュールされたジョブをいつでも開始できます。
ジョブ トリガーの追加方法
スケジュールされたジョブにジョブ トリガーを追加すると、ジョブ トリガーは、スケジュールされたジョブの XML ファイルに追加され、スケジュールされたジョブの一部になります。
ジョブ トリガーは、スケジュールされたジョブを作成するときに追加でき、後から追加することもできます。また、スケジュールされたジョブのジョブ トリガーはいつでも変更できます。
Windows PowerShell® では、タスク スケジューラで使用されるのと同じジョブ トリガーの一部が使用されます。ジョブ トリガーの詳細については、New-JobTrigger コマンドレットのヘルプ トピックを参照してください。ここにセクションの本文を挿入してください。
次のコマンドでは、Register-ScheduledJob コマンドレットを使用して、処理ジョブを作成します。Trigger パラメーターを使用して、$t 変数内のジョブ トリガーを指定します。
Register-ScheduledJob -Name ProcessJob -ScriptBlock {Get-Command} -Trigger $t
また、ジョブ トリガーは、既存のスケジュールされたジョブにいつでも追加できます。次のコマンドは、スケジュールされたジョブ ProcessJob に、$t 変数内のジョブ トリガーを追加します。
Add-JobTrigger -Name ProcessJob -Trigger $t
このコマンドの結果、ジョブ トリガーが、毎週月曜日と木曜日の午前 5 時 00 分に ProcessJob を自動的に開始します。
ジョブ トリガーの取得方法
スケジュールされたジョブのジョブ トリガーを取得するには、Get-JobTrigger コマンドレットを使用します。Name、ID、および InputObject パラメーターを使用して、スケジュールされたジョブ (ジョブ トリガーではありません) を指定します。
次のコマンドは、ProcessJob のジョブ トリガーを取得します。
PS C:\> Get-JobTrigger -Name ProcessJob
Id Frequency Time DaysOfWeek Enabled
-- --------- ---- ---------- -------
1 Weekly 11/7/2011 5:00:00 AM {Monday, Thursday} True
ジョブ オプションの作成方法
ジョブ オプションは、ジョブを開始および実行するための条件を設定します。すべてのジョブには、変更しない限り既定のジョブ オプションが設定されます。ジョブ オプションによっては、スケジュールされた時刻にジョブが実行されなくなる可能性があるため、ジョブ オプションについて理解し、慎重に使用することが重要です。
Windows PowerShell では、タスク スケジューラで使用されるのと同じジョブ オプションが使用されます。ジョブ オプションの詳細については、New-ScheduledJobOption コマンドレットのヘルプ トピックを参照してください。「Get-Help New-ScheduledJobOption」と入力するか、https://go.microsoft.com/fwlink/?LinkID=223915 でオンライン ヘルプ トピックを参照してください。
ジョブ オプションは、スケジュールされたジョブの XML ファイルに格納されます。ジョブ オプションは、スケジュールされたジョブを作成するときに設定でき、いつでも変更できます。
次のコマンドは、スケジュールされたジョブのオプション WakeToRun が True に設定された、スケジュールされたジョブのオプションを作成します。WakeToRun オプションは、コンピューターがスリープまたは休止状態であっても、スケジュールされた開始時刻にスケジュールされたジョブを実行します。このコマンドは、ジョブ オプションを $o 変数に保存します。
$o = New-ScheduledJobOption -WakeToRun
ジョブ オプションの取得方法
スケジュールされたジョブのジョブ オプションを取得するには、Get-ScheduledJobOption コマンドレットを使用します。Name、ID、および InputObject パラメーターを使用して、スケジュールされたジョブ (ジョブ オプションではありません) を指定します。
次のコマンドは、ProcessJob のジョブ オプションを取得します。ここにセクションの本文を挿入してください。
PS C:\> 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
ジョブ オプションの変更方法
スケジュールされたジョブのジョブ オプションは、スケジュールされたジョブを作成するときか、その後いつでも変更できます。
次のコマンドは、Register-JobTrigger コマンドレットを使用して、処理ジョブを作成します。ScheduledJobOption パラメーターを使用して、$o 変数内のジョブ オプションを指定しています。
Register-JobTrigger -Name ProcessJob -ScriptBlock {Get-Process} -ScheduledJobOption $o
また、既存のスケジュールされたジョブのジョブ オプションはいつでも変更できます。次のコマンドは、Set-ScheduledJobOption コマンドレットを使用して、スケジュールされたジョブ ProcessJob の WakeToRun オプションの値を True に変更します。
PSScheduledJob モジュールのすべての Set コマンドレットと同様に、Set-ScheduledJobOption コマンドレットには、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
スケジュールされたジョブのインスタンスの取得方法
スケジュールされたジョブが開始されると、Windows PowerShell は、標準的な Windows PowerShell バックグラウンド ジョブに似たジョブ インスタンスを作成します。Get-Job、Stop-Job、および Receive-Job などの Job コマンドレットを使用してイベント インスタンスを管理できます。
注記:スケジュールされたジョブのインスタンスに対して Job コマンドレットを使用するには、セッションに PSScheduledJob モジュールをインポートする必要があります。PSScheduledJob モジュールをインポートするには、「Import-Module PSScheduledJob」と入力するか、Get-ScheduledJob などのスケジュールされたジョブのコマンドレットを使用します。
Windows PowerShell のスケジュールされたジョブのすべてのインスタンス (およびアクティブなすべての標準ジョブ) を取得するには、Get-Job コマンドレットを使用します。次のコマンドは、PSScheduledJob モジュールをインポートし、ローカル コンピューター上のすべてのジョブを取得します。
PS C:\> Import-Module PSScheduledJob
PS C:\> Get-Job
次のコマンドは、ローカル コンピューター上の ProcessJob のすべてのインスタンスを取得します。
PS C:\> 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
既定では、一般に同じスケジュールされたジョブのインスタンスを区別する開始時刻が表示されません。
次のコマンドは、Format-Table コマンドレットを使用して、スケジュールされたジョブの Name、ID、および BeginTime プロパティを表示します。
PS C:\> 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 コマンドレットを使用します。
注記:スケジュールされたジョブのインスタンスに対して Job コマンドレットを使用するには、セッションに PSScheduledJob モジュールをインポートする必要があります。PSScheduledJob モジュールをインポートするには、「Import-Module PSScheduledJob」と入力するか、Get-ScheduledJob などのスケジュールされたジョブのコマンドレットを使用します。
次のコマンドは、スケジュールされたジョブ ProcessJob の最新のインスタンス (ID = 51) の結果を取得します。
PS C:\> Import-Module PSScheduledJob
PS C:\> Receive-Job -ID 51 -Keep
スケジュールされたジョブの結果はディスクに保存されるため、Receive-Job の Keep パラメーターは必要ありません。ただし、Keep パラメーターを指定しないと、スケジュールされたジョブの結果を、Windows PowerShell セッションごとに 1 回しか取得できません。新しい Windows PowerShell セッションを開始するには、「PowerShell」と入力するか、新しい Windows PowerShell ウィンドウを開きます。
関連項目
about_Scheduled_Jobs
about_Scheduled_Jobs_Advanced
about_Scheduled_Jobs_Troubleshooting