使用Array时没有得到结果



我只是想问一些指导/帮助,为什么我没有得到任何结果,当我查询变量的数组,我使用

我想要实现的背景是这样的。我正在尝试收集即将过期的SSL证书的详细信息。在显示总列表之前。我想先把它存储在一个数组中然后在& IF&quot之后;语句,这就是我将显示完整列表的时间。我的脚本如下。我是一个新手在脚本。我没有得到任何错误,但没有结果。你的建议会很有帮助的。

$DaysBeforeExpiry=90
$Rep = @()
$Expiry = Get-ChildItem -Path cert: -Recurse | Where-Object { $_.PSIsContainer }
ForEach-Object {
$obj = New-Object PSObject
$Daysleft = $Cert.NotAfter - (get-date)
$obj | Add-Member -Membertype NoteProperty -Name "Path" $cert.PSParentPath
$obj | Add-Member -Membertype NoteProperty -Name "Issuer" $cert.Issuer
$obj | Add-Member -Membertype NoteProperty -Name "NotAfter" $cert.NotAfter
$obj | Add-Member -Membertype NoteProperty -Name "DaysLeft" $DaysLeft
foreach ($cert in $Expiry) {   
if ($cert.notafter -le (get-date).Adddays($DaysBeforeExpiry) -and  $cert.notafter -gt (get-date)) {
$Rep +=$obj   
}
}
}
$Rep

您应该能够使用Where-Object来缩小您的代码范围,以便在这些证书通过管道传递时过滤它们:

$today = Get-Date
Get-ChildItem -Path "cert:" -Recurse | 
Where-Object -FilterScript { (-not $_.PSIsContainer) -and $_.NotAfter -le $today.AddDays(90) -and $_.NotAfter -gt $today } | 
Select-Object -Property "Issuer", "NotAfter", @{Name="Path";Expression={$_.PSParentPath}}, @{Name="DaysLeft";Expression={$_.NotAfter - $today}}

使用Select-Object和一个计算的属性,而不是使用一个循环来创建一个具有已经存在的属性的pscustomobject来选择这些属性。

至于您所尝试的,您必须管道到Foreach-Object并使用$_$PSItem引用当前管道项目,这两个项目都没有指定包含管道(|)本身。当涉及到大型列表时,添加到固定数组(+=)在计算上可能会很昂贵,所以最好避免这样做。相反,可以利用PowerShell的管道流并将输出直接赋值给一个变量:$variable = foreach ($item in $list) { ... }

最新更新