获取用户AD证书的另一个问题。这个问题全都与过滤输出数据有关。我们有几个用于不同目的的证书模板(智能卡,VPN等),并且AD中仍然存在按时间到期的证书。如何过滤每个用户的证书列表?我只需要保留每个模板的最新证书。
广告请求示例:
$user = Get-ADUser username -Properties "Certificates"
$Cert = $user.certificates | foreach {New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $_} | select @{n='Fullname';e={$_.subject -replace '^.*?CN=|,.*$'}}, @{n='subject';e={$_.subject -replace '^CN=|^E=|,.*$'}}, Notafter, thumbprint, @{N="Template";E={($_.Extensions |
?{$_.oid.Friendlyname -match "Certificate Template Information|Certificate Template Name"}).Format(0) `
-replace "(.+)?=(.+)\((.+)?", '$2'}}
$Cert
输出为3个证书,例如:
Fullname : Full User Name
subject : subject@domain.com
NotAfter : 30.05.2019 11:25:45
Thumbprint : hash_1
Template : temaplate_1
Fullname : Full User Name
subject : subject@domain.com
NotAfter : 02.04.2019 16:56:24
Thumbprint : hash_2
Template : **template_2**
Fullname : Full User Name
subject : subject@domain.com
NotAfter : 16.05.2018 14:54:22
Thumbprint : hash_3
Template : **template_2**
我该如何过滤我的输出以仅保留每个模板的最新证书,例如。 hash_1和hash_2?
组对象看起来不错,但是我该如何进行
$Cert | Group-Object subject | fl
Name : subject@domain.com
Count : 3
Group : {@{Fullname=Full User Name; subject=subject@domain.com; NotAfter=30.05.2019 11:25:45; Thumbprint=hash_1; Template=temaplate_1}, @{Fullname=Full User Name; subject=subject@domain.com; NotAfter=02.04.2019 16:56:24; Thumbprint=hash_2; Template=template_2}, @{Fullname=Full User Name; subject=subject@domain.com; NotAfter=16.05.2018 14:54:22; Thumbprint=hash_3; Template=template_2}}
Values : {subject@domain.com}
我认为可以通过某种方式使用
Where-Object
过滤结果。有什么帮助吗? 最佳答案
您可以使用Group-Object
将对象按两个属性(主题和模板)分组,并按NotAfter
对每个组进行排序,然后选择第一个元素。
$x | Group-Object -Property Subject, Template |
ForEach-Object {
$_.Group |
Sort-Object -Property NotAfter -Descending |
Select-Object -First 1
}
关于powershell - 如何按模板和到期日期过滤x509证书,仅保留新鲜证书?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50823221/