捕获powershell脚本和电子邮件中的所有错误
我有一个脚本,有很多部分,比如下面的,每晚运行。我想让它通过电子邮件发送任何/所有错误,以便提醒我并查看错误。我在第一步中遇到了问题,那就是捕获所有/任何错误。。。我假设一个文件,我可以通过电子邮件发送或捕获到某种缓冲区,然后我可以通过电子邮件发送,这样会更好。任何对这两个步骤的帮助都将不胜感激,尤其是捕获部分捕获powershell脚本和电子邮件中的所有错误,powershell,Powershell,我有一个脚本,有很多部分,比如下面的,每晚运行。我想让它通过电子邮件发送任何/所有错误,以便提醒我并查看错误。我在第一步中遇到了问题,那就是捕获所有/任何错误。。。我假设一个文件,我可以通过电子邮件发送或捕获到某种缓冲区,然后我可以通过电子邮件发送,这样会更好。任何对这两个步骤的帮助都将不胜感激,尤其是捕获部分 #---- Set Exchange archive licnse for all users with an Office license ---- Get-MsolUser -ALL
#---- Set Exchange archive licnse for all users with an Office license ----
Get-MsolUser -ALL | where {($_.Licenses.accountskuID -contains
"Tennant:STANDARDWOFFPACK") -and ($_.Licenses.accountskuID -notcontains
"Tennant:EXCHANGEARCHIVE_ADDON")} | Set-MsolUserLicense -AddLicenses
"Tennant:EXCHANGEARCHIVE_ADDON"
#-------------------------- ENABLE LITIGATION HOLD ----------------------
Get-Mailbox -ResultSize Unlimited -Filter {RecipientTypeDetails -eq
"UserMailbox"} | Set-Mailbox -LitigationHoldEnabled $true -
LitigationHoldDuration 2555
应在
$Error
变量中自动捕获错误消息;使用$error[0]
查看最新消息
然后,您可以将其与Send-MailMessage
Cmdlet一起用作电子邮件的正文
例如:
$body = "";
foreach ($e in $error) {
$body += "<hr /><pre>" + $e.ToString() + "</pre><hr />";
}
Send-MailMessage -BodyAsHtml -Body $body -SmtpServer "smtp_server_address" -From "alert@somedomain.tld" -To "your-email@somedomain.tld" -Subject "PowerShell Error Report"
$body=”“;
foreach($e in$error){
$body+=“
”+$e.ToString()+“
”;
}
发送邮件-BodyAsHtml-Body$Body-SmtpServer“smtp\u服务器\u地址”-发件人alert@somedomain.tld“-到”你的-email@somedomain.tld-主题“PowerShell错误报告”
在您的代码中,您需要捕获错误以记录它们,甚至写入您自己的事件日志
。。。或者编写自己的日志函数
例如:
或者,从使用PowerShell日志开始
例如:
启用登录组策略
使用PowerShell成绩单
例如:
然后将这些内容存储在一个中心共享中,您可以将其作为附件拉入电子邮件。您是否检查了捕获部分的开始转录本?很酷。非常感谢。日志记录结果仅显示部分错误,如“超出许可证”,但不显示其他详细信息,如使用的命令“Set-MsolUserLicense”。有没有办法获得更多的输出,以便我更好地了解scirpt的哪一部分可能出现故障?默认的$error输出确实显示了所有可能出现的错误。$error default输出也仅列出部分错误数据。要获取所有$error数据,请执行以下操作$错误|格式列表-强制。尽管如此,您确实需要如上所述启用脚本日志记录。错误将出现在多个地方,$Error、PoSH成绩单和Windows事件日志中-应用程序、安全性和Windows PowerShell(它是应用程序和服务日志下的一个节点)。$Error变量只是对象的集合。我的示例只输出我使用的
.ToString()
的简单消息。您可以从特定属性获取更详细的信息,或者如@postanote所述,只需以列表格式输出所有属性