在PowerShell中返回属性值的true / false,而不是值

时间:2018-05-15 01:22:02

标签: powershell boolean

我正在使用PowerShell的Get-ADuser来提取一些策展属性(超过基本属性但少于select *)。

没什么特别的,基本上是用户创建的时间,最后一次登录(我认为那个所需的表达式),以及其他一些。大多数只是简单的属性属性返回。但是,我还想检查是否存在UserSmmimeCert

它本身可以被拉,但是返回值是SMIME键的值,所以它很长。我不需要钥匙;如果字段存在与否,我只想返回true / false。如果我想要的唯一字段是UserSmimeCertificate(下面),我有办法做到这一点,但我想要它与我正在拉动的其他值一起。

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

所以,是的,这将作为一次性工作,但我正在拉回10个属性属性。

作为一种解决方法,如果有某种方式可以说“只返回UserSmimeCertificate的前x位数”,我也会很高兴。

2 个答案:

答案 0 :(得分:1)

您可以使用表达式属性,例如。:

Get-ADUser -Filter * -Properties userSmimeCertificate | Select-Object Name, sid, @{Name="userSmimeCertificate"; Expression = {$_.userSmimeCertificate -is [System.Array]}}

答案 1 :(得分:0)

我并不完全清楚你在寻找什么,但我想你想得到一些属性的当前值以及一个告诉你证书是否存在的“标志”。如果是这样,一种方法是向返回的对象添加新属性:

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

通过这种方式,您可以获得之前拥有的所有内容以及新属性USCertPresent,无论是真还是假,具体取决于证书数据的存在。

如果你想要更简单的东西,只需要你需要的属性,那么你可以创建一个只有那些对象的全新对象:

 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等替换为您想要的实际属性的名称。