Get-Job

現在のセッションで実行中の Windows PowerShell バックグラウンド ジョブを取得します。

構文

Get-Job [-Command <string[]>] [<CommonParameters>]

Get-Job [[-InstanceId] <Guid[]>] [<CommonParameters>]

Get-Job [[-Name] <string[]>] [<CommonParameters>]

Get-Job [[-Id] <Int32[]>] [<CommonParameters>]

Get-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [<CommonParameters>]

説明

Get-Job コマンドレットは、現在のセッションで開始されたバックグラウンド ジョブを表すオブジェクトを取得します。Get-Job を使用すると、Start-Job または任意のコマンドレットの AsJob パラメーターを使用して開始されたジョブを取得できます。

パラメーターが指定されていない場合、"Get-Job" コマンドは現在のセッションのすべてのジョブを取得します。Get-Job のパラメーターを使用して、特定のジョブを取得できます。

Get-Job が返すジョブ オブジェクトには、ジョブに関する有用な情報が含まれています。ただし、ジョブの結果は含まれません。ジョブの結果を取得するには、Receive-Job コマンドレットを使用します。

Windows PowerShell バックグラウンド ジョブは、現在のセッションと対話することなく "バックグラウンドで" 実行されるコマンドです。通常、バックグラウンド ジョブは、完了に時間のかかる複雑なコマンドを実行するために使用されます。Windows PowerShell のバックグラウンド ジョブの詳細については、「about_Jobs」を参照してください。

パラメーター

-Command <string[]>

指定されたコマンドを含むジョブを取得します。既定値はすべてのジョブです。コマンドを文字列として入力します。ワイルドカードを使用してコマンド パターンを指定できます。

必須

false

位置

named

既定値

All jobs

パイプライン入力を許可する

true (ByPropertyName)

ワイルドカード文字を許可する

true

-Id <Int32[]>

指定された ID を持つジョブのみを取得します。

ID は、現在のセッション内のジョブを一意に識別する整数です。インスタンス ID よりも覚えやすく入力も容易ですが、一意であるのは現在のセッション内のみです。1 つまたは複数の ID (コンマで区切る) を入力できます。ジョブの ID を検索するには、パラメーターを指定せずに「Get-Job」と入力します。

必須

false

位置

1

既定値

パイプライン入力を許可する

true (ByPropertyName)

ワイルドカード文字を許可する

false

-InstanceId <Guid[]>

指定されたインスタンス ID を持つジョブを取得します。既定値はすべてのジョブです。

インスタンス ID は、コンピューターのジョブを一意に識別する GUID です。ジョブのインスタンス ID を検索するには、Get-Job を使用します。

必須

false

位置

1

既定値

パイプライン入力を許可する

true (ByPropertyName)

ワイルドカード文字を許可する

true

-Name <string[]>

指定されたフレンドリ名のジョブを取得します。ジョブ名を入力するか、ワイルドカード文字を使用してジョブ名のパターンを入力します。既定では、Get-Job は現在のセッションのすべてのジョブを取得します。

必須

false

位置

1

既定値

パイプライン入力を許可する

true (ByPropertyName)

ワイルドカード文字を許可する

true

-State <JobState>

指定された状態のジョブのみを取得します。有効な値は、NotStarted、Running、Completed、Stopped、Failed、および Blocked です。既定では、Get-Job は現在のセッションのすべてのジョブを取得します。

必須

false

位置

named

既定値

パイプライン入力を許可する

true (ByPropertyName)

ワイルドカード文字を許可する

false

<CommonParameters>

このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。詳細については、次を参照してください: about_Commonparameters.

入力と出力

入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。

入力

None

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

出力

System.Management.Automation.RemotingJob

Get-Job は、セッション内のジョブを表すオブジェクトを返します。

例 1

C:\PS>get-job

説明
-----------
このコマンドは、現在のセッションで開始されたすべてのバックグラウンド ジョブを取得します。ジョブがローカル コンピューターで実行されている場合も含め、他のセッションで作成されたジョブは含まれません。





例 2

C:\PS>$j = get-job -name Job1

C:\PS> $ID = $j.InstanceID

C:\PS> $ID

Guid
----
03c3232e-1d23-453b-a6f4-ed73c9e29d55

C:\PS> stop-job -instanceid $ID

説明
-----------
これらのコマンドは、ジョブのインスタンス ID を取得し、それを使用してジョブを停止する方法を示しています。ジョブ名は一意ではありませんが、インスタンス ID は一意です。

最初のコマンドは、Get-Job コマンドレットを使用してジョブを取得します。ジョブは Name パラメーターを使用して識別しています。Get-Job によって返されるジョブ オブジェクトは、$j 変数に保存されます。この例では、指定された名前のジョブは 1 つしかありません。

2 番目のコマンドは、$j 変数に保存されているオブジェクトの InstanceId プロパティを取得して、$ID 変数に保存します。

3 番目のコマンドは、$ID 変数の値を表示します。

4 番目のコマンドは、Stop-Job コマンドレットを使用してジョブを終了します。InstanceId パラメーターを使用してジョブを識別し、$ID 変数を使用してジョブのインスタンス ID を表します。





例 3

C:\PS>get-job -command "*get-process*"

説明
-----------
このコマンドは、システム上で Get-Process コマンドを含むジョブを取得します。このコマンドは、Get-Job の Command パラメーターを使用して、取得されるジョブを制限します。また、ワイルドカード文字 (*) を使用して、コマンド文字列に Get-Process コマンドを含むジョブを取得します。





例 4

C:\PS>"*get-process*" | get-job

説明
-----------
前の例のコマンドのように、このコマンドは、システム上で Get-Process コマンドを含むジョブを取得します。このコマンドは、パイプライン演算子 (|) を使用して、(二重引用符で囲まれた) 文字列を Get-Job コマンドレットに送ります。前のコマンドと同等です。





例 5

C:\PS>get-job -state NotStarted

説明
-----------
このコマンドは、作成されただけで開始されていないジョブのみを取得します。これには、今後の実行がスケジュールされているジョブとスケジュールされていないジョブが含まれます。





例 6

C:\PS>get-job -name job*

説明
-----------
このコマンドは、名前が "job" で始まるジョブをすべて取得します。"job<番号>" がジョブの既定の名前であるため、このコマンドは名前が明示的に割り当てられていないジョブをすべて取得します。





例 7

C:\PS>start-job -scriptblock {get-process} -name MyJob

C:\PS> $j = get-job -name MyJob

C:\PS> $j

Id       Name      State      HasMoreData     Location    Command
--       ----      -----      -----------     --------    -------
1        myjob     Completed  True            localhost   get-process

C:\PS> receive-job -job $j

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    124       4    13572      12080    59            1140 audiodg
    783      16    11428      13636   100             548 CcmExec
     96       4     4252       3764    59            3856 ccmsetup
...

説明
-----------
この例は、Get-Job を使用してジョブ オブジェクトを取得する方法を示し、次にそのジョブ オブジェクトを使用してコマンドのジョブを表す方法を示しています。

最初のコマンドは Start-Job コマンドレットを使用して、ローカル コンピューター上で Get-Process コマンドを実行するバックグラウンド ジョブを開始します。このコマンドは、Start-Job の Name パラメーターを使用して、ジョブにフレンドリ名を割り当てます。

2 番目のコマンドは、Get-Job を使用してジョブを取得します。Get-Job の Name パラメーターを使用してジョブを識別しています。このコマンドは、結果のジョブ オブジェクトを $j 変数に保存します。

3 番目のコマンドは、$j 変数のジョブ オブジェクトの値を表示します。State プロパティの値は、ジョブが完了したことを示しています。HasMoreData プロパティの値は、ジョブに、取得されていない利用可能な結果があることを示しています。

4 番目のコマンドは、Receive-Job コマンドレットを使用してジョブの結果を取得します。$j 変数のジョブ オブジェクトを使用してジョブを表します。パイプライン演算子を使用して、ジョブ オブジェクトを Receive-Job に送信することもできます。





例 8

C:\PS>start-job -scriptblock {get-eventlog system}

C:\PS> invoke-command -computername S1 -scriptblock {get-eventlog system} -AsJob

C:\PS> invoke-command -computername S2 -scriptblock {start-job -scriptblock {get-eventlog system}}

C:\PS> get-job

Id    Name     State      HasMoreData   Location   Command
--    ----     -----      -----------   --------   -------
1     Job1     Running    True          localhost  get-eventlog system
2     Job2     Running    True          S1         get-eventlog system

C:\PS> invoke-command -computername S2 -scriptblock {get-job}

Id    Name     State      HasMoreData   Location   Command
--    ----     -----      -----------   --------   -------
4     Job4     Running    True          localhost  get-eventlog system

説明
-----------
この例は、異なるメソッドを使用して開始されたジョブも含め、Get-Job コマンドレットが現在のセッションで開始されたすべてのジョブを取得できることを示しています。

最初のコマンドは、Start-Job コマンドレットを使用して、ジョブをローカル コンピューター上で開始します。

2 番目のコマンドは、Invoke-Command の AsJob パラメーターを使用して、ジョブを S1 コンピューター上で開始します。ジョブのコマンドがリモート コンピューターで実行されていても、ジョブ オブジェクトはローカル コンピューターで作成されるため、ローカル コマンドを使用してジョブを管理します。

3 番目のコマンドは、Invoke-Command コマンドレットを使用して、S2 コンピューターで Start-Job コマンドを実行します。このメソッドでは、リモート コンピューター上にジョブ オブジェクトが作成されるため、リモート コマンドを使用してジョブを管理します。

4 番目のコマンドは、Get-Job を使用してローカル コンピューターに保存されたジョブを取得します。

5 番目のコマンドは、Invoke-Command を使用して S2 コンピューターで Get-Job コマンドを実行します。

サンプル出力は、Get-Job コマンドの結果を示しています。

リモート コンピューターでのバックグラウンド ジョブの実行については、「about_Remote_Jobs」を参照してください。





例 9

C:\PS>start-job -scriptblock {get-process}

Id       Name            State      HasMoreData     Location             Command
--       ----            -----      -----------     --------             -------
1        Job1            Failed     False           localhost            get-process

C:\PS> (get-job).jobstateinfo | format-list -property *

State  : Failed
Reason :


C:\PS> get-job | format-list *

HasMoreData   : False
StatusMessage :
Location      : localhost
Command       : get-process
JobStateInfo  : Failed
Finished      : System.Threading.ManualResetEvent
InstanceId    : fb792295-1318-4f5d-8ac8-8a89c5261507
Id            : 1
Name          : Job1
ChildJobs     : {Job2}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :


C:\PS> (get-job -name job2).jobstateinfo.reason
Connecting to remote server using WSManCreateShellEx api failed. The async callback gave the following error message :
Access is denied.

説明
-----------
このコマンドは、Get-Job が返すジョブ オブジェクトを使用して、ジョブが失敗した理由を調査する方法を示しています。各ジョブの子ジョブを取得する方法も示します。

最初のコマンドは、Start-Job コマンドレットを使用して、ジョブをローカル コンピューター上で開始します。Start-Job が返すジョブ オブジェクトは、ジョブが失敗したことを示しています。State プロパティの値は "Failed" です。

2 番目のコマンドは、Get-Job を使用してジョブ オブジェクトを取得します。このコマンドはドット メソッドを使用して、オブジェクトの JobStateInfo プロパティの値を取得します。パイプライン演算子を使用して、JobStateInfo プロパティのオブジェクトが Format-List コマンドレットに送信され、一覧にあるオブジェクトのすべてのプロパティ (*) が書式設定されます。

Format-List コマンドの結果は、ジョブの Reason プロパティの値が空白であることを示しています。

3 番目のコマンドは、さらに調査を行います。Get-Job コマンドを使用してジョブを取得し、パイプライン演算子を使用してジョブ オブジェクト全体を Format-List コマンドレットに送信し、これにより一覧にあるジョブのプロパティがすべて表示されます。

ジョブ オブジェクトのすべてのプロパティの表示により、ジョブに "Job2" という名前の子ジョブが含まれることが示されています。

4 番目のコマンドは、Get-Job を使用して子ジョブ Job2 を表すジョブ オブジェクトを取得します。これは、コマンドが実際に実行されたジョブです。このコマンドはドット メソッドを使用して、JobStateInfo プロパティの Reason プロパティを取得します。

結果は、"access denied" エラーが原因でジョブが失敗したことを示しています。この例では、ユーザーが Windows PowerShell の起動時に [管理者として実行] を使用しなかったと想定しています。

バックグラウンド ジョブは Windows PowerShell のリモート処理機能を使用するため、ジョブがローカル コンピューターで実行される場合でも、ジョブを実行するにはコンピューターがリモート処理用に構成されている必要があります。

Windows PowerShell のリモート処理の要件については、「about_Remote_Requirements」を参照してください。トラブルシューティングのヒントについては、「about_Remote_Troubleshooting」を参照してください。





関連項目

概念

about_Jobs
about_Job_Details
about_remote_jobs
Start-Job
Receive-Job
Wait-Job
Stop-Job
Remove-Job
Invoke-Command