Powershell 解析オブジェクト / 文字列

Powershell 解析オブジェクト / 文字列

PowerShell を学習して、この結果セットから最初の値を解析する方法を見つけようとしています:

IPAddresses
-----------
{10.60.50.40, fe80::5ddf:a8f4:e29c:b66}

通常は調べるだけですが、{x, x} がPowershell現地での標準的なデータ型であるかどうかはわかりません。

大まかな文字列解析を行う必要がありますか、それとも次のような最初の文字列を抽出するための標準コマンドがありますか。

... | Select-Object IPAddresses | Select-String [0]

(選択文字列の部分は私が作ったものです。わかりません。)

答え1

これまでのところ、次のものがあります:

... Select-Object IPAddresses | ForEach {$_.IPAddresses}[0]

最初のものを返します。

答え2

次のように試してください:

$myResultSet | foreach { $_.IPAddresses[0] }

答え3

試す

$myResultSet | Select-Object -First 1 IPAddress

結果セットは、何らかのタイプのコレクションです。コマンドレットは、そのコレクションの最初の項目を取得し、表示されるプロパティSelect-Objectのみにフィルター処理します。IPAddress

私のマシンでは、上記のコマンドの出力は次のようになります。返されるアドレスが異なるため、あなたのマシンでは異なる可能性があります。

IPAddress                                                                                                              
---------                                                                                                              
fe80::5581:4fbc:fc22:ec79%13                                                                                           

PowerShell はデフォルトで出力を通過させてFormat-Table見やすい表示にするため、テーブルが表示されます。

IP アドレス自体だけにアクセスするには、式を少し変更します。

$myResultSet.IPAddress|Select-Object -First 1

または、ドット表記とコレクションへのインデックスを使用すると、Select-Object次のように完全に使用することを避けることができます。

$myResultSet[0].IPAddress

上記は、コレクションIPAddressの最初の項目のプロパティを直接参照しており$myResultSet、インデックスは0であるため、$myResultSet[0]

どちらの場合も、次のように IP アドレスそのものが返されます。

fe80::5581:4fbc:fc22:ec79%13

答え4

まず、タイプが何であるかを推測する必要はありませんIPAddresses。次のように簡単に取得できます。

$myResultSet[0].IPAddresses.GetType()

おそらくそれは何らかのコレクション (配列)Select-Object、パラメータとともに使用できますExpandProperty:

$myResultSet | Select-Object -ExpandProperty 'IPAddresses' | Select-Object -First 1

または、プロパティ参照解除演算子および\またはインデックスとしてクリップルズマーフ提案された

関連情報