Как я могу фильтровать объекты на основе совпадения имен? - PullRequest
0 голосов
/ 08 июня 2018

Я возвращаю много данных, которые я хотел бы отфильтровать.Имена собственности имеют эту информацию.Я привык к фильтрации на основе | ? {$_.Name -eq 'Value'}.Я ожидаю, что смогу использовать скрытый .pscustomobject, чтобы сделать это более динамично.

$x = [pscustomobject]@{
   atruevalue = 'sometext'
   afalsevalue = 'sometext'
}

$x | ?{$_.psobject.Properties.Name -like '*true*'}

Я ожидаю, что это вернется:

> atruevalue
> ----------  
> sometext

Однако он просто возвращает каждый элемент в объекте.

Может ли кто-нибудь объяснить это поведение?

Ответы [ 3 ]

0 голосов
/ 09 июня 2018

Объект Where фильтрует строки ввода, что делает ваш пример.

Для фильтрации столбцов необходим Select-Object.

$x = [pscustomobject]@{
      atruevalue = 'sometext'
      afalsevalue = 'sometext'
      atruenightmare = 'someothertext'}    

> $x|select ($x.psobject.properties|? name -like '*true*').Name

atruevalue atruenightmare
---------- --------------
sometext   someothertext
0 голосов
/ 09 июня 2018

Полезный ответ Брюса Пайетта показывает простейшее решение.

Что касается:

Может ли кто-нибудь объяснить это поведение?

?, встроенный псевдоним для Where-Object командлета , действует как фильтр , что означает, что если условие фильтра в формеблока сценария для оценки для каждого ввода ({ ... }) оценивается как $True, находящийся под рукой входной объект (представленный как $_ внутри блока сценария) пропускается через как есть .

Другими словами: неважно, какие конкретные свойства входного объекта проверяет ваш блок скрипта - если условие оценивается как $True, весь входной объект пропускается.

0 голосов
/ 09 июня 2018

Если вы действительно хотите отфильтровать свойства, то это будет происходить при небольшом перемещении.Это будет выглядеть так:

$x.psobject.Properties | ? {$_.Name -like '*true*'}

Если вы просто хотите получить значения, а не свойства, добавьте еще один этап в конвейер:

$x.psobject.Properties | ? {$_.Name -like '*true*'} | % Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...