【问题标题】:Powershell Email format and retrieving CN from Certificate subjectPowershell 电子邮件格式和从证书主题中检索 CN
【发布时间】:2017-06-06 19:39:29
【问题描述】:

我正在尝试创建一个 powershell 脚本,它会在我的一个或多个证书即将到期时提醒我。我结合了我在互联网上找到的一些脚本,它似乎工作正常。唯一的问题是,当我发送电子邮件时,我只得到一大排,所有证书一个接一个。我更愿意获得更多的列表,例如: 证书1 主题:CN =你好 有效期:2/11/2017 1:00:00 AM

证书 2 主题:CN =你好2 有效期: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  = "$PCName@test.com"
$emailMessage.To.Add( "test@dev.test.de" )
$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 )
}  

【问题讨论】:

    标签: email powershell notifications certificate


    【解决方案1】:

    我正在寻找相同的内容,但发现以下堆栈溢出 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]
    

    它适用于大多数域证书,但我可以看到自我证书和服务器证书存在一些问题。

    【讨论】:

      【解决方案2】:

      要么配置 $emailMessage.IsBodyHtml = $false 要么创建一个 HTML 正文。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-13
        • 2020-09-14
        • 2011-08-17
        • 1970-01-01
        • 2017-10-23
        • 2017-04-19
        • 2020-04-23
        • 1970-01-01
        相关资源
        最近更新 更多