2014-07-08 96 views
0

我正在尋找使用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

+0

試試這個: $ account ='登錄帳號:' $ workstation ='源工作站:' $ textBlock | Where-Object {$ _ -like「$ account *」 - 或$ _ -like「$ workstation *」} | Foreach-Object IF($ _ -like「$ account *」){$ _。Trim($ account)}; IF($ _ -like「$ workstation *」){$ _Trim($ workstation)} } 不知道它會工作,由於大小(5GB),可能需要使用流或什麼,我沒有我害怕Powershell的這種體驗。如果它起作用,它會看起來像這樣: svc.sXXX.d.fdb DIXXXEF01 –

回答

0

Get-ContentSelect-String

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

^字符的裝置 '線的開始'。有關更多信息,請參閱PowerShell幫助主題about_Regular_Expressions

+0

你真的可以用get-content處理這些數據量嗎?我經歷過,如果你不能在記事本中打開它(你不能),你不能使用get-content。我想他可能需要使用Streamreader或其他東西。但我想他可以改變嘗試:)如果它不工作,他可以​​修改它與Streamreader一起工作,否則將工作。 –

+0

您可以使用'-ReadCount'參數來更改'Get-Content'的緩衝區大小。這對於大量輸入可能會產生重大影響。 –

+0

我試過了($ feResult.Message -replace「\ n」| Select-String -Pattern'Account:。\ w'),但它仍然只是返回整個字符串而不是「Account:」後的單詞。 –

1

使用獲取內容與-ReadCount和-match和借用比爾的正則表達式):

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

您可以調整,通過改變-ReadCount參數。通常1000-5000的計數產生最佳結果。

您也可以使用Select-String,但它會返回MatchInfo對象,其中包含許多其他數據,您不需要此應用程序。如果你確實需要它,這真是太好了,但是它與Select-String一樣應用相同的正則表達式大約需要4倍的時間,正如它與-match一樣,並且如果你所需要的只是字符串,那麼Select-String就是矯枉過正。 (恕我直言)