为什么无法为远程 RunspacePool 传递 InitialSessionState?

Jag*_*gan 5 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 创建的远程 RunspacePool。缓存以远程服务器信息为关键。在池的 RunspacePoolStateInfo.State 处于打开状态之前,同一个 RunspacePool 将用于在同一远程服务器上执行 Powershell 脚本。(无耻插件:这行得通吗?)

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

An item with the same key has already been added
Run Code Online (Sandbox Code Playgroud)

即使我在 Powershell 脚本中执行以下操作(但频率较低),也会发生这种情况:

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

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

ojk*_*ojk 0

要将管理单元添加到 ISS,请使用 ImportPSSnapIn 方法。例子:

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

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

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