【发布时间】:2016-08-12 20:12:43
【问题描述】:
我一直在浏览网页,试图找到一种方法,如果可能的话,可以使用 power shell 将低磁盘空间警报从 Gmail 帐户通过电子邮件发送到共享邮箱,但我正在努力解决我设法拼凑的查询。
$EmailFrom = "FromEmail@Gmail.com"
$EmailTo = "ToEmail@Gmail.com"
$SMTPServer = "smtp.gmail.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("Username", "Password");
$Computers = "Local Computer"
$Subject = "Disk Space Storage Report"
$Body = "This report was generated because the drive(s) listed below have less than $thresholdspace % free space. Drives above this threshold will not be listed."
[decimal]$thresholdspace = 50
$tableFragment = Get-WMIObject -ComputerName $computers Win32_LogicalDisk `
| select __SERVER, DriveType, VolumeName, Name, @{n='Size (Gb)' ;e={"{0:n2}" -f ($_.size/1gb)}},@{n='FreeSpace (Gb)';e={"{0:n2}" -f ($_.freespace/1gb)}}, @{n='PercentFree';e={"{0:n2}" -f ($_.freespace/$_.size*100)}} `
| Where-Object {$_.DriveType -eq 3} `
| ConvertTo-HTML -fragment
$regexsubject = $Body
$regex = [regex] '(?im)<td>'
if ($regex.IsMatch($regexsubject)) {$smtpclinet.send($fromemail, $EmailTo, $Subject, $Body)}
脚本运行但没有任何反应,任何帮助都会很棒!!!
【问题讨论】:
-
对调试应用分而治之的策略。将脚本分成几部分并找出失败的部分。 WMI 查询是否报告了良好的结果?您可以通过 Gmail 发送任意邮件吗?
-
有些错字对
smtpclinet没有帮助。为什么不使用Send-MailMessage?无论如何,你什么也得不到,因为你从未将$tableFragment合并到$Body中。如果$Body不包含带有表格数据的 HTML 表格,则永远不会发送邮件。 -
你的另一个问题。
$Body包含一个$thresholdspace变量。$thesholdspace变量直到$Body已经使用该值之后才设置。 -
@vonPryz 是的,我已经设法将电子邮件直接从 powershell 发送到另一个邮箱,然后再将它们切碎并重新组合在一起。我已经尝试过这种技术,但没有运气。
-
@ChrisDent - 我之前使用的是 Send-mailmessage,但我遇到了各种各样的错误,所以我切换了。我已经修正了我的拼写(感谢发现)。一开始我对powershell不是很了解。你能举个例子说明应该怎么写吗?
标签: email powershell