次の方法で共有


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 パラメーターは、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-CommandComputerName パラメーターを使用して、ジョブが実行されるコンピューターを指定します。 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-JobScriptBlock パラメーターを使用して、システム ログを取得することを指定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-JobName パラメーターを使用して、フレンドリ ジョブ名 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-JobName パラメーターを使用して、フレンドリ ジョブ名 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-JobScriptBlock パラメーターを使用して自動変数で実行 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:\TestStart-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-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 { $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

入力

String

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

出力

System.Management.Automation.PSRemotingJob

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

メモ

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