2016-03-22 5 views
-1

Я создал объект как часть импорта клиента. Теперь каждый объект клиента имеет динамический набор свойств, в котором все имеют префикс: «Cust». , Мне просто нужно пропустить эти свойства и сначала получить имя свойства, а во-вторых, получить значение.Проверьте значения свойств динамического объекта

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

Что включает в себя код? Производит ли он правильные свойства и ценности? –

+0

Вам нужно показать, как создаются объекты внутри '$ Customer' и как вы собираетесь использовать вывод. Образцы должны быть простыми и воспроизводимыми, и желаемый результат должен быть ясным. –

+0

@MikeShepard $ Клиент отображает правильно Cust.Option1 = «Да», Cust.Option2 = «Нет» и т. Д. Я просто не знаю, сколько опций есть или их значения до времени исполнения. – 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 и что вы хотите использовать, мало что известно, я буду гадать, что $Customer - это единственный объект, а не массив. Чтобы прокрутить свойства, начиная с Cust., имея возможность получить доступ как к имени свойства, так и по значению свойства, я бы использовал это. Настройте его с вашими потребностями:

$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.* -properties и использовать его в своем 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 = $ Пользователь | ForEach-Object {$ _. PsObject.Properties } | Where-Object {$ _. Name -like 'CUST. *'} Работает как прелесть. После этого я использую проверку каждого параметра $ custProperty.Value и $ custProperty.Name в моем цикле foreach. Я понял, что было несколько ошибок исправить до предложенных строк кода ;-( – westerdaled

+0

Я не уверен, что произошло здесь. Был ли вопрос где-то в комментарии? Отвечал ли ответ на вашу проблему? :-) –

Смежные вопросы