3

私がやろうとしていることは非常に単純です。いくつかのプロパティを持つカスタム オブジェクトを作成し、Select-Object で使用するプロパティ (列) の「グループ」を定義します。明確にさせてください:

$props = @{"Mary"=1;"Jane"=2;"Frank"=3;"John"=5;"Brenda"=6}
$obj = New-Object PSObject $props

偽のデータを含むカスタム オブジェクトができました。私が今できるようになりたいことは、

$obj | select Male
$obj | select Female

そして、私がトリックを行うと思っていたのは、次のようなものです:

$obj | Add-Member PropertySet "Male" @("Frank","John")
$obj | Add-Member PropertySet "Female" @("Mary","Jane","Brenda")

動作しません - 次のエラーが表示されます:

Add-Member : Cannot convert the "System.Object[]" value of type 
"System.Object[]" to type "System.Collections.ObjectModel.Collection`1[System.String]".

配列以外の別のオブジェクト型を に提供する必要があると思いますがAdd-Member、どのようにすればよいかわかりません。

誰もこれを経験していますか?

重要な注意: 私は Powershell 2 を使用していますが、既定のプロパティを設定できないバグがあることをさまざまなサイトで読みました。それは私がやりたいことではありません。デフォルトのプロパティ セットではなく、カスタム プロパティ セットを作成したいのですが、このバグによって、必要なものが得られない可能性もあります。

4

1 に答える 1

7

あなたはとても近くにいます。問題は、オブジェクトを正しく作成していないことです。-Propertyプロパティのハッシュテーブルを指定する前に、パラメーターを指定する必要があります。それがなければ、ハッシュテーブルを作成するだけです。これは機能します:

$props = @{"Mary"=1;"Jane"=2;"Frank"=3;"John"=5;"Brenda"=6}
$obj = New-Object -TypeName PSObject -Property $props

$obj | Add-Member PropertySet "Male" @("Frank","John")
$obj | Add-Member PropertySet "Female" @("Mary","Jane","Brenda")

$obj | select male

Frank John
----- ----
    3    5

なぜこれが起こったのですか?またはをNew-Object使用するための構文を読むと、通常の .Net 型の構文は次のようになります。Get-help new-objectGet-Command New-Object -Syntax

New-Object [-TypeName] <String> [[-ArgumentList] <Object[]>] [-Property <IDictionary>]

-ArgumentListこれは 2 番目のパラメーターであり、-Property期待したものではないことに注意してください。だからあなたのコードは実際にやった:

$obj = New-Object -TypeName PSObject -ArgumentList $props

それ以外の:

$obj = New-Object PSObject -Property $props

編集上記のソリューションは PS3.0 でのみ機能しました。-Propertyただし、 PS2.0 でもパラメーターが必要なため、これは引き続き有効です。PS2.0では、デフォルトの配列でstring[]ある object-array ( ) ではなく、propertyset-array を (string-array) にキャストする必要があります。object[]PS2.0 の完全なソリューションは次のとおりです。

$props = @{"Mary"=1;"Jane"=2;"Frank"=3;"John"=5;"Brenda"=6}
$obj = New-Object -TypeName PSObject -Property $props

$obj | Add-Member PropertySet "Male" ([string[]]@("Frank","John"))
$obj | Add-Member PropertySet "Female" ([string[]]@("Mary","Jane","Brenda"))

$obj | select male

Frank John
----- ----
    3    5
于 2013-02-21T16:37:38.433 に答える