除了查看转储 $PSVersionTable 和转储变量和环境“PS-Drives”之外,我还能做些什么来比较 PowerShell 环境?

除了查看转储 $PSVersionTable 和转储变量和环境“PS-Drives”之外,我还能做些什么来比较 PowerShell 环境?

除了查看转储$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

确定已安装的 Powershell 版本

相关内容