尝试创建for each if循环,检查证书是否即将过期



我正在尝试制作一个powershell脚本,将检查Azure应用程序代理证书。

我想要完成的是,脚本将显示当证书在到期前少于30天。

我现在有这个

$aadapServPrinc = Get-AzureADServicePrincipal -Top 100000 | where-object {$_.Tags -Contains "WindowsAzureActiveDirectoryOnPremApp"}  
$allApps = Get-AzureADApplication -Top 100000 
$aadapApp = $aadapServPrinc | ForEach-Object { $allApps -match $_.AppId} 
Write-Host "Displaying all custom domain Azure AD Application Proxy applications and the uploaded certificates..." -BackgroundColor "Black" -ForegroundColor "Green"
Write-Host " "
# Get the list of SSL certificates assigned Azure AD Application Proxy applications
[string[]]$certs = $null

foreach ($item in $aadapApp) { 

$tempApps = Get-AzureADApplicationProxyApplication -ObjectId $item.ObjectId
$certs += $tempApps.VerifiedCustomDomainCertificatesMetadata
$certsexpire + $tempApps.VerifiedCustomDomainCertificatesMetadata.ExpiryDate | Out-Null
If ($tempApps.VerifiedCustomDomainCertificatesMetadata -match "class") {  }     
}  

Write-Host ("")
Write-Host ("Used certificates: ")
Write-Host ("")
$certs | Sort-Object | Get-Unique 

这将列出证书。

我试过制作一个简单的Get-Date,并将其转换为UTC等。tempApps.VerifiedCustomDomainCertificatesMetadata美元。ExpiryDate将输出如下:3/14/2022 10:59:00 PM

我试过这样做

$Today = Get-Date
$ExpiryDate = $tempApps.VerifiedCustomDomainCertificatesMetadata.ExpiryDate
[Datetime]$ExpiryDate = $ExpiryDate
$Diff = New-TimeSpan -Start $Today -End $ExpiryDate

我希望我的输出是这样的:使用证书:显示所有正在使用的证书

IF ($ Diff。天- 30天显示哪个证书即将过期。

这个PowerShell脚本示例以非交互方式将目录中指定应用程序的所有注册秘密和超过规定期限的证书导出到CSV文件中。

https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/scripts/powershell-export-apps-with-secrets-beyond-required

首先,不要使$certs成为字符串数组(即[string[]]$certs = $null)。通过这样做,我们限制了稍后脚本中可用的数据量。相反,我们应该将其初始化为空数组,方法是将其设置为@()(称为数组子表达式操作符

)。
$certs = @()

允许我们向它添加任何类型的对象。这样做将允许我们稍后捕获完整的VerifiedCustomDomainCertificatesMetadata对象,而不仅仅是它们的ToString()值。

现在我们已经完成了这一点,在$certs中捕获的对象将已经具有ExpiryDate属性,因此您不需要在另一个变量中单独跟踪它。$certs应该是一个元数据对象数组。最后,当您想要查看哪些证书将在30天内过期时,您可以循环遍历这些证书并检查它们的ExpiryDate属性。

您可以使用下面的代码,它使用Where-Object来完成此操作。在Where-ObjectFilterScript块中,$_用于访问正在从管道处理的当前项。我们正在检查这个对象的ExpiryDate是否大于今天的日期——30天。如果是,它将被输出到屏幕上。每个对象(证书)都将以这种方式处理,为您留下一个将在未来30天内到期的证书列表。

$certs | Where-Object { $_.ExpiryDate -gt [datetime]::Today.AddDays(-30) } 

此时,如果需要的话,可以将对象强制转换为字符串,将其转换为字符串表示形式。Foreach-Object可以用于此。与where - object类似,我们为Foreach-Object提供了一个scriptblock(称为Foreach-Object的进程块),其中可以使用$_对每个对象执行操作。

$certs | 
Where-Object { $_.ExpiryDate -gt [datetime]::Today.AddDays(-30) } | 
Foreach-Object { [string]$_ )

最新更新