从文本块中提取单个单词

时间:2014-07-08 14:50:08

标签: powershell

我希望使用powershell从文本块中恢复主机名。该块如下:

The computer attempted to validate the credentials for an account.
Authentication Package: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
Logon Account:  svc.sXXX.d.fdb
Source Workstation: DIXXXEF01
Error Code: 0x0

正如您所看到的那样,它是一个多行文本块。目前我正在努力减少大约5演出安全日志的漏洞。我希望使用powershell regrex命令或类似的东西来恢复登录帐户和源工作站。

有什么想法吗?感谢。

ISJ

2 个答案:

答案 0 :(得分:1)

将Get-Content与-ReadCount和-match一起使用并借用Bill的正则表达式:

Get-Content $file -ReadCount 1000 |
 foreach { $_ -match '^Logon Account|^Source workstation' } |
 Add-Content $newfile

您可以通过更改-ReadCount参数来调整它。通常,1000-5000的计数产生最佳结果。

您也可以使用Select-String,但它会返回MatchInfo对象,其中包含此应用程序不需要的许多其他数据。如果你确实需要它,那就太棒了,但是使用Select-String和使用-match一样,使用相同的正则表达需要大约4倍,如果你需要的只是字符串,那么Select-String就是矫枉过正。 (IMHO)

答案 1 :(得分:0)

Get-ContentSelect-String

get-content logfile.txt | select-string '^Logon Account|^Source workstation'

^字符表示“行首”。有关详细信息,请参阅PowerShell帮助主题about_Regular_Expressions