Powershellでfilterする方法


    • 今日はPoweshellでfilterする方法を教えるよ
    • Powershellでのフィルタリングね。具体的にどんなことができるの?
    • Powershellでは種類のオブジェクトをフィルタリングするために使用できる、強力なフィルタリング機能があるんだ。
    • 例えばファイル、フォルダーの一覧から特定の拡張子に一致するオブジェクトを抜き出すことができるよ
    • Powershellの配列から絞り込みができるってことね...

以下は、PowerShellWhere-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から項目名でさらに絞り込む


  1. さっきの例ではファイルサイズが100バイトより大きいすべてのファイルが表示したね。
    • でも本当はファイルの名前だけ欲しかったんだけどなぁ...
    • だったら出力された結果をさらに-Nameで絞り込もうよ
    • 実際にはSelect-Objectを使用すると項目名で絞り込みができるんだよ
    • これをパイプラインフィルタリングと呼ぶよ

パイプラインフィルタリングを使用して、フィルタリング条件を直接パイプラインに追加することもできます。以下は、パイプラインフィルタリングの例です。

Get-ChildItem | Where-Object { $_.Extension -eq ".txt" } | Select-Object Name

上記の例では、.txt拡張子を持つファイル名のみを表示することができます。Select-Objectコマンドレットを使用して、出力に表示されるプロパティを指定しています。

まとめ

今回は以下の3つの内容を学んだよ。

もし使用しているPCがWindowsなら実際にコマンドを打ってみるとより学びが深くなります。