0

我有一个使用 get-eventlog cmdlet 提取的日志文件,这是它的输出示例:

index      Time      EntryType      source           InstanceID          Message

000        xxxx       error          system            1111           host ip: 55.55.55.55
                                                                      class: tropical
                                                                      state: open
                                                                      name:  contractor_0001

000        xxxx       error          system            1111               host ip: 55.55.55.55
                                                                      class: tropical
                                                                      state: open
                                                                      name:  contractor_0002

000        xxxx       error          system            1111               host ip: 55.55.55.55
                                                                      class: tropical
                                                                      state: open
                                                                      name:  contractor_0003

000        xxxx       error          system            1111               host ip: 55.55.55.55
                                                                      class: tropical
                                                                      state: open
                                                                      name:  contractor_0004

基本上我需要文本列表中每个人的姓名,或者只使用 powershell 输出,例如:

contractor_0001

contractor_0002

contractor_0003

contractor_0004

我只需要名字,不需要其他信息。

4

2 回答 2

4

直接从事件日志中提取此信息会更简单:

Get-EventLog "System" -EntryType "Error" -InstanceId 1111 | % {
  $_.Message -replace '[\s\S]*name:\s+(\S+)[\s\S]*','$1'
}

如果您仅限于显示的文本文件,则可以尝试使用Select-String

Select-String 'name:\s+(\S+)' input.txt | % { $_.Matches.Groups[1].Value }
于 2013-07-04T16:06:33.623 回答
0

正如其他人所说,直接从日志文件中提取您想要的信息可能会更好。

但是,要回答您提出的问题,可以这样做:-

(gc ("C:\yourpath\yourfile.txt")) -match 'name:\s' | foreach {$_.Split(":")[1].Replace(' ','')}

如果需要,您可以将其通过管道传输到输出文件以写入文件。

我的测试输出与您的数据:

contractor_0001
contractor_0002
contractor_0003
contractor_0004
于 2013-07-04T18:13:48.710 回答