【问题标题】:Logparser and powershell with multiple logfiles in a foreach-object loop在 foreach-object 循环中具有多个日志文件的 Logparser 和 powershell
【发布时间】: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


【解决方案1】:

如果$server 在您上面的脚本之外定义,它将在您的$LPARGS 字符串中可用。至于 $CURRENTOBJECT,那就是$_。在这种情况下,它将是一个 FileInfo 对象。您可能需要 Name 属性,例如$($_.Name).

【讨论】:

  • 好吧,那么我应该将 $SERVER 更改为 $($_.SERVER)?在 $LPARGS 内?这仍然留下了如何处理 $CURRENTOBJECT 的问题
  • $_ 代表您使用Get-ChildItem $evtxfolder -Filter *.evtx 检索并发送到管道的每个文件。对于$SERVER,您需要做的就是在迭代 evtx 文件的脚本之前设置它,例如$SERVER = 'servername'.
  • 也许您应该写出一个示例,说明您希望 INTO ??? FROM ???? 在为其中一个文件扩展变量之后的样子。
  • EVTX 的完整路径很简单 - $($_.Fullname)。我无法告诉你 $SERVER 使用什么,因为我从未使用过 LogParser,但我可以告诉你它不会是 $($_.Server)。 FileInfo 对象上没有 Server 属性。
  • 那么你需要做的就是引用双引号字符串“... ${SERVER} ...”中的变量。
猜你喜欢
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 2021-12-02
  • 2021-12-13
  • 1970-01-01
  • 2019-09-03
  • 2011-12-09
相关资源
最近更新 更多