【问题标题】:Analyse Windows event log entries using PowerShell and regular expressions使用 PowerShell 和正则表达式分析 Windows 事件日志条目
【发布时间】:2010-11-08 07:58:25
【问题描述】:

我目前正在编写一个 PowerShell 脚本,通过读取我们 VPN 服务器的事件日志来分析 VPN 流量。

我正在使用 WMI 来检索相关的事件条目,并使用正则表达式来提取用户名、流量等信息。事件消息显然包含换行符,我似乎无法通过我的表达式进行匹配.

例子:

用户 MYDOMAIN\CHARLY 于 2009 年 7 月 4 日 23:19 连接到端口 VPN3-18 并于 2009 年 7 月 5 日 00:03。用户活跃了 43 分 55 秒。 886949 字节 已发送并收到 195113 个字节。这 断开连接的原因是用户请求。

这是我的表情:

The user (?<user>\w*\\\w*) connected on port (?<port>\w*-\w*) on (?<connectdate>\w*.\w*.\w*) at (?<connecttime>\w*:\w*) and disconnected on'n(?<disconnectdate>\w*.\w*.\w*) at (?<disconnecttime>\w*:\w*).  The user was active for (?<activeminutes>\w*) minutes (?<activeseconds>\w*) seconds.  (?<bytessent>\w*) bytes'nwere sent and (?<bytesreceived>\w*) bytes were received. The'nreason for disconnecting was user request.

现在我不知道还能尝试什么,因此非常感谢任何帮助。

【问题讨论】:

    标签: regex powershell


    【解决方案1】:

    换行符匹配 \s(空白)。尝试测试你的正则表达式并构建它。

    有关正则表达式的帮助,请尝试

    get-help about_regular_expression
    

    【讨论】:

      【解决方案2】:

      注意,为了最大限度地控制正则表达式,请实例化一个 [regex](System.Text.RegularExpressions.Regex 的 PSH 快捷方式)。这使您可以访问RegexOptions 枚举,以提供比-match 更多的控制权。

      例如

      $r1 = [regex]"Foo\s*bar"
      $r2 = New-Object "System.Text.RegularExpressions.Regex" "Foo\s*bar",[System.Text.RegularExpressions.RegexOptions]::IgnorePatternWhitespace
      

      (在最后一种情况下,该选项允许忽略文字空格(包括换行符),这在构建复杂表达式时很有用。)

      This page 提供了支持的字符类的详细信息:\s 匹配:

      匹配任何空白字符。相当于转义序列和Unicode通用类别[\f\n\r\t\v\x85\p{Z}]

      【讨论】:

      • 已解决! :-) \s* 成功了。非常感谢本杰明和理查德
      猜你喜欢
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2016-02-19
      • 2010-09-07
      相关资源
      最近更新 更多