电源外壳。编写事件日志

时间:2018-09-27 12:09:32

标签: powershell scripting ps

我有一个脚本,可以将某些文件从文件夹移动到temp文件夹,将其存档并最后清理temp文件夹。

我希望我的脚本也将相关信息写入胜利事件日志中。

这是我的脚本:

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\*

我想添加代码,将任何错误的事件写入胜利事件日志。

1 个答案:

答案 0 :(得分:0)

根据注释,您可以使用Write-EventLog写入Windows事件日志。如果要编写在这些命令期间发生的任何错误,则可能要使用Try..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,该异常需要终止(与非终止)。您可以通过将cmdlet -ErrorAction设置为Stop来强制cmdlet终止错误,也可以通过$ErrorActionPreference变量来全局执行此操作。

在catch块中,错误保存在特殊变量$_中。因此,我们可以使用Write-Error仍将其写到控制台(如果需要),然后使用Write-EventLog将其写入事件日志。

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