使用Powershell浏览文件夹树

时间:2019-05-17 09:06:01

标签: powershell ssl

我有以下代码浏览路径Cert:\LocalMachine\My,以获取有关SSL证书的信息。我想知道如何浏览Cert:\LocalMachine中的所有文件夹并获取其信息。我知道我需要添加另一个循环,但是我不知道该怎么做。

这是我写的脚本:

$route = "Cert:\LocalMachine\My"

$count = (Dir Cert:\LocalMachine\My\*).Count
$count=$count-1

For ($i=0; $i -le $count; $i++)
{ 
$subject = (Get-ChildItem $route)[$i].Subject
$thumb = (Get-ChildItem $route)[$i].Thumbprint


$expiredate = (Get-ChildItem $route)[$i].NotAfter
$startDate = Get-Date
$diff = (New-TimeSpan -Start $startDate -End $expiredate)
$days = $diff.Days
if ($diff.Days -ge 0)
{ 
 if ($diff.Days -gt 30)
 {

 }
 if($diff.Days -lt 30)
 {

  $mailtext3 = "are about to expire in less then"
  $mailtext4 = "days" 
  $content= "$mailtext1,$subject,$mailtext3 $days $mailtext4"
  Add-Content -Path C:\Users\hmk\Desktop\file.txt -Value "$content" 

$expiredate
}

}
elseif($diff.Days -lt 0)
{

$mailtext3 = "already expired since"
$mailtext4 = "days"
$content= "$subject, $mailtext3,$days,$mailtext4" 
Add-Content -Path C:\Users\hmk\Desktop\file.txt -Value "$content" 
}
}

希望我能尽快得到答案

1 个答案:

答案 0 :(得分:0)

赞:

$StartDate = Get-Date
$CertPath = 'Cert:\LocalMachine\My\'
$CertsDetail =  Get-ChildItem -Path $CertPath -Recurse | Where-Object { $_.PsIsContainer -ne $true } | ForEach-Object {
    $DaysLeft = (New-TimeSpan -Start $StartDate -End $_.NotAfter).Days
    If ($DaysLeft -lt 30) {
        $Under30 = $true
    }
    Else {
        $Under30 = $false
    }
    If ($DaysLeft -lt 1) {
        $Expired = $true
    }
    Else {
        $Expired = $false
    }
    [pscustomobject]@{Subject = $_.Subject;`
                    Thumbprint = $_.Thumbprint;`
                    ExpireDate = $_.NotAfter;`
                    ExpiryDaysRemaining = $DaysLeft;`
                    Under30Days = $Under30;`
                    Expired = $Expired
                    }

}

Write-Host "Expiring in under 30 days:"
$CertsDetail | Where-Object { ($_.Under30Days) -and !($_.Expired)}

Write-Host "Expired:"
$CertsDetail | Where-Object { $_.Expired}
相关问题