$PSVersionTable をダンプし、変数と環境変数「PS-Drives」をダンプする以外に、PowerShell 環境を比較するには他に何ができるでしょうか?

$PSVersionTable をダンプし、変数と環境変数「PS-Drives」をダンプする以外に、PowerShell 環境を比較するには他に何ができるでしょうか?

$PSVersionTableダンプを調べて変数と env「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 に設定されています。

違いはマイナーバージョン。しかし、最初のサーバーは、PSClass の展開、2番目はそうではありません。

そして、デバッガーで の 2 番目の呼び出しまでトレースしましたがAttach-PSScriptMethod、デバッガー内かどうかに関係なく、2 番目のサーバーはその呼び出しでハングします。


アップデート:最初のサーバーを 2 番目のサーバーと同じマイナー バージョン (および同じ CLRVersion) であるビルド 6.3.30319.34209 に更新する変更が行われました。これで例も壊れます。Microsoft が PSClass ライブラリを壊したようです。

ここで使用されている OO モデルに依存するスクリプトが多すぎないことを願います。単純な例が壊れると、より重いコードも壊れる可能性があるからです。

まだ排出すらできない問題それは

答え1

Powershellバージョン4.0以降では$PSVersionTableを使用できます。バージョン4.0未満の場合は、Get-Host

インストールされているPowershellのバージョンを確認する

関連情報