我正在使用PowerShell的Get-ADuser
来提取一些策展属性(超过基本属性但少于select *
)。
没什么特别的,基本上是用户创建的时间,最后一次登录(我认为那个所需的表达式),以及其他一些。大多数只是简单的属性属性返回。但是,我还想检查是否存在UserSmmimeCert
。
它本身可以被拉,但是返回值是SMIME键的值,所以它很长。我不需要钥匙;如果字段存在与否,我只想返回true / false。如果我想要的唯一字段是UserSmimeCertificate
(下面),我有办法做到这一点,但我想要它与我正在拉动的其他值一起。
Get-ADUser -Identity $user -Properties userSmimeCertificate | select -ExpandProperty userSmimeCertificate) -is [System.Array]
所以,是的,这将作为一次性工作,但我正在拉回10个属性属性。
作为一种解决方法,如果有某种方式可以说“只返回UserSmimeCertificate
的前x位数”,我也会很高兴。
答案 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
等替换为您想要的实际属性的名称。