我正在努力理解在 Powershell 中查找未过期证书背后的逻辑。我可能安装了多个具有相同 CN 的证书,其中大多数已过期,至少有一个处于活动状态,可能有两个处于活动状态,持续一两周,同时进行手动续订。这给我带来了逻辑问题,我需要帮助。
到目前为止,我可以使用以下证书进行测试:
- FRIENDLYNAME,2024 年 8 月 10 日到期
- FRIENDLYNAME,2023 年 8 月 21 日到期
- FRIENDLYNAME,2022 年 8 月 27 日到期
我有以下工作代码:
cd cert:\LocalMachine\my
$today = [DateTime]::Now
get-childitem | where { $_.Subject -match 'CN=FRIEDNLYNAME' -and $_.NotAfter -gt $today }
这确实准确地返回了未过期的证书。但是,有时可能会有两个 FRIENDLYNAME 证书处于活动状态,例如使用上面的列表,在安装第一个证书时,第二个证书处于活动状态长达两周。
我的逻辑问题是,如何让 Powershell 仅返回绝对最新可能到期的证书?我知道最简单的答案是正确清理环境并确保仅安装了活动证书,但如果我无法做到这一点,如何让 Powershell 逻辑对我有利?
答案1
你可以简单地对输出进行排序Sort-Object
然后选择最后一个对象Select-Object
以及它的-Last
参数。
Set-Location Cert:\LocalMachine\My
$Today = [DateTime]::Now
Get-ChildItem | Where-Object {
$_.Subject -match 'CN=FRIEDNLYNAME' -and $_.NotAfter -gt $Today
} | Sort-Object NotAfter | Select-Object -Last 1