[PowerShell] 帰ってきたOut-GridView

PowerShell Core

しばたです。

先週PowerShell Team Blogで以下の記事が公開されました。

本記事では少し補足を入れつつこちらの内容を解説していきます。

Out-GridView

Out-GridVeiwとは

Out-GridViewはPowerShell 3.0から導入されたコマンドレットで、パイプラインで渡されたオブジェクトを表形式の別ウィンドウに表示する機能を持っています。
例えば、

Get-Process | Out-GridView

といったコマンドを実行するとGet-Processの実行結果であるプロセス情報(System.Diagnostics.Process型のオブジェクト)を表の形で表示できます。

ちなみにこのウィンドウはWindows Presentation Foundation(WPF)製です。

PowerShell CoreでのOut-GridView

本記事のタイトルでわざわざ「帰ってきた」と付けている様にPowerShell CoreではこのOut-GridViewはサポートされていません。
これはPowerShell Coreの基盤となる.NET Coreが現在もWindows FormsやWPFといったGUIフレームワークをサポートしておらず *1Out-GridViewShow-CommandGet-Help-ShowWindowパラメーターといったGUIウィンドウを表示するコマンドレットや機能は全て削除されています。

こういった現状があり、Windows PowerShellで使われていたGUIの機能をどの様に移植していくかに関しては長い間GitHub上で議論されていたのですが、目下のところGUIに係る機能を別モジュールで追加可能にする形を選んだ様です。

議論の詳細については上記リンクを参照してください。

帰ってきたOut-GridView

ここまでの前提を踏まえて、新しいMicrosoft.PowerShell.GraphicalToolsモジュールの機能としてOut-GridViewがリリースされました。
こちらはGUIフレームワークにAvalonia *2を採用し、Windows、macOS、Linux(GTK3)の各プラットフォームで動作します。

(上図は https://devblogs.microsoft.com/powershell/out-gridview-returns/ より引用)

動作環境

動作環境としてはWindows、macOS、Linux(GTK3)のPowerShell Core 6.2以降となります。

インストール方法

PowerShell Galleryよりインストール可能です。

Install-Module Microsoft.PowerShell.GraphicalTools

帰ってきたOut-GridView

現在このMicrosoft.PowerShell.GraphicalToolsモジュールで提供される機能はOut-GridViewただ一つです。

基本的にはこれまでのOut-GridViewと同様の機能を持っていますが、Filterと列の選択UIが若干異なります。

独自機能として画面右に「Show Code」ボタンがあり、こちらをクリックすると現在Filterに指定されている条件をPowerShellコード化してくれます。

今後の見通し

一通りの機能を備えてはいますがバージョンとしては現時点でVer.0.2.0で作りが荒い部分がまだまだ多く見られ、また、モジュール内部で各プラットフォーム向けのアセンブリをすべて内包しているためサイズが展開後で約280MBとあまりも巨大な現状があり、こういった点は今後改善されていくでしょう。
そして機能的にはOut-GridViewだけでなくShow-CommandShow-Objectといったコマンドレットをサポートしていく予定となっています。

ただ、Microsoftの名を冠したモジュールではあるもののTUIによるOut-GridView実装に対する要望も根強く残っており、あくまで個人的な気持ちですが、このモジュールがすんなりコミュニティに受け入れられるか怪しいと思うところがあります。

そういった部分も合わせてこのモジュールが今後どの様に発展していくのか追いかけていきたいと思います。

脚注

  1. ちなみに来月リリース予定とされる.NET Core 3.0ではWindows FormsやWPFがサポートされる予定ですがWindows専用でありその他のプラットフォームでは利用できません(基本的に.NET Frameworkとの互換性維持のためだけのサポート)
  2. ちなみにAvaloniaの名称はWPFのコードネームが Avalon であったことに由来しています