PowerShell写入事件日志
可能大家都知道,在PowerShell中使用“Get-Eventlog”命令可以查询Windows系统中的事件日志,如常见的应用程序、系统以及安全日志。但有的时候我们可能又需要将一些关键信息输出到事件日志中,我们就可以使用System.Diagnostics.EventLog类,不仅可以将信息写入到传统事件日志(即系统、应用程序,以及安全)中;还可以创建自己的事件日志,并将日志写入其中。
在写入事件日志之前,必须创建来源,通过来源可以很快的定位该事件的源头,如下图1所示。创建事件来源后,还需要将其与事件日志名称进行关联,然后再写入特定的信息。同一个事件源只能被写入到一种事件日志中,如写入到应用程序日志中后,就不能再被写入到安全或系统日志中了。
使用如下代码可以创建时间来源“powershell_script”,并使之与应用程序(Application)日志关联。
#定义事件源,定义事件日志类别 $Eventlog_source = "powershell_script" $Eventlog_log = "Application" #创建事件日志来源并使之与事件日志类别关联 [system.diagnostics.eventlog]::CreateEventSource($Eventlog_source,$Eventlog_log) |
然后就需要使用“New-Object”命令将信息写入到事件日志中,代码如下:
$Applog = New-Object system.diagnostics.eventlog($Eventlog_log,".") $Applog.source = $Eventlog_source $Event_test = "PS Test for powershell to write." $Applog.writeEntry($Event_test) |
之上输出的事件日志默认级别为“Information”,除此之外还有“Error”、“Warning”、“ SuccessAudit”和“FailureAudit”几种级别。
使用如下代码可以将其设置为警告。
$Applog.writeEntry($Event_test,"Warning") |
如果需要设置事件ID为25,则代码如下:
$Applog.writeEntry($Event_test,"Warning",25) |
例:新建事件日志来源为“ps_script”,新建事件日志类别“MyApp”,将信息输出到MyApp下,日志级别为“警告”,事件ID为32。
完整的代码参考如下:
#定义事件源,定义事件日志类别 $Eventlog_source = "ps_script" $Eventlog_log = "MyApp" #自定义新的事件日志类别
#如果事件来源不存在,则创建该来源和相对应的事件日志。就是在把事件源和事件日志类别相关联,关联后该事件源就不能再写入到其他类别的事件日志类中 #如果已存在,则将其删除 If(![system.diagnostics.eventlog]::sourceExists($Eventlog_source)) { [system.diagnostics.eventlog]::CreateEventSource($Eventlog_source,$Eventlog_log) } Else { Write-Host "$Eventlog_source is already registered with another Eventlog." Exit }
#新建事件日志MyApp,指定事件日志来源为$Eventlog_log,"."代表本机;将变量$ Event_test中的内容写入到MyApp事件日志下 $Applog = New-Object system.diagnostics.eventlog($Eventlog_log,".") #Remove-Eventlog $log #删除已存在的事件日志$log $Applog.source = $Eventlog_source $Event_test = PS Test for powershell to write." $Applog.writeEntry($Event_test,"Warning",32) #此处可以定义为Information,Warning,Error,SuccessAudit,FailureAudit类型,事件ID为32,也可以不设置 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?