2016-03-04 39 views
0

我想創建一個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) 
} 

回答

0

要麼配置$ emailMessage.IsBodyHtml = $ false或創建一個HTML主體。

0

我在尋找相同的,我發現下面的堆棧溢出 link

$s = Get-ChildItem -Path 'Cert:\localmachine\My'| select subject 
$s -replace "(CN=)(.*?),.*",'$2' 
$s = $s -replace "@{Subject=" 

還是非正則表達式的方式..

$sub = $_.Subject.split(",")[0].split("=") 
$sub[1] = $sub[1] -replace "\*","star" 
$sub[1] 

它正在爲大多數域名證書,但我可以看到一些自證書和服務器證書的問題。