Start-Job
PowerShell バックグラウンド ジョブを開始します。
構文
Start-Job
[-Name <String>]
[-ScriptBlock] <ScriptBlock>
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-WorkingDirectory <String>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-DefinitionName] <String>
[[-DefinitionPath] <String>]
[[-Type] <String>]
[-WorkingDirectory <String>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
[-FilePath] <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-WorkingDirectory <String>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
-LiteralPath <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-WorkingDirectory <String>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
説明
コマンドレットは Start-Job
、ローカル コンピューターで PowerShell バックグラウンド ジョブを開始します。
PowerShell バックグラウンド ジョブは、現在のセッションと対話せずにコマンドを実行します。 バックグラウンド ジョブを開始すると、ジョブが終了するまでに時間がかかる場合でも、ジョブ オブジェクトがすぐに返されます。 ジョブの実行中は、中断されることなく引き続きセッションで作業できます。
ジョブ オブジェクトにはジョブに関する有用な情報が含まれていますが、ジョブの結果は含まれません。
ジョブが完了したら、 コマンドレットを Receive-Job
使用してジョブの結果を取得します。 バックグラウンド ジョブの詳細については、「about_Jobs」を参照してください。
リモート コンピューターでバックグラウンド ジョブを実行するには、多くのコマンドレットで使用できる AsJob パラメーターを使用するか、 コマンドレットを Invoke-Command
使用してリモート コンピューターでコマンドを Start-Job
実行します。 詳細については、「 about_Remote_Jobs」を参照してください。
PowerShell 3.0 以降では、 Start-Job
スケジュールされたジョブなどのカスタム ジョブの種類のインスタンスを開始できます。 を使用 Start-Job
してカスタム型でジョブを開始する方法については、ジョブの種類の機能に関するヘルプ ドキュメントを参照してください。
PowerShell 6.0 以降では、アンパサンド (&
) バックグラウンド演算子を使用してジョブを開始できます。 バックグラウンド演算子の機能は と似ています Start-Job
。 ジョブを開始する両方のメソッドは、 PSRemotingJob ジョブ オブジェクトを作成します。 アンパサンド (&
) の使用の詳細については、「 about_Operators」を参照してください。
PowerShell 7 では、バックグラウンド ジョブの初期作業ディレクトリを指定する WorkingDirectory パラメーターが導入されました。 パラメーターが指定されていない場合、既定では、 Start-Job
ジョブを開始した呼び出し元の現在の作業ディレクトリが使用されます。
注意
でプロセス外のバックグラウンド ジョブStart-Job
を作成することは、PowerShell Azure Functionsなどの他のアプリケーションで PowerShell がホストされているシナリオではサポートされていません。
これは仕様上、プロセス外のバックグラウンド ジョブを開始するために 使用できる$PSHOME
実行可能ファイルに依存pwsh
しますStart-Job
が、アプリケーションが PowerShell をホストしている場合は、PowerShell NuGet SDK パッケージを直接使用しているため、pwsh
出荷されません。
そのシナリオの代替は、 Start-ThreadJob
モジュール ThreadJob からのものになります。
例
例 1: バックグラウンド ジョブを開始する
次の使用例は、ローカル コンピューターで実行されるバックグラウンド ジョブを開始します。
Start-Job -ScriptBlock { Get-Process -Name pwsh }
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process -Name pwsh
Start-Job
では、 ScriptBlock パラメーターを使用してバックグラウンド ジョブとして実行 Get-Process
します。 Name パラメーターは、pwsh
PowerShell プロセスを検索するために を指定します。 ジョブ情報が表示され、ジョブがバックグラウンドで実行されている間に PowerShell がプロンプトに戻ります。
ジョブの出力を表示するには、 コマンドレットを使用します Receive-Job
。 たとえば、「 Receive-Job -Id 1
」のように入力します。
例 2: バックグラウンド・オペレーターを使用してバックグラウンド・ジョブを開始する
この例では、アンパサンド (&
) バックグラウンド 演算子を使用して、ローカル コンピューターでバックグラウンド ジョブを開始します。 ジョブは、例 1 と同じ結果 Start-Job
を取得します。
Get-Process -Name pwsh &
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
5 Job5 BackgroundJob Running True localhost Microsoft.PowerShell.Man...
Get-Process
では、Name パラメーターを使用して PowerShell プロセス をpwsh
指定します。 アンパサンド (&
) は、コマンドをバックグラウンド ジョブとして実行します。 ジョブ情報が表示され、ジョブがバックグラウンドで実行されている間に PowerShell がプロンプトに戻ります。
ジョブの出力を表示するには、 コマンドレットを使用します Receive-Job
。 たとえば、「 Receive-Job -Id 5
」のように入力します。
例 3: 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 パラメーターは、サーバーでコマンドを実行するバックグラウンド ジョブを開始します。
例 4: ジョブ情報を取得する
この例では、ジョブに関する情報を取得し、ローカル コンピューターで実行された完了したジョブの結果を表示します。
$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 パラメーターは、ジョブ オブジェクトのすべてのプロパティを表示するアスタリスク (*
) を指定します。
例 5: バックグラウンド ジョブとしてスクリプトを実行する
この例では、ローカル コンピューター上のスクリプトがバックグラウンド ジョブとして実行されます。
Start-Job -FilePath C:\Scripts\Sample.ps1
Start-Job
は FilePath パラメーターを使用して、ローカル コンピューターに格納されているスクリプト ファイルを指定します。
例 6: バックグラウンド ジョブを使用してプロセスを取得する
この例では、バックグラウンド ジョブを使用して、指定したプロセスを名前で取得します。
Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }
Start-Job
Name パラメーターを使用して、フレンドリ ジョブ名 PShellJob を指定します。 ScriptBlock パラメーターは、Get-Process
PowerShell という名前のプロセスを取得するように指定します。
例 7: バックグラウンド ジョブを使用してデータを収集して保存する
次の使用例は、大量のマップ データを収集してファイルに保存するジョブを .tif
開始します。
Start-Job -Name GetMappingFiles -InitializationScript {Import-Module MapFunctions} -ScriptBlock {
Get-Map -Name * | Set-Content -Path D:\Maps.tif }
Start-Job
Name パラメーターを使用して、フレンドリ ジョブ名 GetMappingFiles を指定します。 InitializationScript パラメーターは、MapFunctions モジュールをインポートするスクリプト ブロックを実行します。 ScriptBlock パラメーターを実行Get-Map
し、Set-Content
Path パラメーターで指定された場所にデータを保存します。
例 8: バックグラウンド ジョブに入力を渡す
この例では、自動変数を $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 セッション中に再度表示できるようにジョブ出力を保存します。
例 9: バックグラウンド ジョブの作業ディレクトリを設定する
WorkingDirectory を使用すると、スクリプトを実行したりファイルを開いたりできるジョブの代替ディレクトリを指定できます。 この例では、バックグラウンド ジョブは、現在のディレクトリの場所とは異なる作業ディレクトリを指定します。
PS C:\Test> Start-Job -WorkingDirectory C:\Test\Scripts { $PWD } | Receive-Job -AutoRemoveJob -Wait
Path
----
C:\Test\Scripts
この例の現在の作業ディレクトリは です C:\Test
。 Start-Job
では、 WorkingDirectory パラメーターを使用してジョブの作業ディレクトリを指定します。 ScriptBlock パラメーターは、 を使用$PWD
してジョブの作業ディレクトリを表示します。 Receive-Job
には、バックグラウンド ジョブの出力が表示されます。
AutoRemoveJob は ジョブを削除し、 Wait はすべての結果を受信するまでコマンド プロンプトを抑制します。
例 10: ArgumentList パラメーターを使用して配列を指定する
この例では、 ArgumentList パラメーターを使用して引数の配列を指定します。 配列は、プロセス名のコンマ区切りのリストです。
Start-Job -ScriptBlock { Get-Process -Name $args } -ArgumentList powershell, pwsh, notepad
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process -Name $args
コマンドレットでは Start-Job
、 ScriptBlock パラメーターを使用してコマンドを実行します。 Get-Process
は Name パラメーターを使用して自動変数 $args
を指定します。 ArgumentList パラメーターは、プロセス名の配列を に$args
渡します。 プロセス名 powershell、pwsh、およびメモ帳は、ローカル コンピューターで実行されているプロセスです。
ジョブの出力を表示するには、 コマンドレットを使用します Receive-Job
。 たとえば、「 Receive-Job -Id 1
」のように入力します。
例 11: Windows PowerShell 5.1 でジョブを実行する
この例では、値 5.1 の PSVersion パラメーターを使用して、Windows PowerShell 5.1 セッションでジョブを実行します。
$PSVersionTable.PSVersion
Major Minor Patch PreReleaseLabel BuildLabel
----- ----- ----- --------------- ----------
7 0 0 rc.1
$job = Start-Job { $PSVersionTable.PSVersion } -PSVersion 5.1
Receive-Job $job
Major Minor Build Revision
----- ----- ----- --------
5 1 14393 3383
パラメーター
-ArgumentList
FilePath パラメーターで指定されたスクリプト、または ScriptBlock パラメーターで指定されたコマンドの引数またはパラメーター値の配列を指定します。
引数は、単一次元配列引数として ArgumentList に渡す必要があります。 たとえば、コンマ区切りのリストです。 ArgumentList の動作の詳細については、「about_Splatting」を参照してください。
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
入力します。 ユーザー名を入力すると、パスワードの入力を求められます。
資格情報は PSCredential オブジェクトに格納され、パスワードは SecureString として格納されます。
注意
SecureString データ保護の詳細については、SecureString のセキュリティ保護に関するページを参照してください。
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionName
このコマンドレットが開始するジョブの定義名を指定します。 このパラメーターは、スケジュールされたジョブのように定義名を持つカスタムのジョブを開始するために使用します。
を使用 Start-Job
してスケジュールされたジョブのインスタンスを開始すると、ジョブ トリガーやジョブ オプションに関係なく、ジョブが直ちに開始されます。 結果のジョブ インスタンスはスケジュールされたジョブですが、トリガーされたスケジュールされたジョブのようにディスクに保存されません。 の ArgumentList パラメーター Start-Job
を使用して、スケジュールされたジョブで実行されるスクリプトのパラメーターの値を指定することはできません。
このパラメーターは 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, LP |
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
ジョブの実行に使用する PowerShell のバージョンを指定します。 PSVersion の値が 5.1 の場合ジョブは、Windows PowerShell 5.1 セッションで実行されます。 その他の値の場合、ジョブは現在のバージョンの PowerShell を使用して実行されます。
このパラメーターは PowerShell 7 で追加され、Windows でのみ機能します。
Type: | Version |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RunAs32
PowerShell 7 以降、 RunAs32 パラメーターは 64 ビット PowerShell (pwsh
) では機能しません。
RunAs32 が 64 ビット PowerShell で指定されている場合、Start-Job
終了例外エラーがスローされます。
RunAs32 で 32 ビット PowerShell (pwsh
) プロセスを開始するには、32 ビット PowerShell がインストールされている必要があります。
32 ビット PowerShell では、 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 |
-WorkingDirectory
バックグラウンド ジョブの初期作業ディレクトリを指定します。 パラメーターが指定されていない場合、ジョブは既定の場所から実行されます。 既定の場所は、ジョブを開始した呼び出し元の現在の作業ディレクトリです。
このパラメーターは PowerShell 7 で導入されました。
Type: | String |
Position: | Named |
Default value: | $HOME on Unix (macOS, Linux) and $HOME\Documents on Windows |
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
リモート セッションのセッションで実行されます。