例えば開発機のPowerShellのバージョンが 4とか5とかで、本番機が大人の事情でバージョン2とか3だった場合用のTips。
まずはただ実行するだけの場合、以下のようにSide by sideで実行出来る。
>$PSVersionTable
Name Value
---- -----
PSVersion 5.0.10586.12
PSCompatibleVersions {1.0, 2.0, 3
BuildVersion 10.0.10586.1
CLRVersion 4.0.30319.42
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
>powershell -v 2
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.
>$PSVersionTable
Name Value
---- -----
CLRVersion 2.0.50727.8670
BuildVersion 6.1.7600.16385
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
PSVersionの値が5.0.10586.12から2.0になっているのがわかる。
-vオプションの後は任意の値を指定することで異なるバージョンでの起動が可能だ。
ところが、これをこのままPowerShell ISEのコンソール上で実行しても期待通りの動きにはならなかった。
>powershell -v 2
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.
この状態でPowerShell ISE側はスクリプトを実行した状態で応答を待っている状態に移行してしまう。
これ以降は何も応答が無い。
実行さえできればいいのだが、デバッグなどを行いたい場合はそうもいかない。
上手いこと無いかと考えたら、シンプルに以下の方法で実行が出来た。
>powershell.exe -v 2 -c .¥script.ps1
-cオプションを使用し、実行したいスクリプトファイルを指定する。
そうする事でPowerShel ISEのコンソール上でスクリプトの実行結果が返ってくる。
もちろん、ステップ実行や変数の参照なども可能だった。
以上