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
、ローカル コンピューターで PowerShell バックグラウンド ジョブを開始します。
PowerShell バックグラウンド ジョブは、現在のセッションと対話せずにコマンドを実行します。 バックグラウンド ジョブを開始すると、ジョブが終了するまでに時間がかかる場合でも、ジョブ オブジェクトがすぐに返されます。 ジョブの実行中は、中断されることなく引き続きセッションで作業できます。
ジョブ オブジェクトにはジョブに関する有用な情報が含まれていますが、ジョブの結果は含まれません。
ジョブが完了したら、コマンドレットを Receive-Job
使用してジョブの結果を取得します。 バックグラウンド ジョブの詳細については、「about_Jobs」を参照してください。
リモート コンピューターでバックグラウンド ジョブを実行するには、 多くのコマンドレットで使用できる AsJob パラメーターを使用するか、コマンドレットを Invoke-Command
使用してリモート コンピューターでコマンドを実行 Start-Job
します。 詳細については、「about_Remote_Jobs」を参照してください。
PowerShell 3.0 以降では、 Start-Job
スケジュールされたジョブなどのカスタム ジョブの種類のインスタンスを開始できます。 カスタム型でジョブを Start-Job
開始する方法については、ジョブの種類機能のヘルプ ドキュメントを参照してください。
ジョブの既定の作業ディレクトリはハードコーディングされます。 Windows の既定値は $HOME\Documents
Linux または macOS では既定値です $HOME
。 バックグラウンド ジョブで実行されているスクリプト コードは、必要に応じて作業ディレクトリを管理する必要があります。
例
例 1: バックグラウンド ジョブを開始する
次の使用例は、ローカル コンピューターで実行されるバックグラウンド ジョブを開始します。
Start-Job -ScriptBlock { Get-Process -Name powershell }
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process -Name powershell
Start-Job
では、 ScriptBlock パラメーターを使用してバックグラウンド ジョブとして実行 Get-Process
されます。 Name パラメーターは、powershell
PowerShell プロセスを検索するように指定します。 ジョブ情報が表示され、ジョブがバックグラウンドで実行されている間、PowerShell がプロンプトに戻ります。
ジョブの出力を表示するには、コマンドレットを Receive-Job
使用します。 たとえば、Receive-Job -Id 1
のようにします。
例 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 パラメーターは、コンピューターでジョブを実行するアクセス許可を持つ doメイン ユーザー アカウントを指定します。 ジョブ オブジェクトは変数に $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 -Name 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 -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 セッション中に再度表示できるようにジョブ出力を保存します。
例 8: 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
のようにします。
パラメーター
-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
を使用して、スケジュールされたジョブで実行されるスクリプトのパラメーターの値を指定することはできません。 詳細については、「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 のバージョンでジョブを実行します。 このパラメーターに使用できる値は次のとおりです3.0
。 2.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 ビット プロセスでジョブを強制的に実行します。
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 |
入力
Name プロパティを持つオブジェクトを Name パラメーターにパイプして、このコマンドレットに渡すことができます。 たとえば、FileInfo オブジェクトGet-ChildItem
をパイプ処理できます。
出力
System.Management.Automation.PSRemotingJob
このコマンドレットは、開始したジョブを 表す PSRemotingJob オブジェクトを返します。
メモ
Windows PowerShell には、次のエイリアスが Start-Job
含まれています。
sajb
バックグラウンドで実行するには、 Start-Job
現在のセッションで独自のセッションで実行します。 コマンドレットを Invoke-Command
使用してリモート コンピューター上のセッションでコマンドを実行 Start-Job
する場合は、 Start-Job
リモート セッションのセッションで実行します。
関連リンク
PowerShell