2014-05-23 32 views
1

我想將下列行分割爲對象。 該行來自我們的Exchange Incomming SMTP日誌文件。正則表達式:其他進程的篩選字符串

2014-05-23T08:38:58.869Z,Exchangeserver\External Relay,08D1437A9AEFF27B,5,192.168.100.211:25,192.168.100.211:46964,<,MAIL FROM: <[email protected]> 

是否可以使用正則表達式來做到這一點?

所需的輸出:

Time: 08:38:58 
Connector: Exchangeserver\External Relay 
ExchangeID:08D1437A9AEFF27B 
MailFrom:[email protected] 

我很抱歉,不過正則表達式是沉重了我的大腦.. :(

非常感謝

回答

2

你只需要的正則表達式!電子郵件地址,您可以拆分列,以及,-split :)

$arr = @("2014-05-23T08:38:58.869Z,Exchangeserver\External Relay,08D1437A9AEFF27B,5,192.168.100.211:25,192.168.100.211:46964,<,MAIL FROM: <[email protected]> " -split ",") 

$ht = [ordered]@{} 
$ht["Time"] = $arr[0] 
$ht["Connector"] = $arr[1] 
$ht["ExchangeID"] = $arr[2] 
$ht["MailFrom"] = $($arr[7] -match "([^[email protected]][email protected][^>]+)" | Out-Null; $matches[1]) 

$ht 

然後,您可以從哈希表格式化結果以獲得所需的輸出。

+0

好..我會用-split在更多的內容!但Exchange 2010與PowerShell V3不兼容,因此[ordered]不可用。不知道是否有必要,但第二行(日期時間)不適用於我們的2008R2服務器。在Windows 8.0上它可以工作,但輸出是:名稱值 ---- ----- 時間12:00:00 – Daniel4711

+0

@ Daniel4711有人編輯我的答案,我沒有施放時間。如果你想提取時間,找到適當的格式化字符串,或只是使用正則表達式。從[有序]開始:沒有必要。哈希表不能保證項目的保留順序,但這不是問題,無論如何,您可能會通過鍵明確引用值。 –

2
$line = 
'2014-05-23T08:38:58.869Z,Exchangeserver\External Relay,08D1437A9AEFF27B,5,192.168.100.211:25,192.168.100.211:46964,<,MAIL FROM: <[email protected]>' 

$regex = '^[0-9-]+T([0-9:]+).+?,(.+?),(.+?),.+?MAIL FROM: <.*?(\[email protected]\w+?\.\w+)>' 

$line | 
New-PSObjectFromMatches -pattern $regex -Property $null,Time,Connector,ExchangeID,MailFrom | 
format-list 


Time  : 08:38:58 
Connector : Exchangeserver\External Relay 
ExchangeID : 08D1437A9AEFF27B 
MailFrom : [email protected] 

你可以得到新PSObjectFromMatches功能在這裏:

http://gallery.technet.microsoft.com/scriptcenter/New-PSObjectFromMatches-87d8ce87

+0

+1大功能!您需要時總是重新創建這些代碼塊中的一個,但永遠不要記住保存。最後得到它保存:D –

+1

謝謝(嘗試-debug)! – mjolinor

+0

感謝提示,但修改$正則表達式是困難的東西。 - 分割不是如此強大,但易於使用! – Daniel4711

相關問題