特定条件のデータを取得する
先ほどのSelect-Objectコマンドレットは、列データを取得するイメージでした。今度は特定条件に合致するデータを行で取得するコマンドレット、Where-Objectについて説明します。
ローカルコンピュータ上のサービスを取得するコマンドレットとしてGet-Serviceがあります。まずはこのコマンドレットを実行してみましょう。
Get-Service
と入力してEnterキーを押してください。
稼働中のサービス、停止中のサービスを取得できます。
このとき「停止中のサービスだけを表示したい」となった場合はどうすればよいでしょう? こういう場合は、特定の条件に合致するデータを取得できるWhere-Objectコマンドレットを使用します。
get-service | Where-Object {$_.Status -eq "Stopped"}
と入力して、Enterキーを押してください。
停止中のサービスを取得できました。
Where-Objectコマンドレットでは条件式を{}で囲まれた部分に記述します(これをスクリプトブロックと呼びます)。また$_はパイプで渡されたオブジェクトが格納される特殊な変数です。この変数にドットを付けて$_.Statusのように記述すると、パイプで渡されたオブジェクトの「Statusプロパティ」を意味することとなります。-eqは比較演算子で「等しい」という意味です。
つまりWhere-Object {$_.Status -eq "Stopped"}は、パイプで渡されたオブジェクトのStatusプロパティが「Stopped」に等しいものだけを返します。
グルーピング
同じプロパティの値を持つオブジェクトでグルーピングをするコマンドレットとして、Group-Objectがあります。
例えば、指定したディレクトリにあるファイル群を拡張子別にグルーピングするには、
Get-ChildItem *.* | Group-Object Extension
と入力してEnterキーを押します。
拡張子別にデータがグルーピングされ、グループごとのファイル数や拡張子、グループ化されたファイル名が表示されています。
まとめ
今回は、
- コマンドレットの実行結果はオブジェクトであること
- パイプ
- Sort-Object
- Select-Object
- Where-Object
- Group-Object
について見てきました。Windows PowerShellが強力であることを少しでも実感していただけたでしょうか?
次回は、お約束通りスクリプトについて説明したいと思います。



