データの選択
コマンドの実行は強力な場合があり、ローカル コンピューターから、またはネットワークを介してデータを取得することができます。 さらに効果を上げるには、必要なデータを取得する方法を学ぶ必要があります。 ほとんどのコマンドは、入力、出力、またはその両方という方法でオブジェクトを操作します。 オブジェクトにはプロパティがあり、それらのプロパティのサブセットにアクセスして、レポートに表示することができます。 さらに、1 つまたは複数のプロパティに基づいてデータを並べ替えることもできます。 ただし、それを実行するにはどうすればよいでしょうか。
Get-Member を使用して出力を検査する
コマンドの結果を Get-Member に渡すと、Get-Member からオブジェクトに関する、次のような情報が返されます。
- Get-Member に渡されるオブジェクトの種類。
- 評価することができるオブジェクトのプロパティ。
- 実行することがでるオブジェクトのメソッド。
コマンド Get-Member に対して Get-Process を実行して、このことを示してみましょう。
Get-Process | Get-Member
パイプ | をどのように使用しているか、また Get-Member を呼び出すことで、実際には既にパイプラインを作成していることに注意してください。 前のステートメントからの出力の最初の数行は、次のようなものです。
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
Handles AliasProperty Handles = Handlecount
Name AliasProperty Name = ProcessName
NPM AliasProperty NPM = NonpagedSystemMemorySize64
PM AliasProperty PM = PagedMemorySize64
SI AliasProperty SI = SessionId
VM AliasProperty VM = VirtualMemorySize64
WS AliasProperty WS = WorkingSet64
...
出力には、Get-Process コマンドから返されるオブジェクトの種類 (System.Diagnostics.Process) が示されます。 応答の残りの部分には、オブジェクトのメンバーの名前、型、および定義が表示されます。
Get-Process をパイプライン内の別のコマンドに適合させたい場合は、Get-Member と組み合わせるのが最初のステップとして適しています。
セレクトオブジェクト
既定では、画面に出力されるコマンドを実行すると、PowerShell によって自動的にコマンド Out-Default が追加されます。 出力データがオブジェクトのコレクションである場合には、PowerShell によってオブジェクトの種類が確認され、そのオブジェクトの種類に登録されたビューがあるかどうかが判断されます。 見つかった場合は、そのビューが使用されます。
通常、画面に適切に表示されないので、ビューにはオブジェクトのすべてのプロパティが含まれていません。そのため、最も一般的なプロパティの一部のみがビューに含まれています。
Select-Object を使用して独自のプロパティ一覧を選択することで、既定のビューをオーバーライドすることができます。 これで、それらのプロパティを Format-Table または Format-List に送信し、好きなようにテーブルを表示できるようになります。
プロセス Get-Process に対して zsh を実行した結果を考えてみましょう。
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 0.01 0.38 644 620 zsh
0 0.00 0.01 0.38 727 727 zsh
0 0.00 0.01 0.38 731 731 zsh
0 0.00 0.01 0.38 743 743 zsh
0 0.00 0.01 0.38 750 750 zsh
0 0.00 0.88 0.91 15747 …47 zsh
0 0.00 0.01 0.29 41983 …83 zsh
0 0.00 1.16 0.31 68298 …98 zsh
表示されるビューは、このコマンドから最も表示させたいビューになります。 ただし、このビューには情報の完全なセットは表示されません。 別のプロパティを表示するには、結果に表示するプロパティを明示的に指定します。
完全な応答の取得
ここまで見てきたのは、限られた応答です。 完全な応答を表示するには、次のようにワイルドカード * を使用します。
Get-Process zsh | Format-List -Property *
* 文字は、すべての属性とその値を示し、これによって関心のある値を調べることができます。 完全な応答では、実際のプロパティ名の代わりにプロパティのプレゼンテーション名も使用され、レポートではプレゼンテーション名の方が見た目に優れています。
これらの利点にもかかわらず、データの完全な出力は必要ないかもしれませんが、デフォルトの応答に満足していない場合もあります。
特定の列の選択
応答を制限し、既定の応答と完全な応答の間の中間点を見つけるには、関心のあるプロパティをいくつか選択し、それを Select-Object へのパラメーター入力として使用します。 ただし、ここで問題になるのが、列の実際の名前を使用する必要があるということです。 実際の名前を調べるにはどうすればよいでしょうか。
Get-Member を使用してください。
Get-Member を呼び出すと、すべてのプロパティとその実際の名前がわかります。
実際のプロパティ名の検索
このサブセットを使用して、既定の応答について簡単におさらいしましょう。
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 0.01 0.38 644 620 zsh
既定の応答から、プロパティ Id と ProcessName は同じ名前である可能性が高いのですが、CPU(s) はプレゼンテーション名であり、実際のプロパティ名は、スペースなしのテキスト文字のみで構成される傾向があります。 特定のプロパティの実際の名前を確認するには、Get-Member を使用します。
Get-Process zsh | Get-Member -Name C*
これで、C で始まる名前を持つすべてのメンバーのリストが表示されます。 その中には CPU があり、おそらくこれが望まれているものです。
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
CancelErrorRead Method void CancelErrorRead()
CancelOutputRead Method void CancelOutputRead()
Close Method void Close()
CloseMainWindow Method bool CloseMainWindow()
Container Property System.ComponentModel.IContainer Container {get;}
CommandLine ScriptProperty System.Object CommandLine {get=…
Company ScriptProperty System.Object Company {get=$this.Mainmodule.FileVersionInfo.CompanyName;}
CPU ScriptProperty System.Object CPU {get=$this.TotalProcessorTime.TotalSeconds;}
次のように、Select-Object を使用して、適切なプロパティ名で必要な情報を正確に確認する方法を理解しました。
Get-Process zsh | Select-Object -Property Id, Name, CPU
次のとおりです。
Id Name CPU
-- ---- ---
644 zsh 0.3812141
727 zsh 0.3826498
731 zsh 0.3784953
743 zsh 0.3776352
750 zsh 0.3824036
15747 zsh 0.9097993
41983 zsh 0.2934763
68298 zsh 0.3121695
このコマンド シーケンスでは、既定の出力とは異なるものの、関心のあるプロパティが含まれている出力が得られます。
並べ替え
パイプラインで Sort-Object を使用する場合、PowerShell は最初に既定のプロパティを使用して出力データを並べ替えます。 そのようなプロパティが存在しない場合には、オブジェクト自体の比較が試行されます。 並べ替えは、昇順または降順で行われます。
プロパティを指定することで、次のように特定の列での並べ替えを選択することができます。
Get-Process | Sort-Object -Descending -Property Name
前のコマンドでは、Name 列を降順に並べ替えています。 複数の列で並べ替える場合には、次のように列名をコンマで区切ります。
Get-Process | Sort-Object -Descending -Property Name, CPU
列名での並べ替えに加えて、独自のカスタム式を指定することもできます。 この例では、カスタム式を使用して列 Name および CPU で並べ替え、各列の並べ替え順序を制御します。
Get-Process 'some process' | Sort-Object -Property @{Expression = "Name"; Descending = $True}, @{Expression = "CPU"; Descending = $False}
前の例は、Sort-Object がどれほど強力で柔軟になり得るかを示しています。 このテーマはやや高度であり、このモジュールの範囲からは外れますが、より高度なモジュールで改めて説明します。