PowerShellでGUIの表形式でデータを表示したり、データを選択させる方法
本エントリーの目次
PowerShellを使って、GUIの表形式でデータを表示したい!
CUI(CLI)操作を基本とするPowerShellでは、『Format-Table』コマンドレットを使うことで、データをCUIの表形式で表示することが可能です。
たとえばIPアドレスの設定状態を取得する『Get-NetIPAddress』コマンドレットは、初期設定状態ではリスト形式で結果を取得します。
参考:Windows パソコンのIPアドレスをマウス操作やPowerShellで確認する方法
そして『Format-Table』コマンドレットを併用した『Get-NetIPAddress | Format-Table』という形式のコマンドを実行したケースでは、PowerShellの実行画面上にCUIの表形式でデータの一覧が表示されます。
ですがCUIの表形式ではなく、より見やすく分かりやすいGUIの表形式でデータの一覧を表示したい!とお考えの方も、いらっしゃることでしょう。
実は最近のバージョンのPowerShellであれば、GUIの表形式でデータの一覧を表示する機能が搭載されています。※
しかもGUI形式で見やすく分かりやすいだけではなく、絞り込みや並べ替え機能、さらには選択したデータを取得する機能まで持っている高機能なGUIの表です!
そこで今回は、PowerShellを使ってGUIの表形式でデータを表示する方法や絞り込み、並べ替えを行う方法。
またGUIの表で選択したデータを取得する方法をご紹介します!
※以前のバージョンのPowerShellでは、ご紹介している機能(コマンドレット)が使用できない場合があります。
PowerShellを使って、GUIの表形式でデータを表示する方法
PowerShellを使って、GUIの表形式でデータを表示する方法を説明するにあたり、今回は以下の3つのファイルが保存されている『C:\sample』フォルダーに対して実行した『Get-ChildItem』コマンドレットの結果を使用しています。
- test-1.txt
- test-2.txt
- test-3.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | PS C:\> Get-ChildItem -Path "C:\sample" ディレクトリ: C:\sample Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2020/04/27 10:07 0 test-1.txt -a---- 2020/04/27 10:07 0 test-2.txt -a---- 2020/04/27 10:07 0 test-3.txt PS C:\> |
GUIの表形式でデータを表示したい場合には、表示対象のデータと『Out-GridView』コマンドレットを併用したコマンドを実行します。
たとえば、『C:\sample』フォルダーに対して実行した『Get-ChildItem』コマンドレットの結果(表示対象のデータ)を、GUIの表形式で表示する場合には、以下のようなコマンドを実行してください。
1 | Get-ChildItem -Path "C:\sample" | Out-GridView |
また『Out-GridView』には『ogv』というエイリアスが割り当たっているため、以下のようなコマンドを実行しても、同様の結果を取得できます。
1 | Get-ChildItem -Path "C:\sample" | ogv |
上記コマンドを実行すると、PowerShellコマンドを実行したウィンドウとは別のウィンドウが起動。
そして『Get-ChildItem』コマンドレットの結果が、以下のようなGUIの表形式で表示されます。
GUIの表形式ウィンドウでデータを絞り込み・抽出(フィルター)する方法
冒頭にも書いたとおり、GUIの表形式でデータの一覧を表示すると、データを特定の条件で絞り込み、抽出(フィルター)することが可能です。
『Out-GridView』コマンドレットを使って表示したウィンドウでデータの抽出を行う場合、『条件の追加』機能を使用する方法と、『フィルター』機能を使用する方法が利用できます。
『条件の追加』機能を使用する方法
『Out-GridView』コマンドレットの結果ウィンドウの上部に、『条件の追加』というボタンがあります。
このボタンをクリックすると、以下のように対象の列を指定する画面が表示されるので、絞り込み条件に使用する列にチェックを入れてから、『追加』ボタンをクリックしてください。
たとえば『Name』に『1』という文字が含まれているデータを抽出したいケースでは、絞り込み条件に使用する列として『Name』を指定して『追加』ボタンをクリック。
そして表示された条件指定ボックスに『1』という文字を入力します。
以上の操作によりデータが絞り込まれ、以下のように『Name』に『1』を含む『test-1.txt』のデータのみが表示された状態となります。
データの抽出処理は、条件指定ボックスで条件を変更する度にリアルタイムで実行されます。
この例では、条件指定部で『が次の文字を含む』を選択していますが、他に『が次の値を含まない』や『が次の文字で始まる』、『が空ではない』などの条件も指定可能です。
そのため、抽出したいデータの内容に合わせて条件指定部を選択すると良いでしょう。
『フィルター』機能を使用する方法
先ほど紹介した『条件の追加』ボタンの上部に、『フィルター』条件指定ボックスがあります。
この入力ボックスに、フィルター文字列を入力することで、データを絞り込んで抽出することも可能です。
たとえば『1.txt』というフィルター文字列を条件指定ボックスに入力すると、以下のように『test-1.txt』のデータのみが表示された状態となります。
『フィルター』機能を使用する方法でも、データの抽出処理は条件指定ボックスで条件を変更する度にリアルタイムで実行されます。
GUIの表形式ウィンドウでデータをソート(並べ替え)する方法
『Out-GridView』コマンドレットの結果ウィンドウの表示内容は、ソート(並べ替え)することも可能です。
操作方法はとても簡単で、ソートを行いたい列のヘッダー部をクリックするだけでOK!
したがって『Length』列の内容を昇順ソートしたいときは、『Length』列のヘッダー部をクリックしてください。
また、すでに昇順ソートされている列のヘッダー部を再度クリックすることで、以下のように降順ソートが実行されます。
(昇順ソートされていれば▲、降順ソートされていれば▼文字が、ヘッダー文字列の上部に表示されています。)
GUIの表形式ウィンドウで、列の表示状態や表示順序を変更する方法
『Out-GridView』コマンドレットの結果ウィンドウの表示内容のうち、一部の列のデータを非表示にしたり再表示することが可能です。
これは、任意の列のヘッダー部で右クリックを行い、コンテキストメニューを表示。
そして表示された『列の選択』メニューをクリックすることで表示できる『列の選択』画面で設定を行います。
初期設定状態の『列の選択』画面では、表示中の列が『選択した列』に設定されています。
そこで非表示にしたい列については、『利用可能な列』に設定してから、『OK』ボタンをクリックすることで、表示状態を変更できます。
また『列の選択』画面では、一番左に表示される列はどれか、左から二番目に表示される列はどれか、といった列の表示順序を変更することもできます。
列の表示順序は、『列の選択』画面中の『上へ移動』、『下へ移動』ボタンの操作により行います。
あらかじめ抽出やソート、表示する列を指定して、GUIの表形式ウィンドウに表示する方法
ここまで、『Out-GridView』コマンドレットの結果ウィンドウを表示してから、抽出や並べ替え、表示する列の設定を行う方法を紹介してきました。
ですがあらかじめ抽出やソート、表示する列を指定して、GUIの表形式ウィンドウに表示することも、もちろん可能です。
こういったケースでは、『何らかの処理を行ったデータ | Out-GridView』という形式のコマンドを実行してください。
たとえば、『Name』で降順ソートした結果をGUIの表形式ウィンドウに表示したい場合には、以下コマンドを実行します。
1 | Get-ChildItem -Path "C:\sample" | Sort-Object -Property Name -Descending | Out-GridView |
また『Name』に『1』を含むデータを絞り込んで抽出する場合には、以下コマンドを実行してください。
1 | Get-ChildItem -Path "C:\sample" | Where-Object {$_.Name -like "*1*"} | Out-GridView |
『Get-ChildItem』コマンドレットは、初期設定状態では『Mode』、『LastWriteTime』、『Length』、『Name』を取得します。
ですが『Name』、『Length』という表示順番で2列の結果だけを取得したい場合には、以下のコマンドを実行します。
1 | Get-ChildItem -Path "C:\sample" | Select-Object -Property Name,Length | Out-GridView |
PowerShellコマンドレットの中には、『Get-ChildItem』コマンドレットのように初期設定状態では取得可能な列のうち、一部の列の結果だけを取得するものも存在します。
こういったコマンドレットを実行した際、すべての列の結果を取得したいときは、以下のように『Select-Object -Property *』コマンドを併用すると良いでしょう。
1 | Get-ChildItem -Path "C:\sample" | Select-Object -Property * | Out-GridView |
GUIの表形式ウィンドウのキャプション(タイトル)を設定する方法
『Out-GridView』コマンドレットの結果ウィンドウのキャプション部は、特に指定しない場合には実行したコマンド文字列が表示されます。
『Get-ChildItem -Path “C:\sample” | Out-GridView』を実行した場合には、この文字列が表示されるということです。
ですがこのキャプション部の表示内容は、『-Title』パラメーターを指定することで変更可能です。
そのため、たとえばキャプション部の表示内容を『テスト』に変更したいときは、以下のようなコマンドを実行してください。
1 | Get-ChildItem -Path "C:\sample" | Out-GridView -Title "テスト" |
PowerShellを使って、GUIの表で選択したデータを取得する方法
『Out-GridView』コマンドレットには、結果ウィンドウでユーザーにデータを選択させ、その結果を取得する。
という使い方も用意されています。
一つのデータをユーザーに選択させる方法
『Get-ChildItem -Path “C:\sample”』コマンドレットを実行し、その結果の中から一つのデータをユーザーに選択させるケースでは、以下コマンドを実行します。
1 | Get-ChildItem -Path "C:\sample" | Out-GridView -OutputMode Single |
このコマンドを実行すると、以下のように結果ウィンドウの右下に『OK』ボタンと『キャンセル』ボタンが表示されるようになります。
そして『OK』ボタンをクリックすることで、選択中のデータが取得できる、というわけです。
選択したデータを『$SelectedItem』変数に格納したい場合には、以下のようなコマンドを実行すればOK!
1 | $SelectedItem = Get-ChildItem -Path "C:\sample" | Out-GridView -OutputMode Single |
結果ウィンドウで『test-2.txt』のデータを選択した状態で『OK』ボタンをクリックした場合には、以下のような結果を取得できます。
1 2 3 4 | PS C:\> $SelectedItem = Get-ChildItem -Path "C:\sample" | Out-GridView -OutputMode Single PS C:\> Write-Host $SelectedItem.FullName C:\sample\test-2.txt PS C:\> |
また結果ウィンドウで『キャンセル』ボタンや、画面右上の『✕』ボタンをクリックしてウィンドウを閉じた場合、『$SelectedItem』変数には『$null』が格納されています。
一つ、または複数のデータをユーザーに選択させる方法
『Get-ChildItem -Path “C:\sample”』コマンドレットを実行し、その結果の中から一つ、または複数のデータをユーザーに選択させるケースでは、『-OutputMode』パラメーターに『Single』ではなく『Multiple』を指定します。
1 2 3 4 5 | PS C:\> $SelectedItem = Get-ChildItem -Path "C:\sample" | Out-GridView -OutputMode Multiple PS C:\> $SelectedItem | foreach {Write-Host $_.FullName} C:\sample\test-1.txt C:\sample\test-3.txt PS C:\> |
また、Microsoft Docsにて以下のように記載されているとおり、『-PassThru』パラメーターが同様の意味を持っています。
-OutputMode
中略
Multiple. Zero, one, or many items.
Use this value when the next command can take multiple input objects.This value is equivalent to the Passthru parameter.
したがって『-OutputMode Multiple』の代わりに『-PassThru』パラメーターを使っていただいてもOKです。
1 | Get-ChildItem -Path "C:\sample" | Out-GridView -PassThru |
以上、参考になさってくださーい!