为什么没有办法为远程RunspacePool传递InitialSessionState?

时间:2014-10-09 10:08:34

标签: c# powershell caching runspace

为什么以下方法没有接受RunspaceConnectionInfo(指定远程服务器信息)以及InitialSessionState的重载?

http://msdn.microsoft.com/en-us/library/system.management.automation.runspaces.runspacefactory.createrunspacepool(v=vs.85).aspx

完整上下文:

我正在构建一个RunspacePoolCache,它将缓存使用RunspaceFactory创建的远程RunspacePools。缓存是在远程服务器信息上键入的。直到池的RunspacePoolStateInfo.State为Open,相同的RunspacePool将用于在同一远程服务器上执行Powershell脚本。 (无耻插头:这会起作用吗?)

现在,我想添加一组Powershell管理单元,这些管理单元对于创建的RunspacePool是通用的。在执行的脚本中添加管理单元有时会导致以下异常:

An item with the same key has already been added

即使我在Powershell脚本中执行以下操作(但不常见),也会发生这种情况:

if ((Get-PSSnapin | ? { $_.Name -eq 'VeeamPSSnapIn' }) -eq $null) {
    Add-PsSnapin -Name VeeamPSSnapIn -ErrorAction SilentlyContinue
}

这是我尝试通过InitialSessionState加载管理单元的地方。但是从提供的方法集中,似乎只能在创建本地RunspacePools时指定InitialSessionState。

1 个答案:

答案 0 :(得分:0)

要向ISS添加管理单元,请使用ImportPSSnapIn方法。例如:

$iss = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault()
s.ImportPSSnapIn($snapName,[ref]'') | Out-Null

您可以像这样创建运行空间池:

$runspacePool =    [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspacePool($minRunspaces, $maxRunspaces, $iss, $Host)