捕获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所述,只需以列表格式输出所有属性