つい先日2019年3月28日にPowerShellの最新版であるPowerShell 6.2がリリースされました。
Microsoftのブログ記事によると6.2の主な変更点はパフォーマンス向上、バグフィックス等軽微なものに留まるようですが、その中でいくつかの実験的な新機能について見ていきます。
General Availability of PowerShell Core 6.2
https://devblogs.microsoft.com/powershell/general-availability-of-powershell-core-6-2/
まず、実験的な新機能は以下のコマンドで確認することが出来ます。
Get-ExperimentalFeature
PowerShell 6.2では以下の4つの実験的な機能があることが確認できます。
※ 既定ではすべて無効になっています。
・Command Not Found Suggestion
・Implicit Remoting Batching
・Temp Drive
・Abbreviation Expansion
これらの機能は、[
Enable-ExperimentalFeature -Name <機能の名前>]を実行することにより有効に出来、
[
Disable-ExperimentalFeature -Name <機能の名前>]を実行することで無効に出来ます。

有効化・無効化のいずれの場合も次回起動時から有効になります。
では一つずつ、どのような機能か見ていきます。
■ Command Not Found Suggestion
タイプミス等によるコマンドレットの間違いがあった場合に間違えた可能性のあるコマンドレットを提案する機能で、簡単に言えばGoogle検索で出てくる「もしかして:」と同じです。
「Get-Process」を実行しようとして「Get-Proces」と打ってしまった場合の挙動を確認してみます。
・Command Not Found Suggestionが無効の場合

「コマンドレット、関数、スクリプト、プログラムとして認識できません」というエラーが出るだけです。
・Command Not Found Suggestionが有効の場合
入力ミスしたコマンドに対して、「Get-Process」「Wait-Process」「Get-Job」「Debug-Process」「Get-Item」「Get-PSDrive」の6つのコマンドを似たコマンドとして表示していることが確認出来ます。
明らかに遠すぎるものもありますが、あいまい検索はこんなものなのかも。
■ Implicit Remoting Batching
パイプラインによる処理が実行される際、内部的にはコマンド1つ毎にオブジェクトのシリアライズ・デシリアライズが行われていたものが、パイプライン全体を分析し全体でシリアライズ・デシリアライズを行うようになる機能です。
あまりピンと来ない書き方になってしまいましたが、わかりやすく言えばパイプライン処理を効率化し、パフォーマンスを向上させる機能です。
先ほど紹介したMicrosoftのPowerShellブログによると[Get-Process | Sort-Object]に10~15秒かかっていたケースが、機能の有効化により20~30ミリ秒まで高速化を実現できたと書かれています。
これについては、機能による効果を実感できるようなテスト方法を模索中です。
■ Temp Drive
この機能を有効化することにより、一時フォルダがマッピングされた「Temp:」というPSDriveが利用出来るようになります。
LinuxやMacなどのOS毎に一時フォルダを表す環境変数が異なりますが、同一の記述でOS毎に適した一時フォルダにアクセス出来るこの機能は、クロスプラットフォーム化された6.xならではの機能と言えそうです。

Windowsの場合は環境変数「TEMP」がマッピングされるようです。
■ Abbreviation Expansion
PowerShellのコマンドレットは原則「Verb-Noun(動詞-名詞)」という形式のため非常にわかりやすい一方で、コマンド自体が長くなる欠点があります。
この機能を有効にすることにより、コマンドレットの大文字部分(単語のイニシャル)のみを入力し、コマンドをTab補完出来るようになります。
例:機能を有効化した状態で[g-ci]と入力し、Tabキーを押すと「Get-ChildItem」「Get-CimInstance」「Get-ComputerInfo」を補完します。
この機能はあくまでシェル上の入力補助機能でありエイリアスとは異なるため、[g-ci]コマンドを実行してもGet-ChildItem等のコマンドは実行されませんし、スクリプト内で使うことも出来ません。
さて、追加された実験的な機能を使ってみての感想は、
どれも地味!
テスト出来なかった「Implicit Remoting Batching」については、どのようなケースで恩恵があるのかまだハッキリとわからないのでもう少し調査の必要がありますね。
実行前にわかると画期的なのですが。
Abbreviation Expansionは地味に便利かもしれません。