我正在尝试获取有关 Windows 2019 上的应用程序证书的一些信息(名称和到期日期):
Get-AdfsRelyingPartyTrust | ?{$_.EncryptionCertificate} `
| Select-Object name,
@{n="CertificateExpiration";e={($_ | Select-Object EncryptionCertificate -ExpandProperty EncryptionCertificate).notafter}} | Sort-Object CertificateExpiration
输出:
但是如果我只想获得那些在不久的将来(例如 30 天)到期的证书怎么办? 试图像这样过滤,但没有成功:
Get-AdfsRelyingPartyTrust | ?{$_.EncryptionCertificate} `
| Select-Object name,
@{n="CertificateExpiration";e={($_ | Select-Object EncryptionCertificate -ExpandProperty EncryptionCertificate).notafter}} | Sort-Object CertificateExpiration `
| Where-Object ($_.CertificateExpiration - (Get-Date)).Days -le '30'
(输出相同)
答案 0 :(得分:2)
[DateTime] minus [DateTime]
为您提供 [TimeSpan]
对象,它代表周期。转换为数字 [Int]
时,它使用 ticks
,即 0.0001 秒。要使用某些时间单位(如天),您应该使用 .TotalDays
由于类型转换,转换为字符串 -le '30'
可能很危险。使用数字,而不是字符串:-le 30
。
[DateTime]::Today
和 [DateTime]::Now
而不是你正在做的 Get-Date
可能更好;)
示例:
Get-ChildItem 'Cert:\LocalMachine\My' |
Where-Object {$_.HasPrivateKey -eq $true} |
Where-Object {($_.NotAfter - [DateTime]::Today).TotalDays -gt 30}
我建议使用“$warningDate”变量代替计算差异:
$warningDate = [DateTime]::Today.AddDays(30)
$warnedCerts = @(Get-ChildItem 'Cert:\LocalMachine\My' |
Where-Object {$_.NotAfter -le $warningDate}) # Use @() to force array if you're not sure on number of elements returned)