PowerShellはデータ管理の強力なツールですが、通常は一度にあまりにも多くの情報を提供します。あまりにも多くの情報は圧倒され、解析するのが難しいことをご存知のように。しかし心配はいりません。PowerShell Select-Object
コマンドレットが役立ちます。
このチュートリアルでは、Select-Object
コマンドレットの基礎を学び、さまざまな方法で結果を絞り込む方法を学びます。
読んで、痛みのないデータ管理を開始しましょう!
前提条件
このチュートリアルには実演が含まれています。一緒に進むためには、PowerShellがインストールされたシステムをお持ちであることを確認してください。このチュートリアルでは、PowerShell 7を使用してWindows 10を使用していますが、どのモダンなバージョンでも動作するはずです。
PowerShell Select-Objectコマンドレットとは何ですか?
Select-Object
コマンドレットは、オブジェクトやデータセットから特定のプロパティを選択したり、プロパティの名前を変更したり、既存のプロパティに基づいて計算されたプロパティを作成したりすることで、データ管理を簡素化します。
基本的な Select-Object
の構文は次のとおりです:
Parameter | Function |
---|---|
-InputObject |
Specifies the object or data set you want to work with, which can be an object, an array of objects, or an output of another cmdlet. |
Property |
Specifies the property or properties to select from the InputObject parameter. You can specify multiple properties separated by commas. |
Optional Parameters |
Allows you to refine your selection, such as selecting a certain number of objects or skipping objects. |
プロパティによるオブジェクトの選択
Select-Object
コマンドレットについて学びたいという欲求を満たすためには、短い紹介以上のものが必要です。なぜなら、 Select-Object
コマンドレットの一般的な使用例から始めるのはどうでしょうか? このチュートリアルを開始するには、 Select-Object
コマンドレットを使用してオブジェクトから特定のプロパティを選択します。
コンピューター上で実行されているプロセスのリストがあるとしましょうが、各プロセスの名前だけを表示したい場合。 Select-Object
コマンドレットに Name
プロパティを指定すると、うまくいきます。
PowerShell を開き、以下の Get-Process
コマンドを実行して、全プロセスのリストを取得し、Name
によってのみ (Select-Object
) 印刷します。

実行中のプロセス以外にも、
Select-Object
コマンドレットを使用して CSV ファイルで作業することができます。多くの列を持つ CSV ファイルがあると仮定し、そのうちのいくつかだけが必要な場合、Select-Object
コマンドレットによって関連する列のみを選択してデータを操作および分析できます。
次のコマンドを実行して、複数のプロパティ(Select-Object
)を選択します:Name
とCPU
(カンマで区切られます)。この機能は、各オブジェクトの一部のプロパティのみが必要な大規模なデータセットで作業する場合に役立ちます。
さらに、このコマンドではオブジェクトのリストをSort-Object
を使用してCPU
プロパティを参照にして-Descending
の順でソートします。
以下に、Google Chrome(インストールされている場合)から始まる、最もリソースを消費するプロセスのリストが表示されます。

計算プロパティの作成
ニーズに合ったプロパティを探す際には、計算プロパティの作成を検討してください。なぜなら、計算プロパティを使用すると、データを操作して変換したり、既存のプロパティを組み合わせたり、数学的な操作を行ったり、データを特定の方法でフォーマットしたりできるからです。
計算プロパティを作成するには、新しいプロパティ名と、プロパティの値を計算する方法を定義する式を指定する必要があります:
以下のコマンドを実行して、次の操作を行います:
- 実行中のプロセスのリスト(
Get-Process
)を取得し、Name
とCPU
のプロパティのみを選択します(Select-Object
)。 - 新しい計算されたプロパティを作成してください。そのプロパティの名前は
Name
Memory (MB)
であり、各プロセスのメモリ使用量をメガバイト単位で計算します。メモリ使用量は、WorkingSet
プロパティを1MB
で割るExpression
を使用して計算されます。 - 計算された
Memory (MB)
プロパティによって取得された実行中のプロセスを-Descending
の順ですべて表示します。

指定されたプロパティを除外する
Select-Object
コマンドの結果には、ユーザ名やパスワードなどの機密情報が含まれる可能性があります。このリスクを回避する方法は?
出力に機密データを表示しないようにするには、-ExcludeProperty
パラメータを追加して特定のプロパティを出力から除外します。
次のコマンドを実行して、以下のタスクを実行します:
C:\\
ディレクトリの中で再帰的に(-Recurse
)Get-ChildItem
を使用して、すべてのファイルとフォルダーのリストを取得します。
- パイプ出力を
Select-Object
コマンドレットにパイプして、Name
、Length
、LastWriteTime
プロパティを選択します。 - 出力から
FullName
プロパティを除外(-ExcludeProperty
)します。これにより、出力に完全なパスが表示されず、機密情報が含まれないようになります。

オブジェクトの最初または最後の数をスキップ
大規模なデータセットで作業する場合、必要なデータを見つけることは石炭鉱山でダイヤモンドを探すようなものです。しかし、関連のないデータをふるいにかける時間を無駄にする必要はありません。
PowerShellでは、Select-Object
コマンドレットには、出力から最初の(-Skip
)および最後の(-SkipLast
)オブジェクトの数をそれぞれ除外する2つのパラメータが用意されています。
出力から複数のオブジェクトをスキップする方法を確認するには:
以下のコマンドを実行して、すべての実行中プロセス(Get-Process
)を取得しますが、最初の100
オブジェクトを-Skip
します。
スキップされるオブジェクトの数は、この場合は整数値(小数点なしの正の整数)に基づいていますが、
100
です。

次に、以下のコマンドを実行して、作業ディレクトリの内容(Get-ChildItem
)のリストを取得しますが、最後の100
オブジェクトをスキップします(-SkipLast
)

オブジェクトの最初または最後の数を選択
最初と最後のオブジェクトの数をスキップするだけでなく、最初と最後のオブジェクトを選択することにも興味があるかもしれません。Select-Object
コマンドレットは、First
およびLast
パラメータを使用して、他のすべてをスキップして時間とリソースを節約できます。

以下のコマンドを実行してすべてのプロセスを取得し、ただし、返されるオブジェクトの-First 10
を選択します。

次に、以下のコマンドを実行して作業ディレクトリのすべてのコンテンツ(Get-ChildItem
)を取得し、ただし、返されるオブジェクトの-Last 10
を選択します。
排他的にユニークなオブジェクトを選択する
大きなデータセットで作業する際、典型的には出力から除外したい重複した値に遭遇することがあります。ただし、Select-Object
コマンドレットの良い点は、重複した値を手動で除外する必要がないことです。
-Unique
パラメータを追加すると、出力から一意のオブジェクトのみを選択でき、分析を合理化し、結果の正確性を向上させることができます。
以下のコマンドを実行して、-First 2
のオブジェクトを選択し、返します。

最後に、次のコマンドを実行して、-First 2
のオブジェクトごとに唯一の-Unique
値のみを返します。
このとき、他方は重複した値だけが含まれているため、最初の2つのオブジェクトからは1つしか返されません。ご理解いただけるように、この出力は-Unique
パラメータがデータ内の重複したオブジェクトを素早く破棄するのに便利であることを示しています。

結論
PowerShellは情報の過多を生み出す傾向があります。しかし、このチュートリアルでは、PowerShellのSelect-Object
コマンドレットがデータを整理し、必要な情報のみを表示するのにどれほど役立つかを学びました。
異なるパラメータが出力からデータを選択および除外する方法を見てきました。特にSelect-Object
コマンドレットを使用すると、大量のデータを管理することは困難ではありません。
この時点で、結果を分析およびトラブルシューティングに適した形に素早く調整できます。ただし、なぜ次に進んで計算されたプロパティをフォーマットする方法を学ばないのでしょうか?
Source:
https://adamtheautomator.com/powershell-select-object/