2020年11月15日(米国時間)、次のメジャーアップデートへ向けたプレビュー版となる「PowerShell 7.2 Preview 2」が公開された。このプレビュー版は.NET 5がベースとなっている。次のバージョンは.NET 6の使用が予定されているが、まだ公開を待っている状態だ。.NET 6の開発具合に合わせて、PowerShell 7.2プレビュー版も.NET 6への移行が予定されている。

PowerShell 7.2プレビュー2ではいくつかのバグが修正されているほか、パフォーマンスの向上、コードのクリーンナップ、-PipelineVariable共通パラメータの扱い変更、新機能の追加などが行われている。修正されたバグの中には、PowerShell 7.1で発生していたリパースポイントに関するバグの修正が含まれている。

WindowsではシンボリックリンクファイルやOneDriveファイル、Microsoftがインストールしたアプリケーションなどが「リパースポイント機能」と呼ばれるファイルシステムの機能を使用している。PowerShell 7.1でこのリパースポイントの使用に対してバグが発生しており、NTFS以外のドライブで実行ファイルを使おうとすると「Incorrect Function」エラーが発生するようになっていた。たとえばUSBメモリやネットワーク共有などでもこの問題が発生していた。今回のプレビュー版でこの問題が解消されている。

-PipelineVariable共通パラメーターが、最初の入力オブジェクトだけではなく、パイプラインから渡されるすべてのオブジェクトが正しく含まれるようにも変更されている。これでC#で開発されたコマンドレットと同じ処理をスクリプトで開発されたコマンドレットでも使用できるようになった。ただし、この挙動はこれまでの挙動とは異なるため、互換性については注意が必要だ。

$PSStyle自動変数を導入

PowerShell 7.2プレビュー2には「$PSStyle」という自動変数が新しく導入された。この自動変数はPowerShell 7.1には存在しないものだ。

PowerShell 7.1に$PSStyle自動変数はない

$PSStyle自動変数はPSAnsiRenderingと呼ばれる実験的機能の1つで、ターミナル文字の色、太字、斜体などを制御するANSIエスケープシーケンスを簡単に扱えるようにするものだ。PowerShell 7.2プレビュー2で$PSStyleをチェックすると、次のように自動変数として存在していることがわかる。

PowerShell 7.2プレビュー2には$PSStyle自動変数が導入されている

PowerShell 7.2プレビュー2の$PSStyleの内容をそのままダンプすると次のようになる。

$PSStyleの内容をそのままダンプした例

$PSStyleにはFormatting、Foreground、Backgroundというネストされたタイプが用意されており、これらを組み合わせて使用できるようになっている。加算することで次のように同時に使えるようになっている。

$PSStyleとネストタイプの使用サンプル

上記スクリーンショットはWindows Terminalで$PSStyleを使った例だ。Windows Terminal側の対応とうまく噛み合っていないのか、表示がちょっとおかしいが、エスケープシーケンスによる色やスタイルの変更が機能していることがわかる。

Windows Terminalはまだ開発途上にある。PowerShell 7.2が正式リリースされるまでにはこの辺りも対処されるはずだ。エスケープシーケンスはターミナルで装飾を行う代表的な方法である。PowerShellからエスケープシーケンスの扱いが簡単になることで、より人間が認識しやすいかたちに出力を加工できるようになるはずだ。

PowerShell 7.2も漸進的な改善バージョンかも

PowerShell 7.1にはそれまで実験的だった機能が正式な機能として取り込まれた。だが、全体として見ると細かい修正や改善が進められたバージョンとなっている。PowerShell 7.2の開発状況を見てみると、こちらも言語として大きな変更が取り込まれるとは考えにくく、このまま進んで漸進的なリリースになっていく可能性が高いのではないかと思われる。

しかしそれは別に悪いことではない。このところ細かいバグ修正や改善が続いており、そのうちのいくつかは使い勝手を大きく改善するものだ。ちょっとした変化なのだが、その変化が使う側としてはありがたい。PowerShell 7系はしばらく細かい改善が進んでいくバージョンになるかもしれない。