2013-09-25 21 views
0

我想拉日期和時間從以下類似的字符串:選擇串到從日誌文件項搶時間格式

<![LOG[Inventory: Successfully sent report. Destination:mp:MP_SinvEndpoint, ID: {CFF6CD46-AEC7-4BFB-8B09-E7507346AAF6}, Timeout: 80640 minutes MsgMode: Signed, Not Encrypted]LOG]!><time="14:30:50.088+300" date="09-24-2013" component="InventoryAgent" context="" type="1" thread="4448" file="agentstate.cpp:2038"> 

我使用這些聲明:

$Sinv = Select-String $env:windir\syswow64\ccm\logs\inventoryagent.log -pattern "SinvEndpoint" -SimpleMatch | select-object -last 1 

$Hinv = Select-String $env:windir\syswow64\ccm\logs\inventoryagent.log -pattern "HinvEndpoint" -SimpleMatch | select-object -last 1 

$DDR = Select-String $env:windir\syswow64\ccm\logs\inventoryagent.log -pattern "DdrEndpoint" -SimpleMatch | select-object -last 1 

我我試圖確定它們的最後一個條目的發生順序(基於它的字符串中的時間戳),然後我將相應地編寫代碼。

+0

字符串沒有拷貝過來:<![日誌[清單:成功發送報告。目的地:mp:MP_SinvEndpoint,ID:{CFF6CD46-AEC7-4BFB-8B09-E7507346AAF6},超時:80640分鐘MsgMode:簽名,未加密] LOG]!>

回答

0

您應該能夠像這樣的東西來提取日期和時間信息(假設你的PowerShell v3一起安裝的):

$file = "$env:windir\syswow64\ccm\logs\inventoryagent.log" 
$pattern = 'SinvEndpoint.*<time="(.*?)" date="(.*?)"' 

$Sinv = Select-String $pattern $file | select -Last 1 | % { 
      $_.Matches.Groups[2].Value + ' ' + $_.Matches.Groups[1].Value 
     } 
+0

非常感謝!我希望我明天有機會嘗試這一點,看起來很有希望! – 1BilliumDollars

+0

謝謝!這實際上是根據請求抓取最後一個入口類型的入口!再一次,當我嘗試輸出這些時,我是全新的。由於$模式是靜態的,我假設我需要爲每個字符串模式創建2個額外的,即HinvEndpoint,DDREndpoint?那麼我的最後一個問題是,從每個返回的值中,下一步是找到一種方法來查找三種日期模式的最新值,比如今天的日期?再次,非常感謝! – 1BilliumDollars

+0

是的,因爲您需要每個關鍵字的最後一個日期,所以您需要另外兩個關鍵字的其他表達式。要獲取三個值的最新日期,將字符串轉換爲實際日期,對它們進行「排序」(默認順序爲升序),並從結果中選擇最後一項。 –