1

start-job メソッドを含む関数とは別の関数にスクリプト ブロックを含めることは可能ですか?

私が探しているのはこれです:

function Get-jobA
{

   $params="data1,data2" 
   $jobs += Start-Job -ScriptBlock Get-MyScriptBlock -ArgumentList $params
}

function Get-MyScriptBlock
{
   [string]param1,[string]param2 = $args
   Start-Process -FilePath <someFile> -ArgumentList 'param1,param2' -PassThru -Wait

}
4

2 に答える 2

0

の引数-ScriptBlockはスクリプト ブロックでなければなりません。ただし、関数はスクリプト ブロックではなく、Start-Processコマンドレットの結果を返します。実際にスクリプト ブロックを返すように変更します。

function Get-MyScriptBlock {
  return {
    Param([string]param1, [string]param2)
    Start-Process -FilePath <someFile> -ArgumentList $param1, $param2 `
      -PassThru -Wait
  }
}

次のように変更Get-JobAします。

function Get-jobA {
  $params = "data1", "data2"
  $jobs += Start-Job -ScriptBlock (Get-MyScriptBlock) -ArgumentList $params
}

を囲む括弧に注意してくださいGet-MyScriptBlock。サブシェルで関数を実行する必要があります。そうしないと、PowerShell はの代わりに の-ArgumentList $params引数として解釈します。また、スクリプト ブロックが 2 つの文字列引数を想定している場合、引数リストは 2 つの文字列の配列でなければならないことに注意してください。Get-MyScriptBlockStart-Job

于 2013-05-24T19:27:17.457 に答える