前回に続いて、PowerShellをシェルとして使うためのポイントを解説。今回は、PowerShellの使い方として最も多い、情報表示について紹介する。
PowerShell上での基本の情報表示
たとえば、ファイル一覧のような情報表示は、シェルでの代表的な作業だが、その結果に対して、加工や変換をすることでデータとしての利用も可能になる。まずは、基本の情報表示である。
PowerShellには、システムの状態や設定値などを出力するコマンドがある。ここでは仮に「情報出力」コマンドと呼ぶことにしよう。その多くは、「Get-」で始まる。たとえば、カレントディレクトリのファイルの一覧は、Get-ChildItemというコマンドで取得できる。ただ、従来のユーザーには想像しがたいコマンドなので、エイリアスとしてdirとlsが定義してある。
コンソールを使うことが多いユーザーは、コマンドを実行すると大量の出力が出て、ざーっとスクロールしてしまうという経験があるだろう。情報の取得は、ある意味、多量の情報から必要なものを抜き出す作業でもある。PowerShellでは、こうした場合「Where-Object」コマンドを使う。
●Where-Object
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/where-object?view=powershell-7.6
このコマンドは、情報出力コマンドが出力するオブジェクトをフィルタリングするためのコマンドだ。PowerShellではパイプライン記号「|」を使ってコマンドをつなげ、情報出力コマンドの出力であるオブジェクトの配列を次のコマンドに入力し、次々と適用させていける。これを使うと、以下のようになる。
情報出力コマンド | Where-Object プロパティ名 比較演算子 値
フィルタリングする条件が1つのプロパティの場合は上記の記法が利用できる。たとえば、現在のフォルダにある「t」で始まるファイルを表示させるには、
Get-ChildItem | Where-Object name -like 't*'
とする。各コマンドは、インターネット検索するとMicrosoftの解説ページが高い確率で先頭付近に来る。
もし、複数のプロパティがフィルタリングの条件であれば、Where-Objectをスクリプトブロック形式で使う。たとえば、カレントディレクトリにある、tで始まるディレクトリでリードオンリー属性が設定されているものを探すには、
Get-ChildItem | Where-Object { $_.Name -like "t*" -and $_.Attributes.HasFlag([System.IO.FileAttributes]::ReadOnly) -and $_.PSisContainer }
とする。途中の「 $_.Attributes.HasFlag([System.IO.FileAttributes]::ReadOnly)」は、Attributesが、ビットフィールドとなっているため、[System.IO.FileAttributes]列挙値のReadOnlyに相当するビットがあるかどうか(HasFlag)を調べるためのもの(実際には簡易な方法があるのでご心配なく)。Where-Objectの後の{ と }で囲まれた部分がスクリプトブロックで、この中の結果が真($true)ならば、Where-Objectは該当のオブジェクトを通過させる。
なお、Get-ChildItemコマンドは、ファイルの一覧表示を想定しているため、「-name t*」でtから始まるファイル名を、「-Directory」オプションでディレクトリのみを出力させることができる。「-Attributes Readonly」とすることでリードオンリーファイルを指定できる。ただし、Get-ChildItemのオプション指定は、AND条件しか設定できない点に注意されたい。
情報出力コマンドの出力数を抑えるもう1つの方法は、Select-Objectを使い、先頭、末尾から個数を指定して出力を行わせるもの。
●Select-Object
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/select-object?view=powershell-7.6
どのような出力が出ているのかを概観したい場合などに有効で、後述する加工コマンドであるSort-Objectを使うと、必要そうな部分を取り出すこともできる。たとえば、先頭の2つを取り出すには、
Get-ChildItem | Select-Object -First 2
とする。「-Last」を使えば、末尾から指定した数のオブジェクトを出力できる。
本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
-
第537回
PC
PowerShellをシェルとして使うためのポイントを解説 -
第536回
PC
Microsoft製のコンソールエディタMS-Editが2.0になり、文法ハイライト機能が搭載 -
第535回
PC
WSLコンテナーのプレビューを試す 今年はWSLに動きがありそうだ -
第534回
PC
Windows 11におけるアプリインストーラーとwinget -
第533回
PC
PCの世界ではすっかり存在感が薄くなった光学メディアをあらためて整理 -
第532回
PC
モニターの情報が含まれる「VESA EDID」をWindowsで調べる方法 -
第531回
PC
Windowsのコンソール上でUnix/Linuxの標準的なコマンドを動かす「Windows CoreUtils」 -
第530回
PC
Windows 11でタスクバーの位置の移動機能が復活するのは結局どうなった? プレビュー版の現状を見る -
第529回
PC
Windowsの標準スクリプト言語であるPowerShellの現状をあらためて紹介する -
第528回
PC
Windows 11の標準機能でメモリに問題がないかを診断する - この連載の一覧へ












