首页 > 解决方案 > 使用 PowerShell 在 ADFS 实例中查找所有过期的声明提供程序证书

问题描述

我在尝试构建它时遇到了障碍。现在,我使用我一直在处理的以下脚本获得了我需要的结果,但是我在给定的索赔提供者信任上获得了多个回报(即给定信任的多个签名证书),这让我的电子表格.

我正在寻找添加一行(可能是某种 Foreach 语句),它在给定的回报中选择两个或多个日期中较大的一个。

我尝试添加:

ForEach-Object { $CPDetails.TokenSigningCertificates.NotAfter| Sort-Object -Property NotAfter|Select-Object -Last 1}

到我的 if 语句,但它会导致输出一遍又一遍地重复相同的值。

$Results = @()

Try
{
    $CPDetails = (Get-AdfsClaimsProviderTrust | select  Name, TokenSigningCertificates)
}
Catch
{
    $_.Exception.Message
    Continue
}

If($CPDetails.TokenSigningCertificates)    
{
    $Object = New-Object PSObject -Property @{ 
        NotAfter = $CPDetails.TokenSigningCertificates.NotAfter | ForEach-Object { $CPDetails.TokenSigningCertificates.NotAfter| Sort-Object -Property NotAfter|Select-Object -Last 1}
        Name = $CPDetails.Name
    }
}

$Results += $Object 

If($Results)
{ 
    $Results | Select-Object NotAfter, Name  | Sort-Object NotAfter | Out-GridView -Title "Certificates"
}

目前:

DateTime { 12/31/2999 12:00:00 PM, 12/31/2999 12:00:00 PM, 12/31/2999 12:00:00 PM,

Name {Trust 1, Trust 2, Trust 3.....

需要是:

DateTime { 12/31/2999 12:00:00 PM, 01/2/2019 12:00:00 PM, 05/31/2021 12:00:00 PM,

Name {Trust 1, Trust 2, Trust 3.....

标签: powershelladfs

解决方案


我最终想到了一个比我开始的混乱更优雅的解决方案:

Get-AdfsClaimsProviderTrust |
Select name, @{Name='TokenSigningCertificates'; Expression={[string]::join(";", ($_.TokenSigningCertificates.NotAfter|
Group-Object Name |
Foreach-Object {$_.Group | Sort-Object * | Select-Object -Last 1}))}}

感谢@TheMadTechnician 的指导


推荐阅读