2

当我使用 PS 3.0+ 时,我的远程运行空间工作正常,但是一旦我使用 PS 2.0 运行我的代码,SessionStateProxy属性为空(但仅当我尝试创建远程运行空间时。

powershell -version 2

$Uri = New-Object System.Uri("http://WIN-10NL6N4THGJ:5985/wsman")
$connectionInfo = New-Object System.Management.Automation.Runspaces.WSManConnectionInfo($Uri)
$runspace = [runspacefactory]::CreateRunspace($connectionInfo)

$runspace.Open()

$runspace |select *

$runspace.SessionStateProxy

SessionStateProxy属性应该是System.Management.Automation.RemoteSessionStateProxy但它是$null。有什么线索吗?

4

1 回答 1

2

SessionStateProxy不适用于 PowerShell 2.0 中的远程运行空间。我没有任何文件 atm。备份它,但您可以自己验证它。

本地运行空间:

$r.SessionStateProxy.GetType().FullName
System.Management.Automation.Runspaces.SessionStateProxy

远程运行空间(PS 4.0):

$runspace.SessionStateProxy.GetType().Fullname
System.Management.Automation.RemoteSessionStateProxy

如果您使用 dotPeek 之类的东西来查看System.Management.Automation.dll v.1.0.0 (file Version 6.1.7600.16385)PowerShell 2.0 中的代码,那么您会找到SessionStateProxy用于本地运行空间的类,但RemoteSessionStateProxy缺少该类。如果您查看System.Management.Automation.dllv.3.0.0 内部,您还会发现RemoteSessionStateProxy内部类。

解决方案:升级 PowerShell (WMF 3.0 - 5.0)

于 2016-06-07T08:40:12.447 回答