web-dev-qa-db-ja.com

PowerShellで配列のすべてのオブジェクトの1つのプロパティの値を選択します

オブジェクト$ objectsの配列があるとしましょう。これらのオブジェクトに「名前」プロパティがあるとします。

これは私がやりたいことです

 $results = @()
 $objects | %{ $results += $_.Name }

これは機能しますが、より良い方法で実行できますか?

私が次のようなことをした場合:

 $results = objects | select Name

$resultsは、Nameプロパティを持つオブジェクトの配列です。 $ resultsに名前の配列が含まれるようにします。

もっと良い方法はありますか?

102
Sylvain Reverdy

Select-ObjectExpandPropertyパラメーターを使用できる可能性があると思います。

たとえば、現在のディレクトリのリストを取得し、単にNameプロパティを表示するには、次のようにします。

ls | select -Property Name

これは、まだDirectoryInfoまたはFileInfoオブジェクトを返しています。 Get-Member (別名gm)にパイプすることで、パイプラインを介して入力される型をいつでも検査できます。

ls | select -Property Name | gm

したがって、expandオブジェクトを、探しているプロパティのタイプのオブジェクトにするために、次のことができます。

ls | select -ExpandProperty Name

あなたの場合、変数を文字列の配列にするために以下を行うことができます。文字列はNameプロパティです:

$objects = ls | select -ExpandProperty Name
178
Scott Saad

さらに簡単な解決策として、次のものを使用できます。

$results = $objects.Name

$resultsの要素のすべての「Name」プロパティ値の配列で$objectsを埋める必要があります。

57
rageandqq