Register-ScheduledJob

スケジュールされたジョブを作成します。

構文

Register-ScheduledJob
        [-ScriptBlock] <ScriptBlock>
        [-Name] <String>
        [-Trigger <ScheduledJobTrigger[]>]
        [-InitializationScript <ScriptBlock>]
        [-RunAs32]
        [-Credential <PSCredential>]
        [-Authentication <AuthenticationMechanism>]
        [-ScheduledJobOption <ScheduledJobOptions>]
        [-ArgumentList <Object[]>]
        [-MaxResultCount <Int32>]
        [-RunNow]
        [-RunEvery <TimeSpan>]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Register-ScheduledJob
        [-FilePath] <String>
        [-Name] <String>
        [-Trigger <ScheduledJobTrigger[]>]
        [-InitializationScript <ScriptBlock>]
        [-RunAs32]
        [-Credential <PSCredential>]
        [-Authentication <AuthenticationMechanism>]
        [-ScheduledJobOption <ScheduledJobOptions>]
        [-ArgumentList <Object[]>]
        [-MaxResultCount <Int32>]
        [-RunNow]
        [-RunEvery <TimeSpan>]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]

説明

Register-ScheduledJob コマンドレットは、ローカル コンピューターにスケジュールされたジョブを作成します。

スケジュールされたジョブは、1 回限りまたは定期的なスケジュールで自動的に開始できるWindows PowerShellバックグラウンド ジョブです。 スケジュールされたジョブは、ディスクに保存され、タスク スケジューラに登録されます。そのため、タスク スケジューラまたは Windows PowerShell のスケジュールされたジョブ コマンドレットを使用して管理できます。

スケジュールされたジョブが開始されると、スケジュールされたジョブのインスタンスが作成されます。 スケジュールされたジョブのインスタンスは、結果がディスクに保存される点を除き、Windows PowerShell のバックグラウンド ジョブと同じです。 ジョブ インスタンスの開始、表示、結果の取得には、ジョブの開始、取得、Receive-Jobなどのジョブ コマンドレットを使用します。

スケジュールされた新しいジョブを作成するには、Register-ScheduledJob を使用します。 スケジュールされたジョブで実行するコマンドを指定するには、ScriptBlock パラメーターを使用します。ジョブで実行するスクリプトを指定するには、FilePath パラメーターを使用します。

Windows PowerShellスケジュールされたジョブでは、スケジュールされたタスクにタスク スケジューラが使用するのと同じジョブ トリガーとジョブ オプションが使用されます。

Register-ScheduledJobTrigger パラメーターは、ジョブを開始する 1 つまたは複数のジョブ トリガーを追加します。 Trigger パラメーターは省略可能であるため、スケジュールされたジョブの作成時にトリガーを追加したり、後でジョブ トリガーを追加したり、RunNow パラメーターを追加してジョブをすぐに開始したり、Start-Job コマンドレットを使用していつでもすぐにジョブを開始したり、トリガーされていないスケジュールされたジョブを他のジョブのテンプレートとして保存したりできます。

Options パラメーターを使用すると、スケジュールされたジョブのオプション設定をカスタマイズできます。 Options パラメーターも省略可能です。そのため、スケジュールされたジョブを作成するときにジョブ オプションを設定することや、いつでもジョブ オプションを変更することができます。 ジョブ オプションの設定によっては、スケジュールされたジョブが実行されない場合があるため、ジョブ オプションを確認し、慎重に設定してください。

Register-ScheduledJob は、Windows PowerShellに含まれる PSScheduledJob モジュール内のジョブ スケジューリング コマンドレットのコレクションの 1 つです。

スケジュールされたジョブの詳細については、PSScheduledJob モジュールの概要トピックを参照してください。 PSScheduledJob モジュールをインポートし、次 Get-Help about_Scheduled* のように入力するか、about_Scheduled_Jobsを参照してください。

このコマンドレットは、Windows PowerShell 3.0 で導入されました。

例 1: スケジュールされたジョブを作成する

PS C:\> Register-ScheduledJob -Name "Archive-Scripts" -ScriptBlock { dir $home\*.ps1 -Recurse | Copy-Item -Destination "\\Server\Share\PSScriptArchive" }

このコマンドは、スケジュールされたジョブ Archive-Scripts を作成します。 ScriptBlock パラメーターの値には、$home ディレクトリで .ps1 ファイルを再帰的に検索し、見つかったファイルをファイル共有のディレクトリにコピーするコマンドが含まれています。

スケジュールされたジョブにはトリガーが含まれていないため、自動的に開始されません。 ジョブ トリガーの追加は、後で使用したり、Start-Job コマンドレットを使用してオンデマンドでジョブを開始したり、スケジュールされたジョブを他のスケジュールされたジョブのテンプレートとして使用したりできます。

例 2: トリガーとカスタム オプションを使用してスケジュールされたジョブを作成する

The first command uses the New-ScheduledJobOption cmdlet to create a job option object, which it saves in the $O parameter. The options start the scheduled job even if the computer is not idle, wake the computer to run the job, if necessary, and allows multiple instances of the job to run in a series.
PS C:\> $O = New-ScheduledJobOption -WakeToRun -StartIfNotIdle -MultipleInstancesPolicy Queue


The second command uses the New-JobTrigger cmdlet to create job trigger that starts a job every other Monday at 9:00 PM.
PS C:\> $T = New-JobTrigger -Weekly -At "9:00 PM" -DaysOfWeek Monday -WeeksInterval 2

This command creates the UpdateVersion scheduled job, which runs the UpdateVersion.ps1 script every Monday at 9:00 p.m. The command uses the *FilePath* parameter to specify the script that the job runs. It uses the *Trigger* parameter to specify the job triggers in the $T variable and the *ScheduledJobOption* parameter to specify the option object in the $O variable.
PS C:\> Register-ScheduledJob -Name "UpdateVersion" -FilePath "\\Srv01\Scripts\UpdateVersion.ps1" -Trigger $T -ScheduledJobOption $O

この例では、ジョブ トリガーとカスタムのジョブ オプションを指定して、スケジュールされたジョブを作成する方法を示します。

例 3: ハッシュ テーブルを使用してトリガーとジョブのオプションを指定する

PS C:\> Register-ScheduledJob -FilePath "\\Srv01\Scripts\Update-Version.ps1" -Trigger @{Frequency=Weekly; At="9:00PM"; DaysOfWeek="Monday"; Interval=2} -ScheduledJobOption @{WakeToRun; StartIfNotIdle; MultipleInstancesPolicy="Queue"}

このコマンドは、例 2 のコマンドと同じ結果になります。 スケジュールされたジョブを作成しますが、ハッシュ テーブルを使用して Trigger パラメーターと ScheduledJobOption パラメーターの値を指定します。

例 4: リモート コンピューターでスケジュールされたジョブを作成する

PS C:\> Invoke-Command -ComputerName (Get-Content Servers.txt) -ScriptBlock {Register-ScheduledJob -Name "Get-EnergyData" -FilePath "\\Srv01\Scripts\Get-EnergyData.ps1" -ScheduledJobOption $O -Trigger $T } -Credential $Cred

このコマンドは、複数のリモート コンピューターにスケジュールされたジョブ EnergyData を作成します。 スケジュールされたジョブでは、生データを収集し、実行ログに保存するスクリプトを実行します。 スケジュールされたジョブは、リモートのコンピューターに作成され、リモート コンピューターで実行されて、リモート コンピューターに結果を保存します。

このコマンドは、Invoke-Command コマンドレットを使用して、Servers.txt ファイル内のコンピューターで Register-ScheduledJob コマンドを実行します。 Invoke-Command コマンド、Credential パラメーターを使用して、Servers.txt ファイル内のコンピューターでスケジュールされたジョブを作成する権限を持つユーザーの資格情報を指定します。

Register-ScheduledJob コマンドは、$T変数のジョブ トリガーによって指定されたスケジュールされたEnergyData.ps1 スクリプトを実行する、スケジュールされたジョブをリモート コンピューターに作成します。 このスクリプトは、参加しているすべてのコンピューターが利用できるファイル サーバーにあります。

例 5: リモート コンピューターでスクリプトを実行するスケジュールされたジョブを作成する

PS C:\> Register-ScheduledJob -Name "CollectEnergyData" -Trigger $T -MaxResultCount 99 -ScriptBlock { Invoke-Command -AsJob -ComputerName (Servers.txt) -FilePath "\\Srv01\Scripts\Get-EnergyData.ps1" -Credential $Admin -Authentication CredSSP }

このコマンドは、Register-ScheduledJob コマンドレットを使用して、ローカル コンピューターにスケジュールされたジョブ CollectEnergyData を作成します。 Trigger パラメーターを使用してジョブ スケジュールを指定し、MaxResultCount パラメーターを使用して保存される結果の数を 99 に増やします。

CollectEnergyData ジョブは、Invoke-Command コマンドレットを使用して、Servers.txt ファイルに一覧表示されているコンピューターでEnergyData.ps1 スクリプトをバックグラウンドとして実行します。 Invoke-Command コマンドは、Energydata.ps1 スクリプトがリモート コンピューター上で実行されている場合でも、AsJob パラメーターを使用してローカル コンピューターにバックグラウンド ジョブ オブジェクトを作成します。 Credential パラメーターを使用して、リモート コンピューターでスクリプトを実行するアクセス許可を持つユーザー アカウントを指定し、Authentication パラメーターと CredSSP の値を使用して、委任された資格情報を許可します。

パラメーター

-ArgumentList

FilePath パラメーターで指定されたスクリプトのパラメーター、または ScriptBlock パラメーターで指定されたコマンドの値を指定します。

Type:Object[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Authentication

ユーザーの資格情報の認証に使用するメカニズムを指定します。 このパラメーターの有効値は、次のとおりです。

  • Default
  • Basic
  • Credssp
  • ダイジェスト
  • Kerberos
  • ネゴシエート
  • NegotiateWithImplicitCredential

既定値は Default です。 このパラメーターの値の詳細については、MSDN ライブラリの AuthenticationMechanism 列挙 を参照してください。

注意: ユーザーの資格情報が認証対象のリモート コンピューターに渡される、資格情報のセキュリティ サービス プロバイダー (CredSSP) 認証は、リモート ネットワーク共有にアクセスする場合など、複数のリソースの認証を必要とするコマンドを対象としています。 このメカニズムを使用すると、リモート操作のセキュリティ リスクが高まります。 リモート コンピューターのセキュリティが低下している場合は、そのリモート コンピューターに渡される資格情報を使用してネットワーク セッションが制御される場合があります。

Type:AuthenticationMechanism
Accepted values:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

コマンドレットの実行前に確認を求めるメッセージが表示されます。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

スケジュールされたジョブを実行するアクセス許可を持つユーザー アカウントを指定します。 既定値は現在のユーザーです。

User01 や Domain01\User01 などのユーザー名を入力するか、 psCredential オブジェクト (Get-Credential コマンドレットのオブジェクトなど) を入力します。 ユーザー名のみを入力すると、パスワードの入力を求められます。

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

スケジュールされたジョブで実行するスクリプトを指定します。 ローカル コンピューター上の .ps1 ファイルのパスを入力します。 スクリプト パラメーターの既定値を指定するには、ArgumentList パラメーターを使用します。 すべての Register-ScheduledJob コマンドで、ScriptBlock パラメーターと FilePath パラメーターのどちらかを使用する必要があります。

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InitializationScript

Windows PowerShell スクリプト (.ps1) の完全修飾パスを指定します。 初期化スクリプトは、ScriptBlock パラメーターで指定されたコマンドまたは FilePath パラメーターで指定されスクリプトの前に、バックグラウンド ジョブ用に作成されたセッションで実行されます。 初期化スクリプトを使用すると、ファイル、関数、またはエイリアスの追加、ディレクトリの作成、前提条件の確認など、セッションを構成することができます。

プライマリ ジョブ コマンドを実行するスクリプトを指定するには、FilePath パラメーターを使用します。

初期化スクリプトでエラーが生成された場合 (終了しないエラーでも)、スケジュールされたジョブの現在のインスタンスは実行されず、状態は [失敗] になります。

Type:ScriptBlock
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxResultCount

スケジュールされたジョブに対して保持されるジョブの結果のエントリ数を指定します。 既定値は 32 です。

Windows PowerShell では、スケジュールされたジョブのトリガーされた各インスタンスの実行履歴と結果をディスクに保存します。 このパラメーターの値により、このスケジュールされたジョブに対して保存されるジョブ インスタンスの結果の数が決まります。 ジョブ インスタンスの結果の数がこの値を超えた場合は、最新のジョブ インスタンスの結果を保存するために、最も古いジョブ インスタンスの結果が削除されます。

ジョブの実行履歴とジョブの結果は、ジョブが作成されたコンピューターの $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\<JobName>\Output\<Timestamp> ディレクトリに保存されます。 実行履歴を表示するには、Get-Job コマンドレットを使用します。 ジョブの結果を取得するには、Receive-Job コマンドレットを使用します。

MaxResultCount パラメーターは、スケジュールされたジョブの ExecutionHistoryLength プロパティの値を設定します。

現在の実行履歴とジョブの結果を削除するには、Set-ScheduledJob コマンドレットの ClearExecutionHistory パラメーターを使用します。

Type:Int32
Position:Named
Default value:32
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

スケジュールされたジョブの名前を指定します。 この名前は、スケジュールされたジョブの開始されたすべてのインスタンスにも使用されます。 名前は、コンピューター上で一意である必要があります。 このパラメーターは必須です。

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-RunAs32

スケジュールされたジョブを 32 ビット プロセスで実行します。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RunEvery

ジョブを実行する頻度を指定するために使用します。 たとえば、15 分ごとにジョブを実行するには、このオプションを使用します。

Type:TimeSpan
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RunNow

Register-ScheduledJob コマンドレットが実行されるとすぐに、ジョブをすぐに開始します。 このパラメーターを使用すると、登録後すぐにタスク スケジューラをトリガーして Windows PowerShell スクリプトを実行する必要がなくなります。また、ユーザーが開始日時を指定したトリガーを作成する必要もありません。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScheduledJobOption

スケジュールされたジョブのオプションを設定します。 ScheduledJobOptions オブジェクト (New-ScheduledJobOption コマンドレットを使用して作成するオブジェクト、ハッシュ テーブル値など) を入力します。

スケジュール ジョブを登録するとき、またはSet-ScheduledJobOptionまたはSet-ScheduledJobコマンドレットを使用してオプションを変更するときに、スケジュールされたジョブのオプションを設定できます。

さまざまなオプションとその既定値により、スケジュールされたジョブが実行されるかどうかとそのタイミングが決まります。 ジョブをスケジュールする前に、必ずこれらのオプションを確認してください。 スケジュールされたジョブ オプションの説明 (既定値を含む) については、「New-ScheduledJobOption」を参照してください。

ハッシュ テーブルを渡すには、次のキーを使用します。 次のハッシュ テーブルには、キーとその既定値が示されています。

@{StartIfOnBattery=$False; StopIfGoingOnBattery=$True; WakeToRun=$False; StartIfNotIdle=$False; IdleDuration="00:10:00"; IdleTimeout="01:00:00"; StopIfGoingOffIdle=$True; RestartOnIdleResume=$False; ShowInTaskScheduler=$True; RunElevated=$False; RunWithoutNetwork=$False; DoNotAllowDemandStart=$False; MultipleInstancePolicy=IgnoreNew}

Type:ScheduledJobOptions
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

スケジュールされたジョブで実行するコマンドを指定します。 コマンドを中かっこ ({ }) で囲み、スクリプト ブロックを作成します。 コマンド パラメーターの既定値を指定するには、ArgumentList パラメーターを使用します。

すべての Register-ScheduledJob コマンドで、ScriptBlock パラメーターと FilePath パラメーターのどちらかを使用する必要があります。

Type:ScriptBlock
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Trigger

スケジュールされたジョブのトリガーを指定します。 1 つ以上 の ScheduledJobTrigger オブジェクト (New-JobTrigger コマンドレットが返すオブジェクトなど)、またはジョブ トリガーのキーと値のハッシュ テーブルを入力します。

ジョブ トリガーは、スケジュール ジョブを開始します。 トリガーでは、1 回だけ、定期的なスケジュール、またはイベント (ユーザーがログオンしたときや Windows が起動したときなど) を指定できます。

Trigger パラメーターは省略可能です。 スケジュールされたジョブを作成するときにトリガーを追加したり、Add-JobTrigger、Set-JobTrigger、または Set-ScheduledJob コマンドレットを使用して後でジョブ トリガーを追加または変更したり、Start-Job コマンドレットを使用してスケジュールされたジョブをすぐに開始したりできます。 また、テンプレートとして使用するために、トリガーのないスケジュールされたジョブを作成し、管理することもできます。

ハッシュ テーブルを送信するには、次のキーを使用します。

@{Frequency="Once" (または毎日、毎週、AtStartup、AtLogon); At="3am" (または任意の有効な時刻文字列); DaysOfWeek="Monday", "Wednesday" (または日の名前の任意の組み合わせ); Interval=2 (または任意の有効な頻度間隔); RandomDelay="30minutes" (または任意の有効なタイムスパン文字列); User="Domain1\User01" (または任意の有効なユーザー。AtLogon 頻度値でのみ使用) }

Type:ScheduledJobTrigger[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

コマンドレットの実行時に発生する内容を示します。 このコマンドレットは実行されません。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

入力

None

パイプを使用してこのコマンドレットに入力を渡すことはできません。

出力

Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition

メモ

  • スケジュールされた各ジョブは、ローカル コンピューターの $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs ディレクトリのサブディレクトリに保存されます。 サブディレクトリには、スケジュールされたジョブの名前が付けられ、スケジュールされたジョブの XML ファイルとその実行履歴のレコードが含まれています。 ディスク上のスケジュールされたジョブの詳細については、「about_Scheduled_Jobs_Advanced」を参照してください。

  • Windows PowerShell で作成したスケジュールされたジョブは、タスク スケジューラの Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs フォルダーに表示されます。 タスク スケジューラを使用して、スケジュールされたジョブを表示および編集できます。

  • スケジュールされたジョブ コマンドレットを使用して作成したスケジュールされたジョブは、タスク スケジューラ、SchTasks.exe コマンド ライン ツール、およびタスク スケジューラ コマンドレットを使用して管理できます。 ただし、タスク スケジューラで作成したタスクは、スケジュールされたジョブ コマンドレットを使用して管理することはできません。

  • スケジュールされたジョブ コマンドが失敗した場合は、エラー メッセージが返されます。 ただし、タスク スケジューラが実行しようとしたときにジョブが失敗した場合は、Windows PowerShell にエラーが返されません。

    スケジュールされたジョブが実行されない場合は、次のメソッドを使用して理由を見つけます。

  • ジョブ トリガーが正しく設定されていることを確認します。 -- ジョブ オプションに設定されている条件が満たされていることを確認します。
  • ジョブを実行するユーザー アカウントに、ジョブでコマンドまたはスクリプトを実行するアクセス許可があることを確認します。
  • タスク スケジューラの履歴でエラーを確認する
  • タスク スケジューラのイベント ログでエラーを確認します。

詳細については、「about_Scheduled_Jobs_Troubleshooting」を参照してください。