有人请我生成以下PowerShell脚本,以检查是否有许多计算机处于联机或脱机状态并输出到网格。现在,我想将此操作作为在通过电子邮件输出给特定用户的计算机上的计划任务来自动化。
如何开发以下脚本以便将其输出到电子邮件?
$dt = new-object System.Data.DataTable
$cols=@("Location", "Hostname", "Status")
foreach ($col in $cols) {
$dt.Columns.Add($col) | Out-Null
}
$dt.rows.add("1", "3050-27222", "Offline")
$dt.rows.add("2", "3050-27614", "Offline")
$dt.rows.add("3", "3050-27623", "Offline")
$dt.rows.add("4", "3050-27636", "Offline")
$dt.rows.add("5", "3050-27625", "Offline")
$dt.rows.add("6", "3050-27615", "Offline")
$dt.rows.add("7", "3050-27616", "Offline")
$dt.rows.add("8", "3050-27631", "Offline")
$dt.rows.add("9", "3050-27637", "Offline")
$dt.rows.add("10", "3050-27601", "Offline")
$dt.rows.add("11", "3050-27606", "Offline")
$dt.rows.add("12", "3050-27635", "Offline")
$dt.rows.add("13", "3050-27638", "Offline")
$dt.rows.add("14", "3050-27628", "Offline")
$dt.rows.add("15", "3050-27622", "Offline")
$dt.rows.add("16", "3050-27604", "Offline")
$dt.rows.add("17", "3050-27613", "Offline")
$dt.rows.add("18", "3050-27624", "Offline")
$dt.rows.add("19", "3040-25508", "Offline")
$dt.rows.add("20", "3050-27621", "Offline")
$dt.rows.add("21", "3050-27634", "Offline")
$dt.rows.add("22", "3050-27619", "Offline")
$dt.rows.add("23", "3050-27640", "Offline")
$dt.rows.add("24", "3050-27630", "Offline")
$dt.rows.add("25", "3050-27632", "Offline")
$dt.rows.add("26", "TBC", "Offline")
$dt.rows.add("27", "3050-28448", "Offline")
$dt.rows.add("28", "3050-27599", "Offline")
$dt.rows.add("29", "3050-27617", "Offline")
$dt.rows.add("30", "3050-27605", "Offline")
$dt.rows.add("31", "3050-27603", "Offline")
$dt.rows.add("32", "3050-27602", "Offline")
$dt.rows.add("33", "3050-27620", "Offline")
$dt.rows.add("34", "3050-27610", "Offline")
$dt.rows.add("35", "3050-27626", "Offline")
$dt.rows.add("36", "3050-27608", "Offline")
$dt.rows.add("37", "3050-27618", "Offline")
$dt.rows.add("38", "3050-27641", "Offline")
$dt.rows.add("39", "3050-27609", "Offline")
$dt.rows.add("40", "3050-27611", "Offline")
$dt.rows.add("41", "3050-27607", "Offline")
$dt.rows.add("42", "3050-28452", "Offline")
$dt.rows.add("43", "3050-28457", "Offline")
$dt.rows.add("44", "3050-27600", "Offline")
$dt.rows.add("45", "3050-28709", "Offline")
$dt.rows.add("46", "3050-27629", "Offline")
$dt.rows.add("47", "3050-27639", "Offline")
$dt.rows.add("48", "3050-28447", "Offline")
$dt.rows.add("49", "3050-27627", "Offline")
foreach ($row in $dt)
{
if (Test-Connection $row.Hostname)
{
$row.Status = "Online"
}
else
{
$row.Status = "Offline"
}
}
$dt | sort-object "Status"| Out-GridView
答案 0 :(得分:0)
您应该能够在脚本底部使用$ dt变量,并将其导出到本地计算机上的CSV文件中。
$dt | Export-CSV C:\report.csv -NTI
然后您可以使用Send-MailMessage命令在电子邮件中发送该CSV。这将需要找出您的SMTP服务器,并能够通过它中继邮件。
Send-MailMessage -Attachments C:\report.csv -From from@domain.com -To to@domain.com -SmtpServer your.smtp.server.address
答案 1 :(得分:0)
使用Send-MailMessage ...
输出到文件或CSV并作为附件发送到电子邮件:
$dt | sort-object "Status" | Out-File -FilePath C:\folder\attachment.txt #file
$dt | sort-object "Status" | Export-CSV C:\folder\file.csv -NoTypeInformation #csv
Send-MailMessage -From 'user01@example.com' -To 'user02@example.com' -Subject 'Sending the Attachment' -Body 'Connection Status' -Attachments 'C:\folder\file.txt' -SmtpServer smtp.example.com
输出为HTML并包含在电子邮件正文中
$html_table = $dt | sort-object "Status" | ConvertTo-Html -Fragment
Send-MailMessage -From 'user01@example.com' -To 'user02@example.com' -Subject 'Sending the Attachment' -BodyAsHtml $html_table -SmtpServer smtp.example.com