2016-03-22 2 views
-1

私は顧客のインポートの一部としてオブジェクトを作成しました。各顧客オブジェクトには、「Cust」という接頭辞を持つすべてのプロパティの動的セットがあります。 。私はこれらのプロパティをループするだけで、まずプロパティの名前を取得し、次に値を取得する必要があります。動的オブジェクトのプロパティの値を確認します

$customerOptions = $Customer | Select-Object -property "Cust.*" 
+0

あなたのコードは何をしていますか?正しいプロパティと値を生成しますか? –

+0

'$ Customer'内のオブジェクトの作成方法と出力の使い方を表示する必要があります。サンプルは単純で再現性があり、望ましい結果がはっきりしている必要があります。 –

+0

@MikeShepard $お客様はCust.Option1 = "Yes"、Cust.Option2 = "No"などの表示を正しく表示します。ランタイムまでのオプション数や値はわかりません。 – westerdaled

答えて

0

あなたは隠されたpsobjectプロパティを介して各カスタムオブジェクトのプロパティ名を調べることができます:あなたはまた、すべての可能なプロパティ名を列挙するために、この技術を使用することができます

$Customer[0].psobject.Properties |Where-Object {$_.Name -like 'Cust.*'} |Select Name,Value 

Select-Object

にそれらを養います
$CustPropNames = $Customer |ForEach-Object { 
    $_.psobject.Properties |Where-Object {$_.Name -like 'Cust.*'} |Select-Object -Expand Name 
} |Select-Object -Unique 

$customerOptions = $Customer |Select-Object -Property $CustPropNames 
+0

ありがとう私はこれを試してみる – westerdaled

0

$Customerが何であり、どのようなものを使用したいかについての情報があまりないので、私は0を推測しますは単一のオブジェクトであり、配列ではありません。 Cust.で始まるプロパティをループし、property-nameとproperty-valueの両方にアクセスできるようにするには、これを使用します。あなたのニーズに合わせてカスタマイズ:

$Customer = [pscustomobject]@{ Name = "Object1"; "Cust.ID" = 1; "Cust.Car" = "Mercedes"} 

$Customer.psobject.Properties | Where-Object { $_.Name -like 'Cust.*' } | ForEach-Object { 
    #Foreach property with a Cust. prefix 
    $PropertyName = $_.Name 
    $PropertyValue = $_.Value 

    Write-Host "$PropertyName = '$PropertyValue'" 
} 

出力:

Cust.ID = '1' 
Cust.Car = 'Mercedes' 

あなたは、配列を出力しているし、あなただけのようないくつかのプロパティ(第一の目的で利用可能なもの)を取得した場合:

$Customer = @() 
$Customer += [pscustomobject]@{ Name = "Object1"; "Cust.ID" = 1; "Cust.Car" = "Mercedes"} 
$Customer += [pscustomobject]@{ Name = "Object2"; "Cust.ID" = 2; "Cust.Moped" = "Vespa"} 

$Customer | Select-Object -Property "Cust.*" 

Cust.ID Cust.Car 
------- -------- 
     1 Mercedes 
     2   

次に、cust.*のプロパティの完全なリストを作成し、それをSelect-Object文で使用したいとします。

$AllCustProperties = $Customer | ForEach-Object { $_.psobject.Properties } | Where-Object { $_.Name -like 'Cust.*' } | Select-Object -ExpandProperty Name -Unique 

$Customer | Select-Object -Property $AllCustProperties 

Cust.ID Cust.Car Cust.Moped 
------- -------- ---------- 
     1 Mercedes   
     2   Vespa  
+0

これも試してみる - 私はこれを把握するためにしばらく時間がかかっていたと私は嬉しく思います; - – westerdaled

+0

F $ allCustProperties = $ User | ForEach-Object {$ _。psObject.Properties }} | Where-Object {$ _。名前のように 'CUST。*'}はチャームのように動作し、その後foreachループで$ custProperty.Valueと$ custProperty.Nameを検査します。提案されたコード行の前に修正する;-( – westerdaled

+0

ここに何が起こっているのか分かりません。コメントのどこかに質問がありましたか?答えがあなたの問題を解決しましたか:-) –

関連する問題