次の方法で共有


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
     [-VMGuid] <Guid[]>
     [<CommonParameters>]
Start-Job
     [-VMGuid] <Guid[]>
     [<CommonParameters>]
Start-Job
     -VMName <String[]>
     [<CommonParameters>]
Start-Job
     -VMName <String[]>
     [<CommonParameters>]

説明

コマンドレットは Start-Job 、ローカル コンピューターで PowerShell バックグラウンド ジョブを開始します。

PowerShell バックグラウンド ジョブは、現在のセッションと対話せずにコマンドを実行します。 バックグラウンド ジョブを開始すると、ジョブが終了するまでに時間がかかる場合でも、ジョブ オブジェクトがすぐに返されます。 ジョブの実行中は、中断されることなく引き続きセッションで作業できます。

ジョブ オブジェクトにはジョブに関する有用な情報が含まれていますが、ジョブの結果は含まれません。 ジョブが完了したら、 コマンドレットを Receive-Job 使用してジョブの結果を取得します。 バックグラウンド ジョブの詳細については、「about_Jobs」を参照してください。

リモート コンピューターでバックグラウンド ジョブを実行するには、多くのコマンドレットで使用できる AsJob パラメーターを使用するか、 コマンドレットを Invoke-Command 使用してリモート コンピューターでコマンドを実行 Start-Job します。 詳細については、「 about_Remote_Jobs」を参照してください。

PowerShell 3.0 以降では、 Start-Job スケジュールされたジョブなどのカスタム ジョブの種類のインスタンスを開始できます。 を使用 Start-Job してカスタム型でジョブを開始する方法については、ジョブの種類機能のヘルプ ドキュメントを参照してください。

例 1: バックグラウンド ジョブを開始する

次の使用例は、ローカル コンピューターでバックグラウンドで実行されるジョブを開始します。

Start-Job -ScriptBlock {Get-Process}

Id  Name   PSJobTypeName   State     HasMoreData   Location    Command
--  ----   -------------   -----     -----------   --------    -------
1   Job1   BackgroundJob   Running   True          localhost   Get-Process

Start-Job では、 ScriptBlock パラメーターを使用してバックグラウンド ジョブとして実行 Get-Process します。 ジョブ情報が表示され、ジョブがバックグラウンドで実行されている間に PowerShell がプロンプトに戻ります。

例 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-CommandComputerName パラメーターを使用して、ジョブが実行されるコンピューターを指定します。 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 パラメーターは、コンピューターでジョブを実行するアクセス許可を持つドメイン ユーザー アカウントを指定します。 ジョブ オブジェクトは 変数に $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-JobName パラメーターを使用して、フレンドリ ジョブ名 PShellJob を指定しますScriptBlock パラメーターは、Get-ProcessPowerShell という名前のプロセスを取得するように指定します。

例 6: バックグラウンド ジョブを使用してデータを収集して保存する

この例では、大量のマップ データを収集し、ファイルに保存するジョブを .tif 開始します。

Start-Job -Name GetMappingFiles -InitializationScript {Import-Module MapFunctions} -ScriptBlock {
   Get-Map -Name * | Set-Content -Path D:\Maps.tif } -RunAs32

Start-JobName パラメーターを使用して、フレンドリ ジョブ名 GetMappingFiles を指定します。 InitializationScript パラメーターは、MapFunctions モジュールをインポートするスクリプト ブロックを実行します。 ScriptBlock パラメーターを実行Get-Mapし、Set-ContentPath パラメーターで指定された場所にデータを保存します。 RunAs32 パラメーターは、64 ビット オペレーティング システムでも 32 ビットとしてプロセスを実行します。

例 7: バックグラウンド ジョブに入力を渡す

この例では、自動変数を $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 セッション中に再度表示できるようにジョブ出力を保存します。

パラメーター

-ArgumentList

FilePath パラメーターで指定されたスクリプトの引数またはパラメーター値の配列を指定します。

ArgumentList パラメーター名の後にあるすべての値は ArgumentList の値として解釈されるため、このパラメーターをコマンドの最後のパラメーターとして指定します。

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入力します。

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 のバージョンでジョブを実行します。 このパラメーターに使用できる値は、 2.03.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 ビット プロセスでジョブを強制的に実行します。

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

入力

String

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

出力

System.Management.Automation.PSRemotingJob

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

メモ

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