Используйте ExpandProperty, чтобы выбрать одно свойство из объекта - PullRequest
1 голос
/ 29 апреля 2020

когда я делаю что-то вроде:

Get-Objects | Where ($_.prop1 -ne $null} | select -ExpandProperty prop1

Возвращает все объекты, где prop1 не равны нулю. Что если я хочу получить все объекты, где subprop = "10", например, получить все объекты, где prop1.subprop = 10, и выбрать это значение?

Есть ли у нас что-то вроде Get-Objects | where { $_.prop1/subprop -eq "10"} | select -ExpandProperty prop1/subprop?

Я не уверен, как заставить это работать так

1 Ответ

1 голос
/ 29 апреля 2020

Прежде всего, примечание от Об операторах сравнения :

Если вам нужно сравнить значение с $null, вы должны поставить $null слева стороны сравнения. Когда вы сравниваете $null с Object [], результатом является False, поскольку объект сравнения является массивом. Когда вы сравниваете массив с $null, сравнение отфильтровывает любые значения $ null, хранящиеся в массиве.

PowerShell имеет две приятные особенности:

  1. Перечисление членов (PowerShell v3 +)
  2. Операторы равенства (-eq, -ne) возвращают значение ИСТИНА или совпадения , когда одно или несколько входных значений идентичны указанному шаблону.

Это означает, что если вы просто ищете значения субсвойств, синтаксис просто так:

(Get-Objects).prop1.subprop -eq 10

Пример:

Function Get-Objects {
    [pscustomobject]@{
        Prop1 = [pscustomobject]@{SubProp1a = 10; SubProp1b = 11}
        Prop2 = [pscustomobject]@{SubProp2a = 20; SubProp2b = 11}
    },
    [pscustomobject]@{
        Prop1 = [pscustomobject]@{SubProp1a = 20; SubProp1b = 22}
        Prop2 = [pscustomobject]@{SubProp2a = 10; SubProp2b = 22}
    },
    [pscustomobject]@{
        Prop1 = [pscustomobject]@{SubProp1a = 10; SubProp1b = 33}
        Prop2 = [pscustomobject]@{SubProp2a = 20; SubProp2b = 33}
    }
}

(Get-Objects).Prop1.SubProp1a -eq 10
10
10
(Get-Objects).Prop1.SubProp1b -gt 20
22
33
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...