Start-Job
PowerShell バックグラウンド ジョブを開始します。
構文
Start-Job
[-Name <String>]
[-ScriptBlock] <ScriptBlock>
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-DefinitionName] <String>
[[-DefinitionPath] <String>]
[[-Type] <String>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
[-FilePath] <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
-LiteralPath <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-VMGuid] <Guid[]>
[<CommonParameters>]
Start-Job
[-VMGuid] <Guid[]>
[<CommonParameters>]
Start-Job
-VMName <String[]>
[<CommonParameters>]
Start-Job
-VMName <String[]>
[<CommonParameters>]
説明
コマンドレットは Start-Job
、ローカル コンピューターで PowerShell バックグラウンド ジョブを開始します。
PowerShell バックグラウンド ジョブは、現在のセッションと対話せずにコマンドを実行します。 バックグラウンド ジョブを開始すると、ジョブが終了するまでに時間がかかる場合でも、ジョブ オブジェクトがすぐに返されます。 ジョブの実行中は、中断されることなく引き続きセッションで作業できます。
ジョブ オブジェクトにはジョブに関する有用な情報が含まれていますが、ジョブの結果は含まれません。
ジョブが完了したら、 コマンドレットを Receive-Job
使用してジョブの結果を取得します。 バックグラウンド ジョブの詳細については、「about_Jobs」を参照してください。
リモート コンピューターでバックグラウンド ジョブを実行するには、多くのコマンドレットで使用できる AsJob パラメーターを使用するか、 コマンドレットを Invoke-Command
使用してリモート コンピューターでコマンドを実行 Start-Job
します。 詳細については、「 about_Remote_Jobs」を参照してください。
PowerShell 3.0 以降では、 Start-Job
スケジュールされたジョブなどのカスタム ジョブの種類のインスタンスを開始できます。 を使用 Start-Job
してカスタム型でジョブを開始する方法については、ジョブの種類機能のヘルプ ドキュメントを参照してください。
例
例 1: バックグラウンド ジョブを開始する
次の使用例は、ローカル コンピューターでバックグラウンドで実行されるジョブを開始します。
Start-Job -ScriptBlock {Get-Process}
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process
Start-Job
では、 ScriptBlock パラメーターを使用してバックグラウンド ジョブとして実行 Get-Process
します。 ジョブ情報が表示され、ジョブがバックグラウンドで実行されている間に PowerShell がプロンプトに戻ります。
例 2: Invoke-Command を使用してジョブを開始する
この例では、複数のコンピューターでジョブを実行します。 ジョブは変数に格納され、PowerShell コマンド ラインの変数名を使用して実行されます。
$jobWRM = Invoke-Command -ComputerName (Get-Content -Path C:\Servers.txt) -ScriptBlock {
Get-Service -Name WinRM } -JobName WinRM -ThrottleLimit 16 -AsJob
を使用 Invoke-Command
するジョブが作成され、 変数に $jobWRM
格納されます。 Invoke-Command
は ComputerName パラメーターを使用して、ジョブが実行されるコンピューターを指定します。 Get-Content
は、ファイルからサーバー名を C:\Servers.txt
取得します。
ScriptBlock パラメーターは、WinRM サービスを取得するGet-Service
コマンドを指定します。 JobName パラメーターは、ジョブ WinRM のフレンドリ名を指定します。 ThrottleLimit パラメーターは、同時実行コマンドの数を 16 に制限します。 AsJob パラメーターは、サーバーでコマンドを実行するバックグラウンド ジョブを開始します。
例 3: ジョブ情報を取得する
この例では、ジョブに関する情報を取得し、ローカル コンピューターで実行された完了したジョブの結果を表示します。
$j = Start-Job -ScriptBlock { Get-WinEvent -Log System } -Credential Domain01\User01
$j | Select-Object -Property *
State : Completed
HasMoreData : True
StatusMessage :
Location : localhost
Command : Get-WinEvent -Log System
JobStateInfo : Completed
Finished : System.Threading.ManualResetEvent
InstanceId : 27ce3fd9-40ed-488a-99e5-679cd91b9dd3
Id : 18
Name : Job18
ChildJobs : {Job19}
PSBeginTime : 8/8/2019 14:41:57
PSEndTime : 8/8/2019 14:42:07
PSJobTypeName : BackgroundJob
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
Information : {}
Start-Job
では、ScriptBlock パラメーターを使用して、システム ログの取得を指定Get-WinEvent
するコマンドを実行します。 Credential パラメーターは、コンピューターでジョブを実行するアクセス許可を持つドメイン ユーザー アカウントを指定します。 ジョブ オブジェクトは 変数に $j
格納されます。
変数内の $j
オブジェクトは、パイプラインから に Select-Object
送信されます。 Property パラメーターは、ジョブ オブジェクトのすべてのプロパティを表示するアスタリスク (*
) を指定します。
例 4: バックグラウンド ジョブとしてスクリプトを実行する
この例では、ローカル コンピューター上のスクリプトがバックグラウンド ジョブとして実行されます。
Start-Job -FilePath C:\Scripts\Sample.ps1
Start-Job
は FilePath パラメーターを使用して、ローカル コンピューターに格納されているスクリプト ファイルを指定します。
例 5: バックグラウンド ジョブを使用してプロセスを取得する
この例では、バックグラウンド ジョブを使用して、指定したプロセスを名前で取得します。
Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }
Start-Job
Name パラメーターを使用して、フレンドリ ジョブ名 PShellJob を指定します。 ScriptBlock パラメーターは、Get-Process
PowerShell という名前のプロセスを取得するように指定します。
例 6: バックグラウンド ジョブを使用してデータを収集して保存する
この例では、大量のマップ データを収集し、ファイルに保存するジョブを .tif
開始します。
Start-Job -Name GetMappingFiles -InitializationScript {Import-Module MapFunctions} -ScriptBlock {
Get-Map -Name * | Set-Content -Path D:\Maps.tif } -RunAs32
Start-Job
Name パラメーターを使用して、フレンドリ ジョブ名 GetMappingFiles を指定します。 InitializationScript パラメーターは、MapFunctions モジュールをインポートするスクリプト ブロックを実行します。 ScriptBlock パラメーターを実行Get-Map
し、Set-Content
Path パラメーターで指定された場所にデータを保存します。 RunAs32 パラメーターは、64 ビット オペレーティング システムでも 32 ビットとしてプロセスを実行します。
例 7: バックグラウンド ジョブに入力を渡す
この例では、自動変数を $input
使用して入力オブジェクトを処理します。 ジョブの出力を表示するには、 を使用 Receive-Job
します。
Start-Job -ScriptBlock { Get-Content $input } -InputObject "C:\Servers.txt"
Receive-Job -Name Job45 -Keep
Server01
Server02
Server03
Server04
Start-Job
は ScriptBlock パラメーターを使用して自動変数で実行 Get-Content
します $input
。 変数は$input
、InputObject パラメーターからオブジェクトを取得します。 Receive-Job
は Name パラメーターを使用してジョブを指定し、結果を出力します。 Keep パラメーターは、PowerShell セッション中に再度表示できるようにジョブ出力を保存します。
パラメーター
-ArgumentList
FilePath パラメーターで指定されたスクリプトの引数またはパラメーター値の配列を指定します。
ArgumentList パラメーター名の後にあるすべての値は ArgumentList の値として解釈されるため、このパラメーターをコマンドの最後のパラメーターとして指定します。
Type: | Object[] |
Aliases: | Args |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Authentication
ユーザー資格情報の認証に使用するメカニズムを指定します。
このパラメーターに使用できる値は次のとおりです。
- Default
- Basic
- Credssp
- ダイジェスト
- Kerberos
- ネゴシエート
- NegotiateWithImplicitCredential
既定値は Default です。
CredSSP 認証は、Windows Vista、Windows Server 2008、およびそれ以降のバージョンの Windows オペレーティング システムでのみ使用できます。
このパラメーターの値の詳細については、「 AuthenticationMechanism」を参照してください。
注意事項
ユーザーの資格情報が認証対象のリモート コンピューターに渡される Credential Security Support Provider (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 |
-Credential
この処理を実行するアクセス許可を持つユーザー アカウントを指定します。 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 |
-DefinitionName
このコマンドレットを開始するジョブの定義名を指定します。 このパラメーターは、スケジュールされたジョブのように定義名を持つカスタムのジョブを開始するために使用します。
を使用 Start-Job
してスケジュールされたジョブのインスタンスを開始すると、ジョブ トリガーやジョブ オプションに関係なく、ジョブはすぐに開始されます。 結果のジョブ インスタンスはスケジュールされたジョブですが、トリガーされたスケジュールされたジョブのようにディスクに保存されません。 の ArgumentList パラメーター Start-Job
を使用して、スケジュールされたジョブで実行されるスクリプトのパラメーターの値を指定することはできません。 詳細については、「 about_Scheduled_Jobs」を参照してください。
このパラメーターは、PowerShell 3.0 で導入されました。
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionPath
このコマンドレットが開始するジョブの定義のパスを指定します。 定義のパスを入力します。 DefinitionPath パラメーターと DefinitionName パラメーターの値の連結は、ジョブ定義の完全修飾パスです。 このパラメーターは、スケジュールされたジョブのように定義パスを持つカスタムのジョブを開始するために使用します。
スケジュールされたジョブの場合、 DefinitionPath パラメーターの値は です $home\AppData\Local\Windows\PowerShell\ScheduledJob
。
このパラメーターは、PowerShell 3.0 で導入されました。
Type: | String |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilePath
バックグラウンド ジョブとして実行される Start-Job
ローカル スクリプトを指定します。 スクリプトのパスとファイル名を入力するか、パイプラインを使用して スクリプト パスを に Start-Job
送信します。 スクリプトは、ローカル コンピューター上にあるか、ローカル コンピューターがアクセスできるフォルダーに存在する必要があります。
このパラメーターを使用すると、PowerShell は指定したスクリプト ファイルの内容をスクリプト ブロックに変換し、スクリプト ブロックをバックグラウンド ジョブとして実行します。
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InitializationScript
ジョブの開始前に実行するコマンドを指定します。 スクリプト ブロックを作成するには、コマンドを中かっこ ({}
) で囲みます。
このパラメーターは、ジョブを実行するセッションを準備するために使用します。 たとえば、このパラメーターを使用して、関数、スナップイン、モジュールをセッションに追加できます。
Type: | ScriptBlock |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
コマンドへの入力を指定します。 オブジェクトが格納されている変数を入力するか、オブジェクトを生成するコマンドまたは式を入力します。
ScriptBlock パラメーターの値で、自動変数を$input
使用して入力オブジェクトを表します。
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-LiteralPath
このコマンドレットがバックグラウンド ジョブとして実行するローカル スクリプトを指定します。 ローカル コンピューター上のスクリプトのパスを入力します。
Start-Job
では、 LiteralPath パラメーターの値が型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、文字をエスケープ シーケンスとして解釈しないように PowerShell に指示します。
Type: | String |
Aliases: | PSPath |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
新しいジョブのフレンドリ名を指定します。 名前を使用して、コマンドレットなどの他のジョブ コマンドレットに対してジョブを Stop-Job
識別できます。
既定のフレンドリ名は です Job#
。ここで #
、 はジョブごとにインクリメントされる序数です。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-PSVersion
バージョンを指定します。 Start-Job
は、PowerShell のバージョンでジョブを実行します。 このパラメーターに使用できる値は、 2.0
と 3.0
です。
このパラメーターは、PowerShell 3.0 で導入されました。
Type: | Version |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RunAs32
32 ビット プロセスでジョブを実行することを Start-Job
示します。 RunAs32 は、64 ビット オペレーティング システムでも、32 ビット プロセスでジョブを強制的に実行します。
64 ビット バージョンの Windows 7 および Windows Server 2008 R2 では、コマンドに RunAs32 パラメーターがStart-Job
含まれている場合、Credential パラメーターを使用して別のユーザーの資格情報を指定することはできません。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ScriptBlock
バックグラウンド ジョブで実行するコマンドを指定します。 スクリプト ブロックを作成するには、コマンドを中かっこ ({}
) で囲みます。 InputObject パラメーターの$input
値にアクセスするには、自動変数を使用します。 このパラメーターは必須です。
Type: | ScriptBlock |
Aliases: | Command |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Type
によって開始されるジョブのカスタム型を Start-Job
指定します。 カスタムのジョブの種類の名前を入力します (スケジュールされたジョブの場合は PSScheduledJob、ワークフロー ジョブの場合は PSWorkflowJob)。 このパラメーターは、標準のバックグラウンド ジョブでは有効ではありません。
このパラメーターは、PowerShell 3.0 で導入されました。
Type: | String |
Position: | 2 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
入力
パイプラインを使用して、 Name プロパティを持つオブジェクトを Name パラメーターに送信できます。 たとえば、 FileInfo オブジェクトを から Get-ChildItem
に Start-Job
パイプライン化できます。
出力
System.Management.Automation.PSRemotingJob
Start-Job
は、開始したジョブを表す PSRemotingJob オブジェクトを返します。
メモ
バックグラウンドで実行するには、 Start-Job
現在のセッションで独自のセッションで を実行します。 コマンドレットを Invoke-Command
使用してリモート コンピューター上のセッションでコマンドを実行 Start-Job
する場合は、 Start-Job
リモート セッションのセッションで を実行します。