- 今日はPoweshellでfilterする方法を教えるよ
- Powershellでのフィルタリングね。具体的にどんなことができるの?
- Powershellでは種類のオブジェクトをフィルタリングするために使用できる、強力なフィルタリング機能があるんだ。
- 例えばファイル、フォルダーの一覧から特定の拡張子に一致するオブジェクトを抜き出すことができるよ
- Powershellの配列から絞り込みができるってことね...
以下は、PowerShellのWhere-Object
コマンドレットを使用してフィルタリングを行う一般的な方法です。
where-object
コマンドレットの使用
- 今回は
Where-Object
という関数を使っていくよ - この関数を使って、特定の条件に一致するオブジェクトのみを選択することができるんだ。
Where-Object
を使ったサンプルコードは以下の通りだよ。
- 今回は
- Get-ChildItemコマンドレットを使用して現在のディレクトリのすべてのアイテムを表示しているわね...
- その出力をWhere-Objectコマンドレットでフィルタリングすると。
- この例では、ファイル名が.txtで終わるすべてのアイテムを選択しているのね。
Get-ChildItem | Where-Object { $_.Name -like "*.txt" }
- サンプル実行結果
ディレクトリ: C:\Users\81701\myworking\1000note\techblog\powershell Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2023/02/24 11:27 0 test.txt
短縮系であるwhere
を使用することも可能
- ちなみに、
Where-Object
をさらに短くしたWhere
というコマンドも同じ関数だよ。 Where
コマンドはWhere-Object
のエイリアスを意味するよ。
- ちなみに、
- エイリアス... ファイルのショートカットやリンクという意味ね。
Where
を実行すると、自然とWhere-Object
が裏で動くという意味ね
Whereコマンドレットは、Where-Objectコマンドレットのエイリアスであり、同じ機能を提供します。以下は、Whereコマンドレットの例です。
Get-ChildItem | Where { $_.Length -gt 100 }
上記の例では、ファイルサイズが100バイトより大きいすべてのファイルが表示されます。
- サンプル実行結果
ディレクトリ: C:\Users\81701\myworking\1000note Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2023/01/05 16:21 career d----- 2022/12/01 9:45 meta d----- 2022/11/30 15:30 pm d----- 2023/01/23 17:43 psy d----- 2023/02/15 15:47 techblog d----- 2022/12/26 13:54 vocabulary
where-object
から項目名でさらに絞り込む
- さっきの例ではファイルサイズが100バイトより大きいすべてのファイルが表示したね。
- でも本当はファイルの名前だけ欲しかったんだけどなぁ...
- だったら出力された結果をさらに
-Name
で絞り込もうよ - 実際には
Select-Object
を使用すると項目名で絞り込みができるんだよ - これをパイプラインフィルタリングと呼ぶよ
- だったら出力された結果をさらに
パイプラインフィルタリングを使用して、フィルタリング条件を直接パイプラインに追加することもできます。以下は、パイプラインフィルタリングの例です。
Get-ChildItem | Where-Object { $_.Extension -eq ".txt" } | Select-Object Name
上記の例では、.txt拡張子を持つファイル名のみを表示することができます。Select-Objectコマンドレットを使用して、出力に表示されるプロパティを指定しています。
まとめ
今回は以下の3つの内容を学んだよ。
もし使用しているPCがWindowsなら実際にコマンドを打ってみるとより学びが深くなります。