4

为什么以下方法没有接受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 脚本。(无耻的插头:这行得通吗?)

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

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加载管理单元的地方。但是从提供的一组方法来看,似乎 InitialSessionState 只能在创建本地 RunspacePools 时指定。

4

1 回答 1

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)
于 2014-10-09T11:03:58.167 回答