啟動 Windows PowerShell 背景工作。

語法

Start-Job [-ScriptBlock] <scriptblock> [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

Start-Job [[-FilePath] <string>] [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

描述

Start-Job Cmdlet 會在本機電腦啟動 Windows PowerShell 背景工作。

Windows PowerShell 背景工作會「在背景中」執行命令,且與目前工作階段沒有任何互動。當您啟動背景工作時,即使工作需要很長的時間才能完成,還是會立即傳回工作物件。您可以在工作執行期間,繼續在工作階段中執行作業而不需中斷。

工作物件包含有用的工作資訊,但不包含工作結果。當工作完成時,請使用 Receive-Job Cmdlet 取得工作的結果。如需背景工作的詳細資訊,請參閱 about_Jobs。

若要在遠端電腦執行背景工作,請使用許多 Cmdlet 都有提供的 AsJob 參數,或使用 Invoke-Command Cmdlet 在遠端電腦執行 Start-Job 命令。如需詳細資訊,請參閱 about_Remote_Jobs。

參數

-ArgumentList <Object[]>

為 FilePath 參數所指定的指令碼指定引數 (參數值)。

由於接在 ArgumentList 參數名稱後面的所有值都會解譯成 ArgumentList 的值,因此 ArgumentList 參數必須是命令中的最後一個參數。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-Authentication <AuthenticationMechanism>

指定用來驗證使用者認證的機制。有效值為 Default、Basic、Credssp、Digest、Kerberos、Negotiate 和 NegotiateWithImplicitCredential。預設值為 Default。

CredSSP 驗證僅適用於 Windows Vista、Windows Server 2008 和更新版的 Windows。

如需此參數之值的詳細資訊,請參閱 MSDN 中的 System.Management.Automation.Runspaces.AuthenticationMechanism 列舉說明。

警告:認證安全性服務提供者 (CredSSP) 驗證 (其中使用者的認證會傳送到遠端電腦) 是專為需要對一個以上的資源進行驗證的命令所設計,例如存取遠端網路共用。此機制會提高遠端操作的安全性風險。如果遠端電腦已經遭受危害,則傳遞給遠端電腦的認證可能會被用來控制網路工作階段。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-Credential <PSCredential>

指定具有執行此動作之權限的使用者帳戶。預設為目前使用者。

請輸入使用者名稱,例如 "User01" 或 "Domain01\User01",或是輸入 PSCredential 物件,例如由 Get-Credential Cmdlet 所產生的物件。

必要?

false

位置?

named

預設值

Current user

接受管線輸入?

false

接受萬用字元?

false

-FilePath <string>

將指定的本機指令碼當做背景工作來執行。請輸入指令碼的路徑和檔名,或經由管道將指令碼路徑輸出至 Start-Job。此指令碼必須存在於本機電腦或本機電腦可存取的目錄中。

使用此參數時,Windows PowerShell 會將指定之指令碼檔案的內容轉換成指令碼區塊,並將該指令碼區塊當做背景工作來執行。

必要?

false

位置?

1

預設值

接受管線輸入?

false

接受萬用字元?

false

-InitializationScript <scriptblock>

指定在工作啟動之前執行的命令。請以大括號 ( { } ) 括住命令以建立指令碼區塊。

請使用此參數來準備工作執行所在的工作階段。例如,您可以使用此參數,將函數、嵌入式管理單元和模組新增至工作階段。

必要?

false

位置?

2

預設值

接受管線輸入?

false

接受萬用字元?

false

-InputObject <psobject>

指定命令的輸入。請輸入包含物件的變數,或輸入可產生物件的命令或運算式。

請在 ScriptBlock 參數的值中使用 $input 自動變數,以表示輸入物件。

必要?

false

位置?

named

預設值

接受管線輸入?

true (ByValue)

接受萬用字元?

false

-Name <string>

指定新工作的好記名稱。您可以使用這個名稱讓其他工作 Cmdlet (例如 Stop-Job) 識別此工作。

預設的好記名稱是 Job#,其中 "#" 是隨著每一項工作遞增的序數。

必要?

false

位置?

named

預設值

Job<number>

接受管線輸入?

true (ByPropertyName)

接受萬用字元?

false

-RunAs32

在 32 位元處理序中執行此工作。

請使用此參數來強制工作在 64 位元作業系統上的 32 位元處理序中執行。

必要?

false

位置?

named

預設值

False

接受管線輸入?

false

接受萬用字元?

false

-ScriptBlock <scriptblock>

指定要在背景工作中執行的命令。請以大括號 ( { } ) 括住命令以建立指令碼區塊。此參數為必要項。

必要?

true

位置?

1

預設值

接受管線輸入?

false

接受萬用字元?

false

<CommonParameters>

這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.

輸入和輸出

輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。

輸入

System.String

您可以經由管道將檔案路徑輸出至 Start-Job。

輸出

System.Management.Automation.RemotingJob

Start-Job 會傳回代表它所啟動之工作的物件。

附註

為了在背景中執行,Start-Job 會在目前工作階段內其個別工作階段中執行。當您使用 Invoke-Command Cmdlet 在遠端電腦的工作階段中執行 Start-Job 命令時,Start-Job 會在遠端工作階段內的工作階段中執行。

範例 1

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

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

Id    Name  State    HasMoreData  Location   Command
---   ----  -----    -----------  --------   -------
1     Job1  Running  True         localhost  get-process

描述
-----------
這個命令會啟動執行 Get-Process 命令的背景工作。它會傳回內含工作相關資訊的工作物件。命令提示會立即傳回,讓您能夠在工作於背景中執行時,在工作階段中執行作業。






範例 2

C:\PS>$jobWRM = invoke-command -computerName (get-content servers.txt) -scriptblock {get-service winrm} -jobname WinRM -throttlelimit 16 -AsJob

描述
-----------
這個命令會使用 Invoke-Command Cmdlet 及其 AsJob 參數,在多部電腦啟動執行 "get-service winrm" 命令的背景工作。因為此命令是在網路流量極大的伺服器執行,所以它會使用 Invoke-Command 的 ThrottleLimit 參數,將並行命令的數目限制為 16 個。

這個命令會使用 ComputerName 參數來指定執行工作的電腦。ComputerName 參數的值是 Get-Content 命令,這個命令會取得 Servers.txt 檔案 (網域中電腦名稱的檔案) 中的文字。

這個命令會使用 ScriptBlock 參數來指定命令,並使用 JobName 參數來指定工作的好記名稱。






範例 3

C:\PS>$j = start-job -scriptblock {get-eventlog -log system} -credential domain01\user01

C:\PS> $j | format-list -property *

HasMoreData   : True
StatusMessage :
Location      : localhost
Command       : get-eventlog -log system
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 2d9d775f-63e0-4d48-b4bc-c05d0e177f34
Id            : 1
Name          : Job1
ChildJobs     : {Job2}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

C:\PS> $j.JobStateInfo.state
Completed

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

C:\PS> $results
Index Time          Type        Source                EventID Message
----- ----          ----        ------                ------- -------
84366 Feb 18 19:20  Information Service Control M...     7036 The description...
84365 Feb 18 19:16  Information Service Control M...     7036 The description...
84364 Feb 18 19:10  Information Service Control M...     7036 The description...
...

描述
-----------
這些命令會管理在 [事件檢視器] 中,從系統記錄檔取得所有事件的背景工作。該工作是在本機電腦執行。

第一個命令會使用 Start-Job Cmdlet 啟動工作。它使用 Credential 參數指定有權在電腦上執行此工作之使用者的使用者帳戶,然後再將 Start-Job 傳回的工作物件儲存在 $j 變數中。

此時,您可以在等待工作完成期間繼續執行其他作業。

第二個命令會使用管線運算子 (|),將 $j 中的工作物件傳遞給 Format-List Cmdlet。Format-List 命令會使用值為 * (所有) 的 Property 參數,在清單中顯示工作物件的所有屬性。

第三個命令會顯示 JobStateInfo 屬性的值,其中包含工作的狀態。

第四個命令會使用 Receive-Job Cmdlet 取得工作結果。它會將結果儲存在 $results 變數中。

最後一個命令會顯示 $results 變數的內容。






範例 4

C:\PS>start-job -filepath c:\scripts\sample.ps1

描述
-----------
這個命令會將 Sample.ps1 指令碼當做背景工作來執行。






範例 5

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

描述
-----------
這個命令會在本機電腦執行取得 WinRM 處理序的背景工作。它會使用 ScriptBlock 參數來指定在背景工作中執行的命令,並使用 Name 參數指定新工作的好記名稱。






範例 6

C:\PS>start-job -name GetMappingFiles -initializationScript {import-module MapFunctions} -scriptblock {Get-Map -name * | set-content D:\Maps.tif} -runAs32

描述
-----------
這個命令會啟動收集大量資料的工作並將它儲存在 .tif 檔案中。此命令會使用 InitializationScript 參數來執行匯入所需模組的指令碼區塊。此外,它也會使用 RunAs32 參數,在 32 位元處理序中執行此工作,即使電腦具有 64 位元作業系統也一樣。






請參閱




目錄