使用 Powershell 查找未过期的 SSL 证书

使用 Powershell 查找未过期的 SSL 证书

我正在努力理解在 Powershell 中查找未过期证书背后的逻辑。我可能安装了多个具有相同 CN 的证书,其中大多数已过期,至少有一个处于活动状态,可能有两个处于活动状态,持续一两周,同时进行手动续订。这给我带来了逻辑问题,我需要帮助。

到目前为止,我可以使用以下证书进行测试:

  1. FRIENDLYNAME,2024 年 8 月 10 日到期
  2. FRIENDLYNAME,2023 年 8 月 21 日到期
  3. 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

相关内容