共用方式為


Get-Job

取得在目前會話中執行的PowerShell背景工作。

語法

Get-Job
   [-IncludeChildJob]
   [-ChildJobState <JobState>]
   [-HasMoreData <Boolean>]
   [-Before <DateTime>]
   [-After <DateTime>]
   [-Newest <Int32>]
   [[-Id] <Int32[]>]
   [<CommonParameters>]
Get-Job
   [-IncludeChildJob]
   [-ChildJobState <JobState>]
   [-HasMoreData <Boolean>]
   [-Before <DateTime>]
   [-After <DateTime>]
   [-Newest <Int32>]
   [-State] <JobState>
   [<CommonParameters>]
Get-Job
   [-IncludeChildJob]
   [-ChildJobState <JobState>]
   [-HasMoreData <Boolean>]
   [-Before <DateTime>]
   [-After <DateTime>]
   [-Newest <Int32>]
   [-Command <String[]>]
   [<CommonParameters>]
Get-Job
   [-IncludeChildJob]
   [-ChildJobState <JobState>]
   [-HasMoreData <Boolean>]
   [-Before <DateTime>]
   [-After <DateTime>]
   [-Newest <Int32>]
   [-InstanceId] <Guid[]>
   [<CommonParameters>]
Get-Job
   [-IncludeChildJob]
   [-ChildJobState <JobState>]
   [-HasMoreData <Boolean>]
   [-Before <DateTime>]
   [-After <DateTime>]
   [-Newest <Int32>]
   [-Name] <String[]>
   [<CommonParameters>]
Get-Job
   [-Filter] <Hashtable>
   [<CommonParameters>]

Description

Get-Job Cmdlet 會取得對象,這些物件代表在目前會話中啟動的背景工作。 您可以使用 Get-Job 來取得使用 Start-Job Cmdlet 啟動的工作,或使用任何 Cmdlet 的 AsJob 參數。

如果沒有參數,Get-Job 命令會取得目前會話中的所有作業。 您可以使用 Get-Job 的參數來取得特定作業。

Get-Job 傳回的作業物件包含作業的實用資訊,但不包含作業結果。 若要取得結果,請使用 Receive-Job Cmdlet。

Windows PowerShell 背景作業是在背景中執行的命令,而不需與目前的會話互動。 一般而言,您會使用背景工作來執行需要很長的時間才能完成的複雜命令。 如需 Windows PowerShell 中背景工作的詳細資訊,請參閱about_Jobs。

從 Windows PowerShell 3.0 開始,Get-Job Cmdlet 也會取得自定義作業類型,例如工作流程作業和排程工作的實例。 若要尋找作業的作業類型,請使用作業 PSJobTypeName 屬性。

若要啟用 Get-Job 以取得自定義作業類型,請在執行 Get-Job 命令之前,先將支援自定義作業類型的模組匯入會話,方法是使用 Import-Module Cmdlet,或使用 或取得模組中的 Cmdlet。 如需特定自定義作業類型的相關信息,請參閱自定義作業類型功能的檔。

範例

範例 1:取得目前會話中啟動的所有背景工作

PS C:\> Get-Job

此命令會取得目前會話中啟動的所有背景工作。 它不包含在其他會話中建立的作業,即使作業是在本機計算機上執行也一樣。

範例 2:使用實例標識元停止作業

The first command uses the **Get-Job** cmdlet to get a job. It uses the *Name* parameter to identify the job. The command stores the job object that **Get-Job** returns in the $j variable. In this example, there is only one job with the specified name.
PS C:\> $j = Get-Job -Name Job1

The second command gets the **InstanceId** property of the object in the $j variable and stores it in the $ID variable.
PS C:\> $ID = $j.InstanceID

The third command displays the value of the $ID variable.
PS C:\> $ID

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

The fourth command uses Stop-Job cmdlet to stop the job. It uses the *InstanceId* parameter to identify the job and $ID variable to represent the instance ID of the job.
PS C:\> Stop-Job -InstanceId $ID

這些命令示範如何取得作業的實例標識碼,然後使用它來停止作業。 不同於作業的名稱,這不是唯一的,實例標識碼是唯一的。

範例 3:取得包含特定命令的工作

PS C:\> Get-Job -Command "*get-process*"

此命令會取得系統上包含 Get-Process 命令的工作。 命令會使用 Get-JobCommand 參數來限制擷取的作業。 命令會使用通配符 ≦ 來取得作業,這些工作包含命令字串中的任何位置 Get-Process 命令。

範例 4:使用管線取得包含特定命令的工作

PS C:\> "*get-process*" | Get-Job

如同上一個範例中的 命令,此命令會取得系統上包含 get-Process 命令 的工作。 命令會使用管線運算符 (|) 將字串以引號傳送至 get-Job Cmdlet 。 它相當於上一個命令。

範例 5:取得尚未啟動的工作

PS C:\> Get-Job -State NotStarted

此命令只會取得已建立但尚未啟動的作業。 這包括排程在未來執行的作業,以及尚未排程的工作。

範例 6:取得尚未指派名稱的工作

PS C:\> Get-Job -Name Job*

此命令會取得具有以作業開頭之作業名稱的所有作業。 因為作業<編號> 是作業的預設名稱,因此此命令會取得沒有明確指派名稱的所有作業。

範例 7:使用作業物件代表命令中的作業

The first command uses the **Start-Job** cmdlet to start a background job that runs a **Get-Process** command on the local computer. The command uses the *Name* parameter of **Start-Job** to assign a friendly name to the job.
PS C:\> Start-Job -ScriptBlock {Get-Process} -Name MyJob

The second command uses Get-Job to get the job. It uses the *Name* parameter of **Get-Job** to identify the job. The command saves the resulting job object in the $j variable.
PS C:\> $j = Get-Job -Name MyJob

The third command displays the value of the job object in the $j variable. The value of the **State** property shows that the job is completed. The value of the **HasMoreData** property shows that there are results available from the job that have not yet been retrieved.
PS C:\> $j
Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
6      MyJob           BackgroundJob   Completed     True            localhost            Get-Process

The fourth command uses the **Receive-Job** cmdlet to get the results of the job. It uses the job object in the $j variable to represent the job. You can also use a pipeline operator to send a job object to **Receive-Job**.
PS C:\> 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 來取得作業對象,然後示範如何使用job物件在命令中代表作業。

範例 8:取得所有作業,包括以不同方法啟動的工作

The first command uses the **Start-Job** cmdlet to start a job on the local computer.
PS C:\> Start-Job -ScriptBlock {Get-EventLog System}

The second command uses the *AsJob* parameter of the **Invoke-Command** cmdlet to start a job on the S1 computer. Even though the commands in the job run on the remote computer, the job object is created on the local computer, so you use local commands to manage the job.
PS C:\> Invoke-Command -ComputerName S1 -ScriptBlock {Get-EventLog System} -AsJob

The third command uses the **Invoke-Command** cmdlet to run a **Start-Job** command on the S2 computer. By using this method, the job object is created on the remote computer, so you use remote commands to manage the job.
PS C:\> Invoke-Command -ComputerName S2 -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}

The fourth command uses **Get-Job** to get the jobs stored on the local computer. The **PSJobTypeName** property of jobs, introduced in Windows PowerShell 3.0, shows that the local job started by using the **Start-Job** cmdlet is a background job and the job started in a remote session by using the **Invoke-Command** cmdlet is a remote job.
PS C:\> Get-Job
Id     Name       PSJobTypeName   State         HasMoreData     Location        Command
--     ----       -------------   -----         -----------     --------        -------
1      Job1       BackgroundJob   Running       True            localhost       Get-EventLog System
2      Job2       RemoteJob       Running       True            S1              Get-EventLog System

The fifth command uses **Invoke-Command** to run a **Get-Job** command on the S2 computer.The sample output shows the results of the Get-Job command. On the S2 computer, the job appears to be a local job. The computer name is localhost and the job type is a background job.For more information about how to run background jobs on remote computers, see about_Remote_Jobs.
PS C:\> Invoke-Command -ComputerName S2 -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}
Id    Name     PSJobTypeName  State      HasMoreData   Location   Command
--    ----     -------------  -----      -----------   -------    -------
4     Job4     BackgroundJob  Running    True          localhost  Get-Eventlog System

此範例示範 Get-Job Cmdlet 可以取得目前會話中啟動的所有作業,即使它們是使用不同的方法啟動也一樣。

範例 9:調查失敗的工作

The first command uses the **Start-Job** cmdlet to start a job on the local computer. The job object that **Start-Job** returns shows that the job failed. The value of the **State** property is Failed.
PS C:\> Start-Job -ScriptBlock {Get-Process}
Id     Name       PSJobTypeName   State       HasMoreData     Location             Command
--     ----       -------------   -----       -----------     --------             -------
1      Job1       BackgroundJob   Failed      False           localhost            Get-Process

The second command uses the **Get-Job** cmdlet to get the job. The command uses the dot method to get the value of the **JobStateInfo** property of the object. It uses a pipeline operator to send the object in the **JobStateInfo** property to the Format-List cmdlet, which formats all of the properties of the object (*) in a list.The result of the **Format-List** command shows that the value of the **Reason** property of the job is blank.
PS C:\> (Get-Job).JobStateInfo | Format-List -Property *
State  : Failed
Reason :

The third command investigates more. It uses a **Get-Job** command to get the job and then uses a pipeline operator to send the whole job object to the **Format-List** cmdlet, which displays all of the properties of the job in a list.The display of all properties in the job object shows that the job contains a child job named Job2.
PS C:\> Get-Job | Format-List -Property *
HasMoreData   : False
StatusMessage :
Location      : localhost
Command       : get-process
JobStateInfo  : Failed
Finished      : System.Threading.ManualReset
EventInstanceId    : fb792295-1318-4f5d-8ac8-8a89c5261507
Id            : 1
Name          : Job1
ChildJobs     : {Job2}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

The fourth command uses **Get-Job** to get the job object that represents the Job2 child job. This is the job in which the command actually ran. It uses the dot method to get the **Reason** property of the **JobStateInfo** property.The result shows that the job failed because of an Access Denied error. In this case, the user forgot to use the Run as administrator option when starting Windows PowerShell.Because background jobs use the remoting features of Windows PowerShell, the computer must be configured for remoting to run a job, even when the job runs on the local computer.For information about requirements for remoting in Windows PowerShell, see about_Remote_Requirements. For troubleshooting tips, see about_Remote_Troubleshooting.
PS C:\> (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 傳回的作業對象來調查作業失敗的原因。 它也會示範如何取得每個作業的子工作。

範例 10:取得篩選的結果

The first command uses the **Workflow** keyword to create the WFProcess workflow.
PS C:\> Workflow WFProcess {Get-Process}

The second command uses the *AsJob* parameter of the WFProcess workflow to run the workflow as a background job. It uses the *JobName* parameter of the workflow to specify a name for the job, and the *PSPrivateMetadata* parameter of the workflow to specify a custom ID.
PS C:\> WFProcess -AsJob -JobName WFProcessJob -PSPrivateMetadata @{MyCustomId = 92107}

The third command uses the *Filter* parameter of **Get-Job** to get the job by custom ID that was specified in the *PSPrivateMetadata* parameter.
PS C:\> Get-Job -Filter @{MyCustomId = 92107}
Id     Name            State         HasMoreData     Location             Command
--     ----            -----         -----------     --------             -------
1      WFProcessJob    Completed     True            localhost            WFProcess

此範例示範如何使用 Filter 參數來取得工作流程作業。 Windows PowerShell 3.0 中引進的 Filter 參數僅適用於自定義作業類型,例如工作流程作業和排程工作。

範例 11:取得子作業的相關信息

The first command gets the jobs in the current session. The output includes a background job, a remote job and several instances of a scheduled job. The remote job, Job4, appears to have failed.
PS C:\> Get-Job
Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
2      Job2            BackgroundJob   Completed     True            localhost            .\Get-Archive.ps1
4      Job4            RemoteJob       Failed        True            Server01, Server02   .\Get-Archive.ps1
7      UpdateHelpJob   PSScheduledJob  Completed     True            localhost            Update-Help
8      UpdateHelpJob   PSScheduledJob  Completed     True            localhost            Update-Help
9      UpdateHelpJob   PSScheduledJob  Completed     True            localhost            Update-Help
10     UpdateHelpJob   PSScheduledJob  Completed     True            localhost            Update-Help

The second command uses the *IncludeChildJob* parameter of **Get-Job**. The output adds the child jobs of all jobs that have child jobs.In this case, the revised output shows that only the Job5 child job of Job4 failed.
PS C:\> Get-Job -IncludeChildJob
Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
2      Job2            BackgroundJob   Completed     True            localhost           .\Get-Archive.ps1
3      Job3                            Completed     True            localhost           .\Get-Archive.ps1
4      Job4            RemoteJob       Failed        True            Server01, Server02  .\Get-Archive.ps1
5      Job5                            Failed        False           Server01            .\Get-Archive.ps1
6      Job6                            Completed     True            Server02            .\Get-Archive.ps1
7      UpdateHelpJob   PSScheduledJob  Completed     True            localhost            Update-Help
8      UpdateHelpJob   PSScheduledJob  Completed     True            localhost            Update-Help
9      UpdateHelpJob   PSScheduledJob  Completed     True            localhost            Update-Help
10     UpdateHelpJob   PSScheduledJob  Completed     True            localhost            Update-Help

The third command uses the *ChildJobState* parameter with a value of Failed.The output includes all parent jobs and only the child jobs that failed.
PS C:\> Get-Job -Name Job4 -ChildJobState Failed
Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
2      Job2            BackgroundJob   Completed     True            localhost           .\Get-Archive.ps1
4      Job4            RemoteJob       Failed        True            Server01, Server02  .\Get-Archive.ps1
5      Job5                            Failed        False           Server01            .\Get-Archive.ps1
7      UpdateHelpJob   PSScheduledJob  Completed     True            localhost            Update-Help
8      UpdateHelpJob   PSScheduledJob  Completed     True            localhost            Update-Help
9      UpdateHelpJob   PSScheduledJob  Completed     True            localhost            Update-Help
10     UpdateHelpJob   PSScheduledJob  Completed     True            localhost            Update-Help

The fifth command uses the **JobStateInfo** property of jobs and its **Reason** property to discover why Job5 failed.
PS C:\> (Get-Job -Name Job5).JobStateInfo.Reason
Connecting to remote server Server01 failed with the following error message:
Access is denied.
For more information, see the about_Remote_Troubleshooting Help topic.

此範例顯示使用 IncludeChildJobChildJobStateGet-Job Cmdlet 參數的效果。

參數

-After

取得在指定日期和時間之後結束的已完成作業。 輸入 DateTime 物件,例如 Get-Date Cmdlet 所傳回的字串,或是可以轉換成 dateTime 物件的字串,例如

此參數僅適用於具有 endTime 屬性的自定義作業類型,例如工作流程作業和排程工作。 它不適用於標準背景工作,例如使用 Start-Job Cmdlet 所建立的工作。 如需此參數支援的相關信息,請參閱作業類型的說明主題。

此參數是在 Windows PowerShell 3.0 中引進的。

類型:DateTime
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-Before

取得在指定日期和時間之前結束的已完成作業。 輸入 DateTime 物件。

此參數僅適用於具有 endTime 屬性的自定義作業類型,例如工作流程作業和排程工作。 它不適用於標準背景工作,例如使用 Start-Job Cmdlet 所建立的工作。 如需此參數支援的相關信息,請參閱作業類型的說明主題。

此參數是在 Windows PowerShell 3.0 中引進的。

類型:DateTime
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-ChildJobState

只取得具有指定狀態的子作業。 此參數可接受的值為:

  • NotStarted
  • 運行
  • 完成
  • 失敗
  • 停止
  • 封鎖
  • 暫停
  • 斷開
  • 暫停
  • 停止

根據預設,Get-Job 不會取得子作業。 藉由使用 IncludeChildJob 參數,Get-Job 會取得所有子作業。 如果您使用 ChildJobState 參數,IncludeChildJob 參數沒有任何作用。

此參數是在 Windows PowerShell 3.0 中引進的。

類型:JobState
接受的值:NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-Command

將命令陣列指定為字串。 此 Cmdlet 會取得包含指定命令的工作。 預設值為所有作業。 您可以使用通配符來指定命令模式。

類型:String[]
Position:Named
預設值:None
必要:False
接受管線輸入:True
接受萬用字元:True

-Filter

指定條件的哈希表。 此 Cmdlet 會取得滿足所有條件的工作。 輸入哈希表,其中索引鍵是作業屬性,而值是作業屬性值。

此參數僅適用於自定義作業類型,例如工作流程作業和排程工作。 它不適用於標準背景工作,例如使用 Start-Job Cmdlet 所建立的工作。 如需此參數支援的相關信息,請參閱作業類型的說明主題。

此參數是在 Windows PowerShell 3.0 中引進的。

類型:Hashtable
Position:0
預設值:None
必要:True
接受管線輸入:True
接受萬用字元:False

-HasMoreData

指出這個 Cmdlet 是否只取得具有指定 HasMoreData 屬性值的工作。 HasMoreData 屬性會指出目前會話中是否收到所有作業結果。 若要取得具有更多結果的工作,請指定 $True 的值。 若要取得沒有更多結果的工作,請指定值 $False。

若要取得作業的結果,請使用 Receive-Job Cmdlet。

當您使用 Receive-Job Cmdlet 時,它會從其記憶體內部會話特定記憶體中刪除它所傳回的結果。 當作業在目前會話中傳回作業的所有結果時,它會將作業的 HasMoreData 屬性的值設定為 $False),表示目前會話中作業沒有更多結果。 使用 Keep 參數 Receive-Job,以防止 Receive-Job 刪除結果,以及變更 hasMoreData 屬性 的值。 如需詳細資訊,請輸入 Get-Help Receive-Job

HasMoreData 屬性是目前會話特有的。 如果自定義作業類型的結果儲存在會話之外,例如排程的工作類型,它會將作業結果儲存在磁碟上,您可以使用不同會話中的 Receive-Job Cmdlet 來再次取得作業結果,即使 hasMoreData 的值$False也一樣。 如需詳細資訊,請參閱自定義作業類型的說明主題。

此參數是在 Windows PowerShell 3.0 中引進的。

類型:Boolean
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-Id

指定此 Cmdlet 取得之作業標識碼的陣列。

標識碼是整數,可唯一識別目前會話中的作業。 比實例標識碼更容易記住和輸入,但只在目前的會話中是唯一的。 您可以輸入一或多個以逗號分隔的識別碼。 若要尋找作業的標識碼,請輸入沒有參數 Get-Job

類型:Int32[]
Position:0
預設值:None
必要:False
接受管線輸入:True
接受萬用字元:False

-IncludeChildJob

指出這個 Cmdlet 除了父作業之外,也會傳回子作業。

此參數特別適用於調查工作流程作業,Get-Job 傳回容器父作業和作業失敗,因為失敗的原因會儲存在子作業的 屬性中。

此參數是在 Windows PowerShell 3.0 中引進的。

類型:SwitchParameter
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-InstanceId

指定這個 Cmdlet 取得之作業實例識別碼的陣列。 預設值為所有作業。

實例標識碼是可唯一識別計算機上作業的 GUID。 若要尋找作業的實體識別碼,請使用 Get-Job

類型:Guid[]
Position:0
預設值:None
必要:True
接受管線輸入:True
接受萬用字元:False

-Name

指定這個 Cmdlet 取得之作業實例易記名稱的陣列。 輸入作業名稱,或使用通配符輸入作業名稱模式。 根據預設,Get-Job 取得目前會話中的所有作業。

類型:String[]
Position:0
預設值:None
必要:True
接受管線輸入:True
接受萬用字元:True

-Newest

指定要取得的作業數目。 此 Cmdlet 會取得最近結束的工作。

Newest 參數不會以結束時間順序排序或傳回最新的作業。 若要排序輸出,請使用 Sort-Object Cmdlet。

此參數是在 Windows PowerShell 3.0 中引進的。

類型:Int32
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-State

指定作業狀態。 此 Cmdlet 只會取得處於指定狀態的作業。 此參數可接受的值為:

  • NotStarted
  • 運行
  • 完成
  • 失敗
  • 停止
  • 封鎖
  • 暫停
  • 斷開
  • 暫停
  • 停止

根據預設,Get-Job 會取得目前會話中的所有作業。

如需作業狀態的詳細資訊,請參閱 MSDN 連結庫中的 JobState 列舉

類型:JobState
接受的值:NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint
Position:0
預設值:None
必要:True
接受管線輸入:True
接受萬用字元:False

輸入

None

您無法使用管線將輸入傳送至此 Cmdlet。

輸出

System.Management.Automation.RemotingJob

此 Cmdlet 會傳回代表會話中作業的物件。

備註

  • 作業的 PSJobTypeName 屬性表示作業的作業類型。 屬性值是由作業類型作者所決定。 下列清單顯示常見的作業類型。

    • BackgroundJob。 使用 Start-Job啟動的本機作業。

    • RemoteJob。 作業是使用 Invoke-Command Cmdlet 的 AsJob 參數,在 PSSession 中啟動。

    • PSWorkflowJob。 使用 AsJob 工作流程的一般參數啟動的工作。