PowerShell运行空间,输出和变量

时间:2016-12-08 19:22:46

标签: powershell

我试图了解PowerShell中的Runspaces。我知道PoshRSJob-Module,但我想自己创建我的Runspace Jobs。

这是我的代码,主要取自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变量为空?
  • 在目前为止的脚本中,创建以下输出的是什么?如果我$null调用此$Invoke = $PowerShell.BeginInvoke() > $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 :

1 个答案:

答案 0 :(得分:1)

我不明白你的第一个问题。

对于第二个问题,我认为是因为您正在使用$PowerShell.AddParameter($Computer)

请尝试使用$PowerShell.AddArgument($Computer)AddArgument用于添加一个隐式(位置)绑定到参数的值。 AddParameter用于添加命名参数。仅AddParameter string的{​​{1}}超载用于[Switch]个参数。

对于您的第三个问题,我认为它$RunspacePool.Open()会为您提供输出。

在尝试确定这些内容时,查找没有左手赋值的行,尤其是方法调用行;所以你不是要分配给变量的东西,因为这些值通常是如何将这些值放入输出流中的。