Jag*_*gan 5 c# powershell caching runspace
为什么以下方法没有接受 RunspaceConnectionInfo (用于指定远程服务器信息)和 InitialSessionState 的重载?
我正在构建一个 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。
要将管理单元添加到 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)