もっと詳しく

PowerShell の Select-Object コマンドレットを使用すると、オブジェクトの入力グループからオブジェクトとプロパティをシームレスに選び出すことができます。 しかし、もっと知らなければならないこともあります。 の 拡張プロパティ 特定のプロパティに関する詳細を展開する Select-Object のスイッチです。

PowerShell の Expand プロパティ (-ExpandProperty) このサンプル主導のチュートリアルでは、スイッチを切り替えます。

前提条件

このチュートリアルは実践的なデモンストレーションです。 先に進みたい場合、必要なのは PowerShell 5.1 以降を搭載した Windows マシンだけです。 この記事では、PowerShell 5.1 を搭載した Windows 10 マシンを使用します。

PowerShell Expand プロパティを使用したプロパティ オブジェクト値の抽出

Windows マシンにログインし、PowerShell ターミナルを起動します。 このセクションでは、 Select-Object コマンドレットとその ExpandProperty スイッチ。

1. Get-Service コマンドレットを実行して、システム上のすべてのサービスの一覧を取得します。 次に示すように、出力を Select-Object コマンドレットにパイプして、各サービス オブジェクトの name プロパティのみを選択して表示します。

Get-Service | Select-Object -Property Name

以下の切り捨てられたショットのように、システム上のサービスの名前のリストを表すオブジェクトの単一の列が表示されるはずです。

2. 前のパイプラインの末尾で Get-Member コマンドレットを実行して、select-object が返すオブジェクトのタイプを以下のように確認します。 オブジェクトの型を知ることは、パイプラインを拡張する関数またはコマンドレットを作成するのに役立ちます。

Get-Service | Select-Object -Property Name | Get-Member

以下のスクリーンショットを参照すると、 -Property スイッチは文字列のリストのように見えるものを出力しますが、それらは選択されたリストの System.ServiceProcess.ServiceController オブジェクト。

Get-Member を使用して ServiceController オブジェクトの型を表示する
Get-Member を使用して ServiceController オブジェクトの型を表示する

3. Get-Members コマンドレットを mkdir に置き換えて、各サービスのフォルダーを自動的に作成します。 -first 5 スイッチは、返されるオブジェクトの数を制限します。 次に、mkdir 関数は、パイプライン内のオブジェクトに基づいて 5 つのフォルダーのみを作成します。

Get-Service | Select-Object -Property Name -First 5 | mkdir

以下のスクリーンショットのような出力が表示され、試行が成功したことが示されます。

システムにサービス用のフォルダーを作成する
システムにサービス用のフォルダーを作成する

4. 以下のスニペットのように、mkdir を rmdir に置き換えてフォルダーを削除します。 -Verbose スイッチをオンにして、端末に詳細出力を表示します。

Get-Service | Select-Object -Property Name -First 5 | rmdir -Verbose

rmdir コマンドレットは文字列を想定しているため、文字列を処理できません。 ハッシュ表 ServiceController オブジェクトの表現。 下のスクリーンショットのように、いくつかのエラーで失敗するはずです。

一部のコマンドレットがハッシュテーブルではなく文字列値を想定していることを示す
一部のコマンドレットがハッシュテーブルではなく文字列値を想定していることを示す

5. 次のスニペットのように、-Property スイッチを -ExpandProperty スイッチに変更します。 そうすることで、必要なのが文字列だけである場合に、プロパティの値を文字列として取得できます。

Get-Service | Select-Object -ExpandProperty Name -First 5 | rmdir -Verbose

rmdir と組み合わせると、以下のスクリーンショットのように、フォルダーを自動的に削除する試みがエラーなしで成功することがわかります。

展開されたサービスにちなんで名付けられたフォルダーの削除
展開されたサービスにちなんで名付けられたフォルダーの削除

特定のプロパティを持つ選択したオブジェクトのセットを作成する

セクション内のコード スニペットを短縮するには、次のように、マシンで最初の 20 サービスの変数を作成します。

実行します Get-Service コマンド、最初の 20 経由のオブジェクト Select-Object コマンドレットを作成し、オブジェクトを名前付きの変数に保存します $testServices. のみを選択します NameStatus、 と DependentServices プロパティは次のとおりです。

$testServices = Get-Service | Select-Object -Property Name,Status,DependentServices -First 20

複数のプロパティを同時に選択できるプロパティ スイッチとは対照的に、PowerShell のプロパティの展開スイッチは一度に 1 つのプロパティしか展開できません。

変数名を実行し、 $testServices、その内容の構造を表示します。

下のスクリーンショットのように、候補に挙げたサービスのプロパティを示す表が表示されます。

$testServices の内容を表示する
$testServices の内容を表示する

PowerShell Expand プロパティを使用してコレクション プロパティを展開する

PowerShell オブジェクトには、コレクション プロパティとも呼ばれる、オブジェクトのコレクションであるプロパティを含めることができます。 このセクションでは、PowerShell Expand Property を使用してコレクション プロパティを展開し、そのメンバーのプロパティを表示する方法を学習します。

実行します Select-Object コマンドレット $testServices 変数を展開し、 DependentServices 各サービスのプロパティ。

$testServices | Select-Object -ExpandProperty DependentServices

以来 DependentServices はコレクション プロパティです。出力は、以下に示すように、入力されたすべてのコレクション内のサービスのリストです。 展開されたものからの結果を連結するため、リストの重複に注意してください DependentServices.

DependentServices プロパティの展開
DependentServices プロパティの展開

カテゴリ化された出力のプロパティと PowerShell Expand プロパティの組み合わせ

これで、依存するサービスのリストができましたが、それらがどのサービスに依存しているかはどうすればわかりますか? このセクションでは、 -Property 展開されたプロパティを分類するように切り替えます。

以下のコマンドを実行して、 DependentServices プロパティ Name.

$testServices | Select-Object -ExpandProperty DependentServices -Property Name

依存サービスにはすでに Name 以下に示すように、分類ステップは失敗します。

以下のエラーは、サービスの最初のリスト ($testServices 内) に、展開された DependentServices プロパティの Name プロパティと競合する Name プロパティが既にあることを示しています。

展開されたプロパティを親オブジェクト名でグループ化しようとしています
展開されたプロパティを親オブジェクト名でグループ化しようとしています

1 つの回避策は、作成することです。 計算されたプロパティ 次のように識別子プロパティの名前を変更します。

$depServ という変数の識別子プロパティとして、Depends On という計算プロパティを指定するように変更した前のコマンド出力を保存します。 Depends on には、$testService 内のすべてのサービスの Name 値が含まれます。

物件名、 Depends onは、このチュートリアルで任意に選択されたものであり、任意の表現にすることができます。

$depServ = $testServices | Select-Object -ExpandProperty DependentServices -Property @{name="Depends On"; expr={$_.Name}}

オブジェクトを渡す $depServ 終えた Select-Object 依存サービスを選択する NameStatus、 と Depends On プロパティ。

$depServ | Select-Object -Property Name,Status,"Depends On"

どのサービスが次のサービスに依存しているかを確認できるようになりました $testServices、以下に示すように。

計算されたプロパティを使用して展開されたプロパティをグループ化する
計算されたプロパティを使用して展開されたプロパティをグループ化する

Format-List と PowerShell の Expand プロパティを組み合わせて詳細を表示する

PowerShell は、特に表形式の出力で、表示するオブジェクト プロパティを制限する場合があります。 -ExpandProperty スイッチ出力でも同じことが発生する可能性があります。 回避策として、代わりに展開されたプロパティをリストに表示できます。

実行します Get-Process すべてを取得する以下のコマンドレット modulesexplorer プロセスが使用します。 オンにします -ExpandProperty モジュールのプロパティを表示するように切り替えます。

Get-Process explorer | select-object -ExpandProperty Modules

画面上の出力は、次のスクリーンショットのようになります。3 つのプロパティのみが表示されるように自動的に切り捨てられます。

展開されたプロパティの切り捨てられた出力の表示
展開されたプロパティの切り捨てられた出力の表示

オブジェクトを Format-List コマンドレットを使用して、モジュール オブジェクトのすべての値をより管理しやすいリストに表示します。

Get-Process explorer | select-object -ExpandProperty Modules | Format-List

以下に示すように、出力にはすべてのプロパティとその値が一覧表示されます。 データをさらにファイルに保存するか、別のコマンドレットに渡してさらに処理することができます。

展開されたプロパティの出力を Format-List でリストに変換する
展開されたプロパティの出力を Format-List でリストに変換する

結論

ここまでの作業に成功したことで、Select-Object コマンドレットの PowerShell Expand Property スイッチ (-ExpandProperty) を活用する方法がわかったはずです。 PowerShell には、多くの一般的なタスクに役立つコマンドレットが多数含まれています。 PowerShell Cat を使用してファイルをすばやく表示する方法を学習することで、新しい知識を増やすことができます。

The post Select-Object の PowerShell Expand プロパティを使用する方法 appeared first on Gamingsym Japan.