[PowerShell] 再度帰ってきた?Out-GridView

2020.04.21

しばたです。

以前PowerShell CoreにクロスプラットフォームなGUIライブラリであるAvaloniaを使ったOut-GridViewコマンドレットが復活した話をしました。

ただ、先日リリースされたPowerShell 7ではWindows PowerShellとの互換性を重視し、基盤となる.NET Core 3.1の互換機能により提供されるWPFを使った従来のOut-GridViewコマンドレットが復活する形となり、Avaloniaを使ったOut-GridViewコマンドレットは事実上のお蔵入りとなっています。

本記事ではOut-GridViewのその後について解説します。

Microsoft.PowerShell.ConsoleGuiTools の登場

PowerShell 7がリリースされて間もなくPowerShell Teamから以下のブログ記事が公開されました。

この記事では、PowerShell 7ではWindows PowerShellとの互換のためにWPFを使ったOut-GridViewコマンドレットを復活させたが、クロスプラットフォーム対応のために新たにMicrosoft.PowerShell.ConsoleGuiToolsというモジュールをリリースしたと発表されています。

Microsoft.PowerShell.ConsoleGuiTools

Avalonia実装のMicrosoft.PowerShell.GraphicalToolsと名前が似てて紛らわしいのですがMicrosoft.PowerShell.ConsoleGuiToolsです。別物です。
(ただしソースは GraphicalTools のリポジトリで一緒に管理されています)

本記事では以後 GraphicalToolsConsoleGuiTools で表記します。

ConsoleGuiToolsはgui.cs を内部で使いTUIのコマンドレットを提供します。
既存のコマンドレットと名前が衝突するのでOut-GridViewの代わりにOut-ConsoleGridViewという名前のコマンドレットが提供されます。

動作環境

動作環境はWindows、macOS、LinuxのPowerShell Core 6.2以降となります。
TUIのツールですのでGraphicalToolsの様に依存するウィンドウマネージャはありません。

また、モジュールのリリース当初はWindowsで動作しない不具合が合った様ですが今は解消されています。

インストール方法

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

Install-Module Microsoft.PowerShell.ConsoleGuiTools

試してみた

今回はPowerShell 7.0.0 on Windowsな環境で試してみます。
GraphicalToolsの時と同様にプロセス情報をグリッド表示してみるとこの様な感じになります。

Get-Process | Out-ConsoleGridView 

キー入力でFilterを適用したり、
(↓キーで移動、Apply欄でEnter)

特定のプロセスを選択することも出来ます。

グリッドを終了する際はF9キーを押します。

また、-PassThruパラメーターを付けて実行した場合

Get-Process | Out-ConsoleGridView -PassThru

グリッドにチェックボックスが増え、戻り値に選ぶプロセスをチェックすることが出来ます。

チェックを付けた状態でグリッドを終了すると選んだプロセス情報だけを返却してくれます。

なかなか良い感じです。

私個人としてはGraphicalToolsよりこちらの方が好みですのでOut-GridView以外のコマンドレットもじゃんじゃん移植してくれたらうれしいですね。

余談 : gui.cs について

ConsoleGuiToolsについては以上となります。

最後に余談としてgui.csについて軽く触れておきます。
gui.csはMiguel de Icazaさんによる.NET(.NET Core/Mono)のコンソールアプリケーション向けのクロスプラットフォームなUIツールキットです。

Miguelさんと言えばGNOMEの人でありMonoの人でありXamarinの人でもあるのでご存知の方も多いかと思います。gui.csも元々はMonoのMonoCursesというライブラリを発展させたものとなっています。

gui.csの概要に関しては以下をご覧ください。

gui.csはPowerShellに限らず.NETなコンソールアプリケーション開発に使えますので興味のある方は試してみてはいかがでしょうか。