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

Note

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

これは仕様Start-Job上、プロセス外のバックグラウンド ジョブを開始するために使用できる$PSHOME実行可能ファイルに依存pwshしますが、アプリケーションが PowerShell をホストしている場合は、PowerShell NuGet SDK パッケージを直接使用しており、出荷されませんpwsh

そのシナリオでは、ThreadJob モジュールに代わるものがありますStart-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 パラメーターは、コンピューターでジョブを実行するアクセス許可を持つ doメイン ユーザー アカウントを指定します。 ジョブ オブジェクトは変数に $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 -Name 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 -Path $input } -InputObject "C:\Servers.txt"
Receive-Job -Name Job45 -Keep

Server01
Server02
Server03
Server04

Start-Jobでは、ScriptBlock パラメーターを使用して自動変数を使用して$input実行Get-Contentします。 変数は $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.1PSVersion パラメーターを使用して、Windows PowerShell 5.1 セッションでジョブを実行します。

$PSVersionTable.PSVersion

Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
7      0      0      rc.1

$job = Start-Job -ScriptBlock { $PSVersionTable.PSVersion } -PSVersion 5.1
Receive-Job -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

ユーザー資格情報の認証に使用するメカニズムを指定します。

このパラメーターに使用できる値は次のとおりです。

  • 既定値
  • 基本
  • Credssp
  • Digest
  • Kerberos
  • ネゴシエート
  • NegotiateWithImplicitCredential

既定値は Default です。

CredSSP 認証は、Windows Vista、Windows Server 2008、およびそれ以降のバージョンの Windows オペレーティング システムでのみ使用できます。

このパラメーターの値の詳細については、「AuthenticationMechanism」を参照してください

注意

ユーザーの資格情報が認証されるリモート コンピューターに渡される資格情報セキュリティ サポート プロバイダー (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 や Doメイン01\User01 などのユーザー名を入力するか、コマンドレットによって生成された PSCredential オブジェクトをGet-Credential入力します。 ユーザー名を入力すると、パスワードの入力を求められます。

資格情報は PSCredential オブジェクトに格納され、パスワードは SecureString として格納されます。

Note

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) では機能しません。 64 ビット PowerShell で RunAs32 を指定すると、Start-Job終了例外エラーがスローされます。 RunAs32 で 32 ビット PowerShell (pwsh) プロセスを 開始するには、32 ビット PowerShell がインストールされている必要があります。

32 ビット PowerShell では、 RunAs32 は、64 ビット オペレーティング システムでも、ジョブを強制的に 32 ビット プロセスで実行します。

Windows 7 および Windows Server 2008 R2 の 64 ビット バージョンでは、コマンドに 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

入力

String

Name プロパティを持つオブジェクトを Name パラメーターにパイプして、このコマンドレットに渡すことができます。 たとえば、FileInfo オブジェクトGet-ChildItemをパイプ処理できます。

出力

System.Management.Automation.PSRemotingJob

このコマンドレットは、開始したジョブを 表す PSRemotingJob オブジェクトを返します。

メモ

PowerShell には、次のエイリアスが Start-Job含まれています。

  • すべてのプラットフォーム:
    • sajb

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