我有一个脚本,可以将某些文件从文件夹移动到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\*
我想添加代码,将任何错误的事件写入胜利事件日志。
答案 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必须是有效条目类型(信息,警告,错误)之一。