【发布时间】:2013-11-25 21:57:45
【问题描述】:
所以我正在尝试编写一个 powershell 脚本,该脚本将遍历一个充满 .evtx 文件的文件夹,通过 syslog 发送每个文件,然后将“.done”附加到 .evtx 文件的文件名之后。
问题是,我不太确定如何在 Foreach-Object 循环中引用当前的日志文件。
希望下面的代码能解释我的困境。
# begin foreach loop
Get-ChildItem $evtxfolder -Filter *.evtx | `
Foreach-Object {
$LPARGS = ("-i:evt", "-o:syslog", "SELECT STRCAT(`' evt-Time: `', TO_STRING(TimeGenerated, `'dd/MM/yyyy, hh:mm:ss`')),EventID,SourceName,ComputerName,Message INTO $SERVER FROM $CURRENTOBJECT") #obviously, this won't work.
$LOGPARSER = "C:\Program Files (x86)\Logparser 2.2\logparser.exe"
$LP = Start-Process -FilePath $LOGPARSER -ArgumentList $LPARGS -Wait -Passthru -NoNewWindow
$LP.WaitForExit() # wait for logs to finish
如果您查看 $LPARGS,您会看到我放置了 $SERVER 和 $CURRENTOBJECT。显然,我现在的方式行不通,但显然,那行不通。所以基本上,我试图将变量 $SERVER(作为参数传入)放入 logparser 的参数中,并引用它正在处理的任何当前事件日志放入“FROM”语句,以便它知道可以工作一次处理一个 .evtx 文件。这样做的正确方法是什么?
INTO FROM 语句示例:
..snippet..
SourceName,ComputerName,Message INTO @192.168.56.30 FROM 'C:\Eventlogs\20131125.evtx'"
当然,“C:\Eventlogs\20131125.evtx”会随着目录的内容而改变。
【问题讨论】:
-
我们的powershell版本是2。
-
最后的ps1是哪个?
标签: powershell for-loop logparser