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 ジョブを開始した呼び出し元の現在の作業ディレクトリが使用されます。

注意

PowerShell が他のアプリケーション (PowerShell Azure Functionsなど) でホストされているシナリオでは、アウトプロセス バックグラウンド ジョブStart-Jobの作成はサポートされていません。

これは仕様上、アウトプロセスバックグラウンド ジョブを開始するために使用できる$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 パラメーターは、pwshPowerShell プロセスを検索するように指定します。 ジョブ情報が表示され、ジョブがバックグラウンドで実行されている間、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-ProcessPowerShell という名前のプロセスを取得するように指定します。

例 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-ContentPath パラメーターで指定された場所にデータを保存します。

例 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-JobName パラメーターを使用してジョブを指定し、結果を出力します。 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-JobScriptBlock パラメーターを使用してコマンドを実行します。 Get-ProcessName パラメーターを使用して自動変数 $argsを指定します。 ArgumentList パラメーターは、プロセス名$argsの配列を渡します。 powershell、pwsh、およびメモ帳のプロセス名は、ローカル コンピューターで実行されているプロセスです。

ジョブの出力を表示するには、コマンドレットを Receive-Job 使用します。 たとえば、Receive-Job -Id 1 のようにします。

例 11: Windows PowerShell 5.1 でジョブを実行する

この例では、値 5.1PSVersion パラメーターを使用して、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
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
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
Accept pipeline input:False
Accept wildcard characters:False
-DefinitionName

このコマンドレットが開始するジョブの定義名を指定します。 このパラメーターは、スケジュールされたジョブのように定義名を持つカスタムのジョブを開始するために使用します。

スケジュールされたジョブのインスタンスを開始するために使用 Start-Job する場合、ジョブトリガーやジョブオプションに関係なく、ジョブはすぐに開始されます。 結果のジョブ インスタンスはスケジュールされたジョブですが、トリガーされたスケジュールされたジョブのようにディスクに保存されません。 ArgumentList パラメーターStart-Jobを使用して、スケジュールされたジョブで実行されるスクリプトのパラメーターの値を指定することはできません。

このパラメーターは、PowerShell 3.0 で導入されました。

Type:String
Position:0
Default value:None
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
Accept pipeline input:False
Accept wildcard characters:False
-FilePath

バックグラウンド ジョブとして実行される Start-Job ローカル スクリプトを指定します。 スクリプトのパスとファイル名を入力するか、パイプラインを使用してスクリプト パスを送信します Start-Job。 スクリプトは、ローカル コンピューターまたはローカル コンピューターがアクセスできるフォルダーに存在する必要があります。

このパラメーターを使用すると、PowerShell は指定されたスクリプト ファイルの内容をスクリプト ブロックに変換し、スクリプト ブロックをバックグラウンド ジョブとして実行します。

Type:String
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-InitializationScript

ジョブの開始前に実行するコマンドを指定します。 スクリプト ブロックを作成するには、コマンドを中かっこ ({}) で囲みます。

このパラメーターは、ジョブを実行するセッションを準備するために使用します。 たとえば、このパラメーターを使用して、関数、スナップイン、モジュールをセッションに追加できます。

Type:ScriptBlock
Position:1
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-InputObject

コマンドへの入力を指定します。 オブジェクトが格納されている変数を入力するか、オブジェクトを生成するコマンドまたは式を入力します。

ScriptBlock パラメーターの値で、自動変数を$input使用して入力オブジェクトを表します。

Type:PSObject
Position:Named
Default value:None
Accept pipeline input:True
Accept wildcard characters:False
-LiteralPath

このコマンドレットがバックグラウンド ジョブとして実行するローカル スクリプトを指定します。 ローカル コンピューター上のスクリプトのパスを入力します。

Start-Job では、 LiteralPath パラメーターの値が型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、文字をエスケープ シーケンスとして解釈しないように PowerShell に指示します。

Type:String
Aliases:PSPath, LP
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-Name

新しいジョブのフレンドリ名を指定します。 この名前を使用して、コマンドレットなどの他のジョブ コマンドレットにジョブを Stop-Job 識別できます。

既定のフレンドリ名は Job#、ジョブ # ごとにインクリメントされる序数です。

Type:String
Position:Named
Default value:None
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
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-JobCredential パラメーターを使用して別のユーザーの資格情報を指定することはできません。

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-ScriptBlock

バックグラウンド ジョブで実行するコマンドを指定します。 スクリプト ブロックを作成するには、コマンドを中かっこ ({}) で囲みます。 自動変数を $input 使用して 、InputObject パラメーターの値にアクセスします。 このパラメーターは必須です。

Type:ScriptBlock
Aliases:Command
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-Type

によって開始されるジョブのカスタムの種類を Start-Job指定します。 カスタムのジョブの種類の名前を入力します (スケジュールされたジョブの場合は PSScheduledJob、ワークフロー ジョブの場合は PSWorkflowJob)。 このパラメーターは、標準のバックグラウンド ジョブでは有効ではありません。

このパラメーターは、PowerShell 3.0 で導入されました。

Type:String
Position:2
Default value:None
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
Accept pipeline input:False
Accept wildcard characters:False

入力

String

パイプラインを使用して、 Name プロパティを持つオブジェクトを Name パラメーターに送信できます。 たとえば、FileInfo オブジェクトGet-ChildItemStart-Jobをパイプライン処理できます。

出力

System.Management.Automation.PSRemotingJob

Start-Job は、開始したジョブを表す PSRemotingJob オブジェクトを返します。

メモ

バックグラウンドで実行するには、 Start-Job 現在のセッションで独自のセッションで実行します。 コマンドレットを Invoke-Command 使用してリモート コンピューター上のセッションでコマンドを実行 Start-Job する場合は、 Start-Job リモート セッションのセッションで実行されます。