2016-12-23 112 views
-4

我需要一些正则表达式帮助从日志文件中解析出PowerShell对象。如何使用PowerShell解析此xml?

寻找使这些注释属性,PowerShell的对象:

ACVS_D = Date 
ACVS_TI = Info 
ACVS_C = Name 
ACVS_M = Message 

任何帮助将不胜感激!谢谢!

在.log文件的XML实例:

<ACVS_T> 
    <ACVS_D>12/23/2016 03:25:14.324</ACVS_D> 
    <ACVS_TI>db818c30-cdb9-4482-9b51-8f6aad8e914c,C?Cure Reports Server Component,svc-ccureMAS</ACVS_TI> 
    <ACVS_C>CrossFireWindowsService</ACVS_C> 
    <ACVS_S>SoftwareHouse.CrossFire.Server.Shared.CrossFireWindowsService.TraceMessage(String methodName, String message) 
</ACVS_S> 
    <ACVS_M> 
     CrossFireReportServer.ReconnectToServer() connected at 12/23/2016 3:25:14 AM 
    </ACVS_M> 
<ACVS_ST> 

    </ACVS_ST> 
</ACVS_T> 
<ACVS_T> 
    <ACVS_D>12/23/2016 03:25:14.324</ACVS_D> 
    <ACVS_TI>6af6dfab-c890-42c5-acd2-a9520e9742da,C?Cure Reports Server Component,svc-ccureMAS</ACVS_TI> 
    <ACVS_C>CrossFireWindowsService</ACVS_C> 
    <ACVS_S>SoftwareHouse.CrossFire.Server.Shared.CrossFireWindowsService.TraceMessage(String methodName, String message) 
</ACVS_S> 
    <ACVS_M> 
     CrossFireReportServer.ReconnectToServer() connected at 12/23/2016 3:25:14 AM 
    </ACVS_M> 
<ACVS_ST> 

    </ACVS_ST> 
</ACVS_T> 
+3

不要用正则表达式。 – ndn

+2

'Select-Xml -Path Log.xml -XPath'RootNodeHere/ACVS_T'| ForEach {$ _。Node ...}' – TessellatingHeckler

回答

0

我不会建议使用正则表达式,除非它是一个很大文件。 您需要像这样的正则表达式搜索字符串(?<=<ACVS_T>)((.|\n)*)(?=<\/ACVS_T>) 请针对您需要的每个部分进行调整。

您可以添加根节点并将其解释为XML文件。 如下例:

$File = "PathToFile" 

$XML = [XML]("<Root>" + (Get-Content -Path $File) + "</Root>") 

$XML.Root.ACVS_T | ForEach-Object { 
    $Obj = '' | Select-Object -Property ACVS_D, ACVS_TI, ACVS_C, ACVS_S, ACVS_M, ACVS_ST 
    $Obj.ACVS_D = $_.ACVS_D 
    $Obj.ACVS_ST = $_.ACVS_ST 
    $Obj.ACVS_C = $_.ACVS_C 
    $Obj.ACVS_S = $_.ACVS_S 
    $Obj.ACVS_M = $_.ACVS_M 
    $Obj.ACVS_ST = $_.ACVS_ST 
    $Obj 
} 
+0

非常感谢! – user3839452

+0

你能接受这个答案吗? –