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 オブジェクト。
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
. のみを選択します Name
、 Status
、 と DependentServices
プロパティは次のとおりです。
$testServices = Get-Service | Select-Object -Property Name,Status,DependentServices -First 20
複数のプロパティを同時に選択できるプロパティ スイッチとは対照的に、PowerShell のプロパティの展開スイッチは一度に 1 つのプロパティしか展開できません。
変数名を実行し、 $testServices
、その内容の構造を表示します。
下のスクリーンショットのように、候補に挙げたサービスのプロパティを示す表が表示されます。
PowerShell Expand プロパティを使用してコレクション プロパティを展開する
PowerShell オブジェクトには、コレクション プロパティとも呼ばれる、オブジェクトのコレクションであるプロパティを含めることができます。 このセクションでは、PowerShell Expand Property を使用してコレクション プロパティを展開し、そのメンバーのプロパティを表示する方法を学習します。
実行します Select-Object
コマンドレット $testServices
変数を展開し、 DependentServices
各サービスのプロパティ。
$testServices | Select-Object -ExpandProperty 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
依存サービスを選択する Name
、 Status
、 と Depends On
プロパティ。
$depServ | Select-Object -Property Name,Status,"Depends On"
どのサービスが次のサービスに依存しているかを確認できるようになりました $testServices
、以下に示すように。
Format-List と PowerShell の Expand プロパティを組み合わせて詳細を表示する
PowerShell は、特に表形式の出力で、表示するオブジェクト プロパティを制限する場合があります。 -ExpandProperty
スイッチ出力でも同じことが発生する可能性があります。 回避策として、代わりに展開されたプロパティをリストに表示できます。
実行します Get-Process
すべてを取得する以下のコマンドレット modules
の explorer
プロセスが使用します。 オンにします -ExpandProperty
モジュールのプロパティを表示するように切り替えます。
Get-Process explorer | select-object -ExpandProperty Modules
画面上の出力は、次のスクリーンショットのようになります。3 つのプロパティのみが表示されるように自動的に切り捨てられます。
オブジェクトを Format-List
コマンドレットを使用して、モジュール オブジェクトのすべての値をより管理しやすいリストに表示します。
Get-Process explorer | select-object -ExpandProperty Modules | Format-List
以下に示すように、出力にはすべてのプロパティとその値が一覧表示されます。 データをさらにファイルに保存するか、別のコマンドレットに渡してさらに処理することができます。
結論
ここまでの作業に成功したことで、Select-Object コマンドレットの PowerShell Expand Property スイッチ (-ExpandProperty) を活用する方法がわかったはずです。 PowerShell には、多くの一般的なタスクに役立つコマンドレットが多数含まれています。 PowerShell Cat を使用してファイルをすばやく表示する方法を学習することで、新しい知識を増やすことができます。
The post Select-Object の PowerShell Expand プロパティを使用する方法 appeared first on Gamingsym Japan.