powershell - 使用 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.....
解决方案
我最终想到了一个比我开始的混乱更优雅的解决方案:
Get-AdfsClaimsProviderTrust |
Select name, @{Name='TokenSigningCertificates'; Expression={[string]::join(";", ($_.TokenSigningCertificates.NotAfter|
Group-Object Name |
Foreach-Object {$_.Group | Sort-Object * | Select-Object -Last 1}))}}
感谢@TheMadTechnician 的指导
推荐阅读
- python - python中的模块链接是什么意思
- ms-access-2003 - 如何在没有 Windows 的情况下从旧版 access 2003 数据库中读取 vb 脚本和存储过程?
- makefile - Makefile 错误:“缺少分隔符。停止。”
- airflow - 气流是否支持跨数据中心?
- oracle - SAS 传递给 Oracle 以更改表
- c# - C# 中 VB 的 Replace(str1, str2, str3) 的等价物是什么?
- asp.net-mvc - 静态 DropdownList 在视图中被选中
- java - 在 oracle 和 postgresql 中查询以 yyyy-MM-dd'T'HH:mm:ss.SSSZ 格式打印日期
- heroku - 如何在 Heroku 上安装 brew(或 ffmpeg)?
- r - 将特定列中的值作为 R data.table 中的新变量