我想創建一個powershell腳本,當我的一個或多個證書即將過期時會提醒我。我組合了一些腳本,我在互聯網上找到它似乎工作精細。唯一的問題是發送電子郵件時,我只能得到一大堆證書。我preffer獲得更多的列表,如: 證書1 主題:CN =你好 有效期:2017年2月11日1:00:00 AM。Powershell電子郵件格式和從證書主題檢索CN
證書2 主題:CN = hello2 到期: 2/11/2017 1:00:00 AM
如果可能的話,我還想就如何從證書主題中獲取CN提供幫助,而不是使用(OU,O,L,S,C )
這是我目前的腳本:
import-module webadministration
$DaysToExpiration = 700 #just modify this date for more or less
$expirationDate = (Get-Date).AddDays($DaysToExpiration)
$body = Get-ChildItem CERT:LocalMachine/My |
Where {$_.NotAfter -lt (Get-Date).AddDays($DaysToExpiration)}
$body | select Subject, @{Name="Expiration"; Expression = {$_.NotAfter}} | fl | out-string
$emailSmtpServer = "172.17.1.236"
$emailSmtpServerPort = "25"
$emailSmtpUser = "test"
$emailSmtpPass = "test"
$emailMessage = New-Object System.Net.Mail.MailMessage
$PCName = $env:COMPUTERNAME
$emailMessage.From = "[email protected]"
$emailMessage.To.Add("[email protected]")
$emailMessage.Body = $body | select Subject, @{Name="Expiration"; Expression = {$_.NotAfter}} | fl | out-string
$emailMessage.Subject = "Certificates Expiring within $DaysToExpiration days"
$emailMessage.IsBodyHtml = $true
$SMTPClient = New-Object System.Net.Mail.SmtpClient($emailSmtpServer , $emailSmtpServerPort)
$SMTPClient.EnableSsl = $false
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($emailSmtpUser , $emailSmtpPass);
if ($emailMessage.Body.Length -gt 1)
{
Write-host "Sending Email"
$SMTPClient.Send($emailMessage)
}