Start-Job
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 コマンドレットは、ローカル コンピューター上で Windows PowerShell バックグラウンド ジョブを開始します。
Windows PowerShell バックグラウンド ジョブは、現在のセッションと対話することなくコマンドを "バックグラウンドで" 実行します。バックグラウンド ジョブを開始すると、ジョブの完了に時間がかかる場合でも、ジョブ オブジェクトがすぐに返されます。ジョブの実行中に、中断することなく引き続きセッションで作業できます。
ジョブ オブジェクトには、ジョブに関する有用な情報が含まれています。ただし、ジョブの結果は含まれません。ジョブが完了したら、Receive-Job コマンドレットを使用してジョブの結果を取得します。バックグラウンド ジョブの詳細については、「about_Jobs」を参照してください。
バックグラウンド ジョブをリモート コンピューター上で実行するには、多くのコマンドレットで利用可能な AsJob パラメーターを使用するか、Invoke-Command コマンドレットを使用して 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 コマンドレットから返されるものなど) を入力します。
必須 |
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>
新しいジョブのフレンドリ名を指定します。この名前を使用して、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>
このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。詳細については、次を参照してください: about_Commonparameters.
入力と出力
入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。
入力 |
System.String パイプを使用してファイル パスを Start-Job に渡すことができます。 |
出力 |
System.Management.Automation.RemotingJob Start-Job は、自身が開始したジョブを表すオブジェクトを返します。 |
注
バックグラウンドで実行するには、現在のセッション内で Start-Job を独自のセッションで実行します。Invoke-Command コマンドレットを使用してリモート コンピューター上のセッション内で 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 コマンドレットとその AsJob パラメーターを使用して、"get-service winrm" コマンドを実行するバックグラウンド ジョブを多数のコンピューター上で開始します。コマンドの実行により大量のネットワーク トラフィックがサーバーに発生するため、Invoke-Command の ThrottleLimit パラメーターを使用して同時に実行されるコマンドの数を 16 個に制限しています。
コマンドは、ComputerName パラメーターを使用して、ジョブを実行するコンピューターを指定します。ComputerName パラメーターの値は、Servers.txt ファイルのテキストを取得する Get-Content コマンドです。このファイルには、ドメイン内のコンピューター名が含まれています。
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 コマンドレットを使用してジョブを開始します。Credential パラメーターを使用して、コンピューター上でジョブを実行するアクセス許可を持つユーザーのユーザー アカウントを指定します。Start-Job によって返されるジョブ オブジェクトは、$j 変数に保存されます。
この時点で、ジョブの完了を待たずに別の作業を再開できます。
2 番目のコマンドは、パイプライン演算子 (|) を使用して、$j に保存されたジョブ オブジェクトを Format-List コマンドレットに渡します。Format-List コマンドは Property パラメーターにすべての値 (*) を指定して、ジョブ オブジェクトのすべてのプロパティを一覧に表示します。
3 番目のコマンドは、JobStateInfo プロパティの値を表示します。これには、ジョブの状態が含まれます。
4 番目のコマンドは、Receive-Job コマンドレットを使用してジョブの結果を取得します。結果は $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 パラメーターを使用して、コンピューターが 64 ビット オペレーティング システムを実行している場合でもジョブを 32 ビット プロセスで実行します。
関連項目
概念
about_Jobs
about_Job_Details
about_remote_jobs
Get-Job
Receive-Job
Wait-Job
Stop-Job
Remove-Job
Invoke-Command