windows-server-2008-r2 – PowerShell脚本的电子邮件结果
发布时间:2020-12-13 23:23:29 所属栏目:Windows 来源:网络整理
导读:我有一个power shell脚本,用于检查证书存储区是否存在过期证书.它将在CLI中显示这些结果.我想修改此脚本以通过电子邮件发送电子邮件正文中的输出结果.我知道如何使用send-mailmessage CmdLet通过Power Shell发送电子邮件,但我不确定如何获取脚本的结果并将其
我有一个power
shell脚本,用于检查证书存储区是否存在过期证书.它将在CLI中显示这些结果.我想修改此脚本以通过电子邮件发送电子邮件正文中的输出结果.我知道如何使用send-mailmessage CmdLet通过Power
Shell发送电子邮件,但我不确定如何获取脚本的结果并将其发送到电子邮件中…
这是脚本: param([int]$InNumberOfDays=180,[switch]$ExcludeAutoEnroll) function WriteCertInfo($cert) { #just a lot of code to get the fields into an object $certObj = "" | Select RequesterName,RequestType,ExpirationDate,CommonName,EnrollmentFlags $RequesterName=$cert -match "Requester Name:.*Request Type:" $startLength="Requester Name:".Length $lineLength=$matches[0].Length -("Request Type:".Length + $startLength) $OutRequesterName=$matches[0].SubString($startLength,$lineLength) $certObj.RequesterName=$OutRequesterName $RequestType=$cert -match "Request Type:.*Certificate Expiration Date:" $startLength="Request Type:".Length $lineLength=$matches[0].Length - ("Certificate Expiration Date:".Length + $startLength) $OutRequestType=$matches[0].SubString($startLength,$lineLength) $certObj.RequestType=$OutRequestType $ExpirationDate = $cert -match "Certificate Expiration Date:.*Issued Common Name:" $startLength="Certificate Expiration Date:".Length $lineLength=$matches[0].Length - ("Issued Common Name:".Length + $startLength) $OutExpirationDate=$matches[0].SubString($startLength,$lineLength) $certObj.ExpirationDate=$OutExpirationDate $IssuedCommonName= $cert -match "Issued Common Name:.*Template Enrollment Flags:" $startLength="Issued Common Name:".Length $lineLength=$matches[0].Length - ("Template Enrollment Flags:".Length + $startLength) $OutCommonName=$matches[0].SubString($startLength,$lineLength) $certObj.CommonName=$OutCommonName $EnrollmentFlags= $cert -match "Template Enrollment Flags:.*" $startLength="Template Enrollment Flags:".Length $lineLength=$matches[0].Length - ($startLength) $OutEnrollmentFlags=$matches[0].SubString($startLength,$lineLength) $certObj.EnrollmentFlags=$OutEnrollmentFlags if($ExcludeAutoEnroll) { if(($OutEnrollmentFlags -match "CT_FLAG_AUTO_ENROLLMENT") -eq $false) { $script:CertToList+=$certObj } } else { $script:CertToList+=$certObj } } $CertToList=@() $today=Get-Date $endperiod=$today.AddDays($InNumberOfDays) $tester=certutil -view -restrict "NotAfter>=$today,NotAfter<=$endperiod" -out "RequestID,RequesterName,NotAfter,EnrollmentFlags" $arr=$tester -match "Row d*:" $numberOfCerts=$arr.length $line=[string]::join(" ",$tester) for($certNo=0;$certNo -lt $numberOfCerts;$certNo=$certNo+1) { $r1=$arr[$certNo] if($certNo -ne ($numberOfCerts-1)) { $r2=$arr[$certNo+1] } else { $r2="Maximum Row Index" } $isFound=$line -match "$r1 .* $r2" $NumberOfChars=$matches[0].Length - $r2.Length $thisCert=$matches[0].SubString(0,$NumberOfChars) WriteCertInfo($thisCert) } $CertToList
由于PowerShell提示符中的输出格式化在您实际输出$CertToList时发生,并且您对此不感兴趣,因此您可能希望构造一个HTML结构以在邮件消息中显示输出.
更新 # Smtp details as outlined by Colyn1337 $smtpServer = "server.domain.com" $smtpFrom = "emailfrom@address.com" $smtpTo = "emailto@address.com" $messageSubject = "The subject line of the email" # Set up an SmtpClient for sending the message $smtpClient = New-Object Net.Mail.SmtpClient $smtpClient.Host = $smtpServer # Create the MailMessage you want to send $mailMessage = New-Object Net.Mail.MailMessage $mailMessage.From = $smtpFrom $mailMessage.To.Add($smtpTo) $mailMessage.Subject = $messageSubject # Create the html content for the mail # Add embedded image resource to HTML $htmlReport = "<image src=cid:DangeRussLogo>" # And then the table with your data $htmlReport += "<table>" $htmlReport += "`n" $htmlReport += "<tr>" $htmlReport += "<th>RequestID</th>" $htmlReport += "<th>RequesterName</th>" $htmlReport += "<th>RequestType</th>" $htmlReport += "<th>NotAfter</th>" $htmlReport += "<th>CommonName</th>" $htmlReport += "<th>EnrollmentFlags</th>" $htmlReport += "</tr>" $htmlReport += "`n" foreach($cert in $CertToList) { $htmlReport += "<tr>" $htmlReport += "<td>$($cert.RequestID)</td>" $htmlReport += "<td>$($cert.RequesterName)</td>" $htmlReport += "<td>$($cert.RequestType)</td>" $htmlReport += "<td>$($cert.NotAfter)</td>" $htmlReport += "<td>$($cert.CommonName)</td>" $htmlReport += "<td>$($cert.EnrollmentFlags)</td>" $htmlReport += "</tr>" $htmlReport += "`n" } $htmlReport += "</table>" # Now create an AlternateView from the HTML contents $messageBody = [Net.Mail.AlternateView]::CreateAlternateViewFromString($htmlReport,'text/html') # Create a Linked Resource from the logo image $imageMimeType = New-Object System.Net.Mime.ContentType("image/png") $embeddedImage = New-Object Net.Mail.LinkedResource("C:UsersDangeRusslogo.png",$imageMimeType) $embeddedImage.ContentId = "DangeRussLogo" # Add the resource to the HTML view $messageBody.LinkedResources.Add($embeddedImage) # Add the HTML view to the MailMessage $mailMessage.AlternateViews.Add($messageBody) # And finally send the message $smtpClient.Send($mailMessage) 如果要在PNG上使用.jpeg或.jpg文件,请将MimeType从“image / png”更改为“image / jpeg” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-server-2003 – 确定私有IP地址
- windows – 部署期间未更新的环境变量
- windows – 您还要等多久才能安装更新?
- windows-server-2003 – 监控服务器温度的最佳方法是什么?
- windows – 在C#应用程序中使用系统图标
- wpf – 如何在Window 8存储应用程序中访问Parent的DataCont
- 如何在Windows XP / Vista上创建临时文件的路径
- microsoft-edge – 如何在Edge Browser中通过Registry更改主
- windows – 删除孤立的AD域:“从服务器返回引用”
- Debian将系统时区更改为Windows等效