2016-12-08 5 views
1

私はPowerShellでRunspacesを理解しようとしています。私はPoshRSJob-Moduleについて知っていますが、自分でランスペースジョブを作成したいと思います。PowerShell実行時空間、出力、および変数

これは主にこのblogから取り出し、私のコードです:

$Computer = "somename" 
[runspacefactory]::CreateRunspacePool() > $null 
$SessionState = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault() 
$RunspacePool = [runspacefactory]::CreateRunspacePool(1,5) 
$RunspacePool.Open() 
1..2 | % { 
    $PowerShell = [powershell]::Create() 
    $PowerShell.RunspacePool = $RunspacePool 
    $PowerShell.AddScript({ 
     param(
      $Computer 
     ) 
     $Computer 
    }) > $null 
    $PowerShell.AddParameter($Computer) 
    $Invoke = $PowerShell.BeginInvoke() 
    while (!($Invoke.IsCompleted)) {sleep -Milliseconds 2} 
    $Data = $PowerShell.EndInvoke($Invoke) 
    Write-Host $Data -f Red 
} 

三つの疑問が私の心にあります。

  • 私は変数の値を返すことができ、それを使用します。ジョブを終了した後にスクリプト内でさらに使用するには?
  • なぜ私の$Data変数は空ですか?
  • これまでのスクリプトでは、次の出力を作成していますか?私はこの$Invoke = $PowerShell.BeginInvoke() > $null ような呼び出しを$null場合、スクリプトはもはや正常に動作しても、この出力

Commands : System.Management.Automation.PSCommand Streams : System.Management.Automation.PSDataStreams InstanceId : 3b91cfda-028e-4cec-9b6d-55bded5d9d3c InvocationStateInfo : System.Management.Automation.PSInvocationStateInfo IsNested : False HadErrors : False Runspace : RunspacePool : System.Management.Automation.Runspaces.RunspacePool IsRunspaceOwner : False HistoryString :

+0

$ PowerShell.AddParameter($ Computer) ' - >' [void] $ PowerShell.AddArgument($ Computer) ' – PetSerAl

答えて

1

を作成していない私はあなたの最初の質問を理解していません。

2番目の質問では、$PowerShell.AddParameter($Computer)を使用していると思われます。

代わりに$PowerShell.AddArgument($Computer)を試してください。 AddArgumentは、暗黙的に(位置的に)パラメータにバインドされる値を追加するためのものです。 AddParameterは名前付きパラメータを追加するためのものです。ちょうどstringを要するAddParameterの過負荷は、[Switch]パラメータです。

3番目の質問では、それはあなたにその出力を与えるのは$RunspacePool.Open()だと思います。

これらのことを判断しようとするときは、特に左手の割り当てを持たないメソッド呼び出しで行を探します。変数に代入していないものがあります。一般にこれらの値が出力ストリームにどのように入れられるかということです。

関連する問題