PowerShell Cmdlet - Start-Job
 記事記号:[mh1903] 初版:2011/Sep/30

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

名前
    Start-Job
    
概要
    Windows PowerShell バックグラウンド ジョブを開始します。
    
構文
    Start-Job [-ScriptBlock] <scriptblock> [[-InitializationScript] <scriptblock
    >] [-ArgumentList <Object[]>] [-Authentication {Default | Basic | Negotiate 
    | NegotiateWithImplicitCredential | Credssp | Digest | Kerberos}] [-Credenti
    al <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<C
    ommonParameters>]
    
    Start-Job [[-FilePath] <string>] [[-InitializationScript] <scriptblock>] [-A
    rgumentList <Object[]>] [-Authentication {Default | Basic | Negotiate | Nego
    tiateWithImplicitCredential | Credssp | Digest | Kerberos}] [-Credential <PS
    Credential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonP
    arameters>]
    
説明
    Start-Job コマンドレットは、ローカル コンピューター上で Windows PowerShell 
    バックグラウンド ジョブを開始します。
    
    Windows PowerShell バックグラウンド ジョブは、現在のセッションと対話すること
    なくコマンドを "バックグラウンドで" 実行します。バックグラウンド ジョブを開
    始すると、ジョブの完了に時間がかかる場合でも、ジョブ オブジェクトがすぐに返
    されます。ジョブの実行中に、中断することなく引き続きセッションで作業できます。
    
    ジョブ オブジェクトには、ジョブに関する有用な情報が含まれています。ただし、
    ジョブの結果は含まれません。ジョブが完了したら、Receive-Job コマンドレットを
    使用してジョブの結果を取得します。バックグラウンド ジョブの詳細については、
    「about_Jobs」を参照してください。
    
    バックグラウンド ジョブをリモート コンピューター上で実行するには、多くのコマ
    ンドレットで利用可能な AsJob パラメーターを使用するか、Invoke-Command コマン
    ドレットを使用して Start-Job コマンドをリモート コンピューター上で実行します。
    詳細については、「about_Remote_Jobs」を参照してください。
    
パラメーター
    -ArgumentList <Object[]>
        FilePath パラメーターにより指定されたスクリプトの引数 (パラメーター値) 
       を指定します。
        
        ArgumentList パラメーター名の後の値はすべて ArgumentList の値として解釈
        されるため、ArgumentList パラメーターはコマンドの最後のパラメーターにす
        る必要があります。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Authentication <AuthenticationMechanism>
        ユーザーの資格情報の認証に使用するメカニズムを指定します。有効な値は、De
        fault、Basic、Credssp、Digest、Kerberos、Negotiate、および NegotiateWith
        ImplicitCredential です。既定値は Default です。
        
        CredSSP 認証は、Windows Vista、Windows Server 2008、およびそれ以降のバー
        ジョンの Windows でのみ使用できます。
        
        このパラメーターの値の詳細については、MSDN で System.Management.Automati
        on.Runspaces.AuthenticationMechanism 列挙体の説明を参照してください。
        
        注意: ユーザーの資格情報が認証対象のリモート コンピューターに渡される、
        資格情報のセキュリティ サービス プロバイダー (CredSSP) 認証は、リモート 
        ネットワーク共有にアクセスする場合など、複数のリソースの認証を必要とする
        コマンドを対象としています。このメカニズムを使用すると、リモート操作のセ
        キュリティ リスクが高まります。リモート コンピューターのセキュリティが低
        下している場合は、そのリモート コンピューターに渡される資格情報を使用し
        てネットワーク セッションを制御できます。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Credential <PSCredential>
        この処理を実行するアクセス許可を持つユーザー アカウントを指定します。既
        定値は現在のユーザーです。
        
        "User01" や "Domain01\User01" のようなユーザー名を入力するか、PSCredenti
        al オブジェクト (Get-Credential コマンドレットから返されるものなど) を入
        力します。
        
        必須                         false
        位置                         named
        既定値                       現在のユーザー
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -FilePath <string>
        指定されたローカル スクリプトをバックグラウンド ジョブとして実行します。
        スクリプトのパスとファイル名を入力するか、パイプを使用してスクリプト パ
        スを Start-Job に渡します。スクリプトは、ローカル コンピューター上または
        ローカル コンピューターがアクセスできるディレクトリ内に保存されている必
        要があります。
        
        このパラメーターを使用すると、Windows PowerShell は指定されたスクリプト 
        ファイルの内容をスクリプト ブロックに変換し、そのスクリプト ブロックをバ
        ックグラウンド ジョブとして実行します。
        
        必須                         false
        位置                         1
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -InitializationScript <scriptblock>
        ジョブを開始する前に実行するコマンドを指定します。コマンドを中かっこ ({ 
        }) で囲み、スクリプト ブロックを作成します。
        
        このパラメーターを使用して、ジョブが実行するセッションを準備します。たと
        えば、このパラメーターを使用して、関数、スナップイン、およびモジュールを
        セッションに追加できます。
        
        必須                         false
        位置                         2
        既定値                       なし
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -InputObject <psobject>
        コマンドへの入力を指定します。オブジェクトを格納する変数を入力するか、オ
        ブジェクトを生成するコマンドまたは式を入力します。
        
        ScriptBlock パラメーターの値に $input 自動変数を使用して入力オブジェクト
        を表します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   true (ByValue)
        ワイルドカード文字を許可する false
        
    -Name <string>
        新しいジョブのフレンドリ名を指定します。この名前を使用して、Stop-Job な
        どの他のジョブ コマンドレットでジョブを指定できます。
        
        既定のフレンドリ名は Job# です。"#" は、ジョブごとにインクリメントされる
        序数です。
        
        必須                         false
        位置                         named
        既定値                       Job<number>
        パイプライン入力を許可する   true (ByPropertyName)
        ワイルドカード文字を許可する false
        
    -RunAs32 [<SwitchParameter>]
        ジョブを 32 ビット プロセスで実行します。
        
        64 ビット オペレーティング システムでジョブを 32 ビット プロセスで実行す
        るには、このパラメーターを使用します。
        
        必須                         false
        位置                         named
        既定値                       False
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -ScriptBlock <scriptblock>
        バックグラウンド ジョブで実行するコマンドを指定します。コマンドを中かっ
        こ ({ }) で囲み、スクリプト ブロックを作成します。このパラメーターは必
        須です。
        
        必須                         true
        位置                         1
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    <CommonParameters>
        このコマンドレットは、次の共通パラメーターをサポートします: Verbose、
        Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、
        OutBuffer、および OutVariable。詳細については、
        「get-help about_commonparameters」と入力してヘルプを参照してください。
    
入力
    System.String
        パイプを使用してファイル パスを Start-Job に渡すことができます。
    
出力
    System.Management.Automation.RemotingJob
        Start-Job は、自身が開始したジョブを表すオブジェクトを返します。
    
メモ
        バックグラウンドで実行するには、現在のセッション内で Start-Job を独自の
        セッションで実行します。Invoke-Command コマンドレットを使用してリモート 
        コンピューター上のセッション内で Start-Job コマンドを実行する場合、Start
        -Job はリモート セッション内のセッションで実行されます。
    
    -------------------------- 例 1 --------------------------
    
    C:\PS>start-job -scriptblock {get-process}
    
    C:\PS> start-job -command "get-process"
    
    Id    Name  State    HasMoreData  Location   Command
    ---   ----  -----    -----------  --------   -------
    1     Job1  Running  True         localhost  get-process
        
    説明
    -----------
    このコマンドは、Get-Process コマンドを実行するバックグラウンド ジョブを開始
    します。コマンドは、ジョブに関する情報を含むジョブ オブジェクトを返します。
    すぐにコマンド プロンプトに戻るため、バックグラウンドでジョブが実行されてい
    る間もセッションで作業できます。
    
    -------------------------- 例 2 --------------------------
    
    C:\PS>$jobWRM = invoke-command -computerName (get-content servers.txt) -scri
    ptblock {get-service winrm} -jobname WinRM -throttlelimit 16 -AsJob
    
    説明
    -----------
    このコマンドは、Invoke-Command コマンドレットとその AsJob パラメーターを使用
    して、"get-service winrm" コマンドを実行するバックグラウンド ジョブを多数の
    コンピューター上で開始します。コマンドの実行により大量のネットワーク トラフ
    ィックがサーバーに発生するため、Invoke-Command の ThrottleLimit パラメーター
    を使用して同時に実行されるコマンドの数を 16 個に制限しています。
    
    コマンドは、ComputerName パラメーターを使用して、ジョブを実行するコンピュー
    ターを指定します。ComputerName パラメーターの値は、Servers.txt ファイルのテ
    キストを取得する Get-Content コマンドです。このファイルには、ドメイン内のコ
    ンピューター名が含まれています。
    
    ScriptBlock パラメーターを使用してコマンドを指定し、JobName パラメーターを使
    用してジョブのフレンドリ名を指定します。
    
    -------------------------- 例 3 --------------------------
    
    C:\PS>$j = start-job -scriptblock {get-eventlog -log system} -credential dom
    ain01\user01
    
    C:\PS> $j | format-list -property *
    
    HasMoreData   : True
    StatusMessage :
    Location      : localhost
    Command       : get-eventlog -log system
    JobStateInfo  : Running
    Finished      : System.Threading.ManualResetEvent
    InstanceId    : 2d9d775f-63e0-4d48-b4bc-c05d0e177f34
    Id            : 1
    Name          : Job1
    ChildJobs     : {Job2}
    Output        : {}
    Error         : {}
    Progress      : {}
    Verbose       : {}
    Debug         : {}
    Warning       : {}
    StateChanged  :
    
    C:\PS> $j.JobStateInfo.state
    Completed
    
    C:\PS> $results = receive-job -job $j
    
    C:\PS> $results
    Index Time         Type        Source            EventID Message
    ----- ----         ----        ------            ------- -------
    84366 Feb 18 19:20 Information Service Control M... 7036 The description...
    84365 Feb 18 19:16 Information Service Control M... 7036 The description...
    84364 Feb 18 19:10 Information Service Control M... 7036 The description...
    ...
    
    説明
    -----------
    これらのコマンドは、イベント ビューアーのシステム ログからすべてのイベントを
    取得するバックグラウンド ジョブを管理します。ジョブは、ローカル コンピュータ
    ー上で実行されます。
    
    最初のコマンドは、Start-Job コマンドレットを使用してジョブを開始します。Cred
    ential パラメーターを使用して、コンピューター上でジョブを実行するアクセス許
    可を持つユーザーのユーザー アカウントを指定します。Start-Job によって返され
    るジョブ オブジェクトは、$j 変数に保存されます。
    
    この時点で、ジョブの完了を待たずに別の作業を再開できます。
    
    2 番目のコマンドは、パイプライン演算子 (|) を使用して、$j に保存されたジョブ 
    オブジェクトを Format-List コマンドレットに渡します。Format-List コマンドは 
    Property パラメーターにすべての値 (*) を指定して、ジョブ オブジェクトのすべ
    てのプロパティを一覧に表示します。
    
    3 番目のコマンドは、JobStateInfo プロパティの値を表示します。これには、ジョ
    ブの状態が含まれます。
    
    4 番目のコマンドは、Receive-Job コマンドレットを使用してジョブの結果を取得し
    ます。結果は $results 変数に保存されます。
    
    最後のコマンドは、$results 変数の内容を表示します。

    -------------------------- 例 4 --------------------------
    
    C:\PS>start-job -filepath c:\scripts\sample.ps1
    
    説明
    -----------
    このコマンドは、Sample.ps1 スクリプトをバックグラウンド ジョブとして実行しま
    す。
    
    -------------------------- 例 5 --------------------------
    
    C:\PS>start-job -name WinRm -scriptblock {get-process winrm}
    
    説明
    -----------
    このコマンドは、ローカル コンピューター上で WinRM プロセスを取得するバックグ
    ラウンド ジョブを実行します。このコマンドは、ScriptBlock パラメーターを使用
    して、バックグラウンド ジョブで実行するコマンドを指定します。また、Name パラ
    メーターを使用して、新しいジョブのフレンドリ名を指定します。
    
    -------------------------- 例 6 --------------------------
    
    C:\PS>start-job -name GetMappingFiles -initializationScript {import-module M
    apFunctions} -scriptblock {Get-Map -name * | set-content D:\Maps.tif} -runAs
    32
    
    説明
    -----------
    このコマンドは、大量のデータを収集して .tif ファイルに保存するジョブを開始し
    ます。このコマンドは、InitializationScript パラメーターを使用して、必要なモ
    ジュールをインポートするスクリプト ブロックを実行します。また、RunAs32 パラ
    メーターを使用して、コンピューターが 64 ビット オペレーティング システムを実
    行している場合でもジョブを 32 ビット プロセスで実行します。
    
関連するリンク
    Online version: http://go.microsoft.com/fwlink/?LinkID=113405
    about_Jobs 
    about_Job_Details 
    about_Remote_Jobs 
    Get-Job 
    Receive-Job 
    Wait-Job 
    Stop-Job 
    Remove-Job 
    Invoke-Command 
    	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、Cmdlet、Start-Job
ご利用数: 1971770
感想・要望・問い合わせは こちら