首页 > 解决方案 > 电源外壳。写事件日志

问题描述

我有一个脚本,它将一些文件从文件夹移动到临时文件夹,将它们存档并在最后清理临时文件夹。

我希望我的脚本也能在 win-event 日志中写入有关它的信息。

这是我的脚本:

Get-ChildItem C:\Users\Administrator\Desktop\test1\ | Where-Object {$_.LastWriteTime -lt "09/24/2018 09:00 PM"} | Move-Item -Destination C:\Users\Administrator\Desktop\data\
Compress-Archive -path C:\Users\Administrator\Desktop\data\ -CompressionLevel Optimal -DestinationPath C:\Users\Administrator\Desktop\data1\test.zip
Remove-Item C:\Users\Administrator\Desktop\data\*

我想添加代码,它将任何错误的事件写入 win-event 日志。

标签: powershellscriptingps

解决方案


根据评论,您可以使用Write-EventLog写入 Windows 事件日志。如果您想编写在这些命令期间发生的任何错误,那么您可能希望使用 aTry..Catch来捕获任何错误并处理它们:

Try {
    $PrevEAP = $ErrorActionPreference
    $ErrorActionPreference = 'Stop'

    Get-ChildItem C:\Users\Administrator\Desktop\test1\ | Where-Object {$_.LastWriteTime -lt "09/24/2018 09:00 PM"} | Move-Item -Destination C:\Users\Administrator\Desktop\data\
    Compress-Archive -path C:\Users\Administrator\Desktop\data\ -CompressionLevel Optimal -DestinationPath C:\Users\Administrator\Desktop\data1\test.zip
    Remove-Item C:\Users\Administrator\Desktop\data\* 
Catch {
    Write-Error $_

    $ErrorEvent = @{
        LogName = 'Application'
        Source = 'YourScript'
        EventID = 123
        EntryType = 'Information'
        Message = $_
    }
    Write-EventLog @ErrorEvent
}
Finally {
    $ErrorActionPreference = $PrevEAP
}

为了使异常(错误)触发Try..Catch异常,需要终止(与非终止相比)。-ErrorAction您可以通过将 cmdlet 设置为来强制 cmdlet 执行终止错误Stop,或者您可以通过$ErrorActionPreference变量全局执行此操作。

在 catch 块中,错误保存在特殊变量中:$_. 所以我们Write-Error仍然可以将其写入控制台(如果您愿意),然后我们将Write-EventLog其写入事件日志。

根据您的需要自定义 LogName、Source、EventID、Information 等。注意 LogName 需要是现有日志之一,条目类型需要是有效条目类型之一(信息、警告、错误)。


推荐阅读