您現在可能已經得到了您的答案,但是「Imma giv eya more!」 假設我們有這些規定的時間提前:用的正則表達式做事
$Log = "<Stuff><Msg>Number of days since last service =18</Msg></Stuff>"
$StringHint = "Number of days since last service ="
1.您的典型選擇字符串的方法。是的。
Select-String -InputObject $Log -Pattern "(?<=$StringHint)\d{1,}(?=<)" -AllMatches | % {$_.Matches.Groups[0].Value}
2.做劈叉:
((($Log -split $StringHint)[1]) -split "<")[0]
3. XML的方式。這僅適用於XML日誌文件,並且如果沒有其他MSG標記(在這種情況下不太可能)。 我之所以選擇包括這個,是因爲我認爲簡單的類型轉換可以極大地改變我們如何處理數據是很酷的。此外,這是一種非常簡單的方法,可以清除討厭的<的和離開。
$xml = [xml]$Log
$EqualsLoc = $xml.Stuff.Msg.IndexOf("=")
$xml.Stuff.Msg.Substring($EqualsLoc+1)
以上將是更好的,如果你有這樣的日誌文件(是的,我知道這是一個配置文件,而不是一個日誌文件):
$XML = [xml]"<Application>
<version>1.3.53</version>
<AdvancedSettings>
<Network>
<InternetForWeebs>False</InternetForWeebs>
<HackAllTheSystems>True</HackAllTheSystems>
<L33tHandle>Gingervitis</L33tHandle>
</Network>
</AdvancedSettings>
<BasicSettings>
<Controls>
<TheAnyKeyDesignation>0x42</TheAnyKeyDesignation>
<CanHazCheeseburgerMode>True</CanHazCheeseburgerMode>
</Controls>
</BasicSettings>
<Diagnostics>
<DaysSinceLastService>18</DaysSinceLastService>
</Diagnostics>
</Application>"
然後,獲得您需要的條目就像這樣簡單:
$XML.Application.Diagnostics.DaysSinceLastService
他們使用XML結構化的日誌格式非常好,所以您不必使用正則表達式和文本切片來獲取數據。 ':facepalm:' – TessellatingHeckler