除了查看转储$PSVersionTable
和转储变量和环境“PS-Drives”之外,我还能做些什么来比较 PowerShell 环境?
问题如下:
- 我有非常相似的机器,运行 Microsoft Windows Server 2012
$PSVersionTable
转储为:Name Value ---- ----- PSVersion 4.0 WSManStackVersion 3.0 SerializationVersion 1.1.0.1 CLRVersion 4.0.30319.34014 BuildVersion 6.3.9600.17090 PSCompatibleVersions {1.0, 2.0, 3.0, 4.0} PSRemotingProtocolVersion 2.2
在正常运行的服务器上,
Name Value ---- ----- PSVersion 4.0 WSManStackVersion 3.0 SerializationVersion 1.1.0.1 CLRVersion 4.0.30319.34209 BuildVersion 6.3.9600.16406 PSCompatibleVersions {1.0, 2.0, 3.0, 4.0} PSRemotingProtocolVersion 2.2
在我遇到问题的服务器上。
- 在基础驱动方面,没有什么区别
variable:
。 env:
内容的合理差异- 并且它们都将 ExecutionPolicy 设置为 RemoteSigned。
因此,差异在于次要的版本。但第一个服务器将运行随附的 Animal 类示例PSClass 部署PSClass deploy,而第二个则不会。
我在调试器中将其追踪到第二次调用Attach-PSScriptMethod
,无论是否在调试器中,第二台服务器都只是挂在该调用上。
更新:刚刚更改了将我的第一台服务器更新为 Build 6.3.30319.34209,与第二台服务器的次要版本相同(CLRVersion 也相同)。现在示例也崩溃了。看来微软破坏了 PSClass 库。
我希望不要有太多的脚本依赖于那里使用的 OO 模型,因为如果它们破坏了简单的例子,那么它们也可能会破坏更重的代码。
我甚至无法让它倒出问题它有
答案1
从 Powershell 4.0 及以上版本开始,您可以使用 $PSVersionTable。任何低于 4.0 的版本,您都需要使用Get-Host