Powershell 脚本查找任务调度程序问题

Powershell 脚本查找任务调度程序问题

我正在尝试编写一个 powershell 脚本来查看服务器的特定任务的任务调度程序日志,我想知道是否存在任何错误或任何异常情况。

我通常会看到下面的事件 ID,因此,如果列表中没有出现某些事件(意味着发生了其他事情需要我查看),我基本上会发送一封电子邮件:

107 - 调度程序上触发的任务 100 - 任务已启动 129 - 创建任务流程 100 - 任务已启动 200 - 操作已启动 201 - 操作已完成 102 - 任务已完成

因此,我想在脑海中寻找不属于上述任何一个的事件 ID,以查找名为“Batch001”的任务。

如果出现另一个代码,请给我发送电子邮件。我的电子邮件 PS 代码运行正常,但我需要弄清楚电子邮件代码的搜索、过滤和触发。

以下是我所拥有的。它本质上是查看日志并将相应事件写入(附加)到文本文件 - 类似于审计日志。如果连接服务器时出现问题,它会将消息写入错误文本文件并通过 Office 365 将该内容通过电子邮件发送给我。

我无法让这个东西在收到警告时发送电子邮件。我尝试通过启动批处理作业来测试这一点,然后在它运行时让计划尝试启动另一个。我收到一条警告,说它无法启动任务,因为有另一个实例正在运行 - 代码 322。此事件可能是因为批处理运行时间过长,我希望捕获此事件并通过电子邮件发送。

本质上,任何异常情况,我都希望收到电子邮件。如果我无法弄清楚警告,我就无法弄清楚如何将所有内容写入文本文件,而是创建一个 case/try/catch 来忽略电子邮件开头的代码。

我有的脚本:

启动脚本 -Path “C:\BatchLogs\BatchTranscripts.txt” $task_name = “Batch001” $file = “C:\BatchLogs\Batch001.txt” $file_path = 测试路径 $file $pc = $_

#如果尚未创建文件,则创建它 如果 ($file_path -ne $true){ New-Item C:\BatchLogs\Batch001.txt } #过滤 xml 以拉取任务计划程序事件 尝试 {invoke-command -ComputerName "servername.domain" -ErrorAction Stop -ScriptBlock { 尝试 { $events = @( Get-WinEvent -FilterXml @' *[EventData/Data[@Name='TaskName']='\Batch001'] and *[System[TimeCreated[timediff(@SystemTime) <= 86400000]]] '@ -ErrorAction Stop ) } catch { Write-Warning -Message "无法查询 $($env:computername) 因为 $($_.Exception.Message)" *> "C:\BatchLogs\errors.txt" Get-Content -Path "C:\BatchLogs\errors.txt" |添加内容-路径“C:\BatchLogs\Batch001.txt”

 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
 $EmailTo = "[email protected]"
 $EmailFrom = "[email protected]"
 $Subject = "Batch001 Failure"
 $Body = Get-Content -Path "C:\BatchLogs\errors.txt"
 $SMTPServer = "smtp.office365.com"
 $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
 $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
 $SMTPClient.EnableSsl = $true 
 $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("[email protected]", "Password123");
 $SMTPClient.Send($SMTPMessage)

} if ($events) { $events | 选择 MachineName、TimeCreated、Id、TaskDisplayName | Out-File -Append C:\BatchLogs\Batch001.txt } } # 脚本块结束 } catch { Write-Warning -Message “无法联系 $pc,因为 $($_.Exception.Message)” *> “C:\BatchLogs\errors.txt” Get-Content -Path “C:\BatchLogs\errors.txt” | Add-Content -Path “C:\BatchLogs\Batch001.txt”

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $EmailTo = "[电子邮件保护]“$电子邮件来自 =”[电子邮件保护]“$Subject = “Batch001 失败”$Body = Get-Content -Path “C:\BatchLogs\errors.txt”$SMTPServer = “smtp.office365.com”$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)$SMTPClient.EnableSsl = $true$SMTPClient.Credentials = New-Object System.Net.NetworkCredential(”[电子邮件保护]", "密码123");$SMTPClient.Send($SMTPMessage)

}

停止转录

相关内容