PowerShell CoreのExperimental Featureを試してみた

PowerShell Core

しばたです。
現在最新のプレビュー版であるPowerShell Core 6.2.0-preview.3から試験的な機能(Experimental Feature)を有効・無効化するためのコマンドレットが導入されました。

本記事ではこのコマンドレットを試してみます。

PowerShell Coreのインストール

PowerShell Coreのインストール手順は端折ります。
GitHubのリリースページから最新のプレビュー版をダウンロードしてインストールしてください。

Get-ExperimentalFeature

Get-ExperimentalFeatureコマンドレットで現在利用可能な試験的な機能を確認できます。

# 今回は結果を見やすくするために Format-List しておく
Get-ExperimentalFeature | Format-List

結果は上図の様になり、2019年1月13日現時点で利用可能な試験的な機能は

  • Batch implicit remoting proxy commands to improve performance

の1つだけとなります。

Batch implicit remoting proxy commands to improve performance

この機能はImplict Remotingにおけるコマンド実行で都度ローカル⇔リモート間の通信が発生してしまうのを改善し、リモート側で複数のコマンドが連続で実行される場合はまとめて実行することでパフォーマンスを改善するものになります。

詳細は機能のプルリクエストに記載されていますので気になる人はこちらをご覧ください。

この機能は検証が非常に難しく、また、目に見えて面白い結果にならなかったので、本記事では動作検証までは触れず機能の紹介だけに留めておきます。

今後予定される試験的な機能

現時点では導入が確定している試験的な機能はありません。
RFCで提案されているものから随時増えていくものと予想されます。

Enable-ExperimentalFeature

Enable-ExperimentalFeatureは試験的な機能を有効にするコマンドレットです。

-Nameパラメーターに有効にしたい機能名を指定します。
また、-Scopeパラメーターがあり、

  • CurrentUser : 現在のユーザーのみ対象 (既定)
  • AllUsers : すべてのユーザーが対象

と機能の適用範囲を指定できます。

Enable-ExperimentalFeature -Name PSImplicitRemotingBatching -Scope CurrentUser

実行結果は以下の様になりPowerShellコンソールを再起動すると有効にした機能が適用されます。

再起動後にあらためてGet-ExperimentalFeatureを実行するとEnabledプロパティがTrueに変わっていることが確認できます。

Disable-ExperimentalFeature

試験的な機能をやめたい場合はDisable-ExperimentalFeatureコマンドレットを使います。
Enable-ExperimentalFeatureと同様に-Name-Scopeパラメーターを指定します。

Disable-ExperimentalFeature -Name PSImplicitRemotingBatching -Scope CurrentUser

実行結果は以下の様になり、コンソールを再起動すると変更が反映されます。

設定の保存場所

Enable-ExperimentalFeatureDisable-ExperimentalFeatureで変更した設定はPowerShell Coreの設定ファイルであるpowershell.config.jsonに保存されます。
この設定ファイルは、全ユーザーの設定は$PSHOMEに、ユーザー毎の設定は[マイドキュメント]\PowerShell (Windowsの場合)~/.config/powershell/ (Linux/macOSの場合)に保存されます。

試験的な機能を有効にすると以下の様なエントリが設定ファイルに追記されます。

{"ExperimentalFeatures":["PSImplicitRemotingBatching"]}

最後に

ざっとこんな感じです。
まだ試すことのできる機能は少ないですが今後増えていくと思われますので面白そうな機能が出た際は実際に試していきたいです。