我试图了解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 :
答案 0 :(得分:1)
我不明白你的第一个问题。
对于第二个问题,我认为是因为您正在使用$PowerShell.AddParameter($Computer)
。
请尝试使用$PowerShell.AddArgument($Computer)
。 AddArgument
用于添加一个隐式(位置)绑定到参数的值。 AddParameter
用于添加命名参数。仅AddParameter
string
的{{1}}超载用于[Switch]
个参数。
对于您的第三个问题,我认为它$RunspacePool.Open()
会为您提供输出。
在尝试确定这些内容时,查找没有左手赋值的行,尤其是方法调用行;所以你不是要分配给变量的东西,因为这些值通常是如何将这些值放入输出流中的。