Windows PowerShell ISEでPowerShell Coreを利用する

2019.12.28

しばたです。

PowerShell関連のツールなどを販売しているIronman Software社(人によってはMVPのAdam Driscollさんの会社といった方が通りが良いかもしれません)のブログで面白い内容の記事が公開されていますのでその内容を紹介し実際に試してみました。

Windows PowerShell ISEの現状について

本題に触れる前に軽くWindows PowerShell ISEの現状について触れておきます。
PowerShell ISEはPowerShell 2.0の登場と同時に生まれた統合開発環境でPowerShell 5.1までのPowerShellと同時に利用可能となっています。
PowerShell 5.1は新機能が導入されることは無く事実上の開発停止状態でありPowerShell ISEも同様の扱いとなっています。
このため公式にはPowerShell ISEは現在最新のバージョンであるPowerShell Core 6.xや来年リリース予定のPowerShell 7には対応しておらずその予定もありません。
加えて最近のInsider Previewバージョンではオプション機能になるなど、ツールとしては確実に終息に向かっています。

ツールとしてはVisual Studio Code + PowerShell拡張の組み合わせが事実上の後継となっており、こちらであればWindows PowerShellおよび最新のPowerShell Coreにも対応しています。

Windows PowerShell ISEでPowerShell Coreを利用する

とはいえ、現時点でOSに標準でインストール済みで気軽に利用できるPowerShell ISEは一部ではまだまだ根強い人気があります。
私自身もメインの開発環境はVisual Studio Codeに移行済みですが、サーバー上でちょっとしたスクリプトをメンテナンスする際はまだまだPowerShell ISEのお世話になることは多いです。

前提条件

Windows 10環境にPowerShell Core 6.xかPowerShell 7 preview版をインストール済みであること。
仕組み的にWindows 10以外のOSでも大丈夫な気がしますが元記事でも触れられておらず、こちらは極力新しいバージョンの方が良いかと思います。

まずはこれから

元のブログ記事ではアーキテクチャの違いに触れながら実現方法を順に解説していますが、本記事では逆にまずはココからという手順で紹介していきます。

まずはPowerShell ISEを起動し、以下のGistの内容をコピペして実行してください。

すると「アドオン」メニューに「Switch to PowerShell 6」が増えるのでこのメニューを選択するとPowerShell Coreを実行環境にすることができます。

メニューを選択するとこの様に実行環境がPowerShell 6.2.3(私の環境の場合)に変わっています。

これだけです。
設定を永続化したい場合は上記Gistの内容をISEのプロファイルに記述しておけばよいでしょう。

仕組みの解説

仕組みは元の記事に詳しく書いていますのでここではざっくりどの様なことをしているか軽く解説するに留めておきます。
このGistではPowerShell Coreのプロセス(pwsh.exe)を新たに起動し名前付きパイプによる接続を経由し新しいRunSpaceを作成し自身のホストに割り当てるといったことをしています。
実装方法は異なるのですが、以前個人ブログで紹介したWindowsCOmpatiblityモジュールと近いことをしている感じです。

最後に

ざっとこんな感じです。
PowerShell ISEをお使いの方の役に立てば幸いです。