查看Windows安全事件日志的最小F#示例
这不会将任何事件打印到控制台(在“侦听新的安全事件…”之后),但当我启动事件查看器应用程序时,它会显示即将到来的安全事件。想想我可能做错了什么查看Windows安全事件日志的最小F#示例,f#,event-log,F#,Event Log,这不会将任何事件打印到控制台(在“侦听新的安全事件…”之后),但当我启动事件查看器应用程序时,它会显示即将到来的安全事件。想想我可能做错了什么 open System open System.Diagnostics open System.Security.Principal open System.Threading let logName = "security" let DumpEventLog desc = use log = new System.Diagn
open System
open System.Diagnostics
open System.Security.Principal
open System.Threading
let logName = "security"
let DumpEventLog desc =
use log = new System.Diagnostics.EventLog (logName, desc)
log.EnableRaisingEvents <- true;
printfn "listening for new security events...";
log.EntryWritten.Add (fun ent ->
let ent = ent.Entry in
printfn "entry written: %d %s %s" ent.InstanceId (ent.TimeGenerated.ToString())
ent.Message);
[<EntryPoint>]
let main _argv =
let isAdministrator =
let id = WindowsIdentity.GetCurrent () in
let p = WindowsPrincipal id in
p.IsInRole WindowsBuiltInRole.Administrator
in
let () =
if not isAdministrator
then printfn "need admin privs to run!"
else DumpEventLog "."
in
while true do
Thread.Sleep 5000
done;
0
开放系统
开放系统诊断
开放系统.Security.Principal
开放系统。线程
让logName=“安全性”
让DumpEventLog描述=
使用日志=new System.Diagnostics.EventLog(日志名,desc)
log.EnableRaisingEvents
让ent=ent.Entry输入
printfn“写入的条目:%d%s%s”ent.InstanceId(ent.TimeGenerated.ToString())
(信息);
[]
让main_argv=
让我来做行政官=
让id=WindowsIdentity.GetCurrent()进入
让p=WindowsPrincipal id进入
p、 IsInRole WindowsBuiltInRole.Administrator
在里面
让()=
如果不是我的管理者
然后打印fn“需要管理员权限才能运行!”
else DumpEventLog“
在里面
尽管如此
线程。睡眠5000
完成;
0
我认为这与程序的编写方式有关。例如,当DumpEventLog()退出时,日志被释放,但程序会休眠五秒钟。我看不出在那种状态下它怎么能捕捉到事件
这对我很有用:
open System.Diagnostics
open System.Threading
[<EntryPoint>]
let main _argv =
use log = new EventLog ("security", ".")
log.EnableRaisingEvents <- true
printfn "listening for new security events..."
log.EntryWritten.Add (fun e ->
printfn "Entry written: %d %O %s" e.Entry.InstanceId e.Entry.TimeGenerated e.Entry.Message)
Thread.Sleep Timeout.Infinite
0
开放式系统诊断
开放系统。线程
[]
让main_argv=
使用日志=新事件日志(“安全性”、“安全性”)
log.EnableRaisingEvents
printfn“写入的条目:%d%O%s”e.Entry.InstanceId e.Entry.TimeGenerated e.Entry.Message)
线程。睡眠超时。无限
0