Вернуть true / false для значения свойства в PowerShell, а не для значения - PullRequest
0 голосов
/ 15 мая 2018

Я использую PowerShell Get-ADuser для извлечения некоторых курируемых атрибутов (больше, чем базовых, но меньше select *).

Ничего особенного, в основном время, созданное пользователем, последний вход в систему (я думаю, для этого требуется выражение) и некоторые другие. Большинство из них просто возвращают атрибуты свойства. Однако я также хочу проверить наличие UserSmmimeCert.

Само по себе это можно вытащить, но возвращаемое значение - это значение клавиши SMIME, поэтому она ужасно длинная. Мне не нужен ключ; Я просто хочу вернуть значение true / false, если поле присутствует или нет. У меня есть способ сделать это, если ЕДИНСТВЕННОЕ поле, которое я хочу, это UserSmimeCertificate (ниже), но я хочу его вместе с другими значениями, которые я извлекаю.

Get-ADUser -Identity $user -Properties userSmimeCertificate | select -ExpandProperty userSmimeCertificate) -is [System.Array]

Так что да, это будет работать как единое целое, но я возвращаю около 10 атрибутов свойств.

В качестве альтернативного варианта, я также был бы рад, если бы вместо этого был какой-то способ сказать "просто вернуть первые x цифр UserSmimeCertificate".

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вы можете использовать для этого свойство выражения, например .:

Get-ADUser -Filter * -Properties userSmimeCertificate | Select-Object Name, sid, @{Name="userSmimeCertificate"; Expression = {$_.userSmimeCertificate -is [System.Array]}}
0 голосов
/ 15 мая 2018

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

Get-ADUser -Identity $user -Properties userSmimeCertificate |
    ForEach-Object {
        Add-Member -InputObject $_ `
                   -MemberType NoteProperty `
                   -Name USCertPresent `
                   -Value ($_.userSmimeCertificate -is [System.Array]) `
                   -PassThru
    }

Таким образом, вы получаете все, что у вас было раньше, вместе с новым свойством USCertPresent, которое имеет значение true или false, в зависимости от наличия данных сертификата.

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

 Get-ADUser -Identity $user -Properties userSmimeCertificate |
    ForEach-Object {
        Add-Member -InputObject $_ `
                    -MemberType NoteProperty `
                    -Name USCertPresent `
                    -Value ($_.userSmimeCertificate -is [System.Array]) `
                    -PassThru
    } | Select-Object Property1, Property2, Property3, USCertPresent

Просто замените Property1 и т. Д. Именами фактических свойств, которые вы хотите.

...