我使用powershell来获取以下示例的事件日志消息:
磁盘3已超过容量利用率阈值并已使用 19683350528字节。当超过阈值时,磁盘就有了 剩余容量为87690831360字节。
我需要获得Disknumber 3,Threshold Bytes 19683350528和Remaining Bytes 87690831360。
我知道可以使用select-string -pattern
。但是不知道正则表达式来获取这些值。
Function Get-LogSensemessage
{
Param
(
$LogMessage
)
$DiskNumber= $LogMessage | select-string -pattern <Regular expression>
$Threshold = $LogMessage | select-string -pattern <Regular expression>
$RemainingCapacity = $LogMessage | select-string -pattern <Regular expression>
[pscustomobject]@{
DiskNumber = $disknumber
Threshold = $Threshold
RemainingCapacity = $RemainingCapacity
}
}
有人可以帮我用正则表达式获取详细信息吗?
答案 0 :(得分:3)
根据评论,您可以使用正则表达式模式\d+
来匹配字符串中数字的任何内容。我们可以使用-AllMatches
上的Select-String
开关在一次点击中获得所有匹配。
以下是我建议您将其纳入您的功能的方法:
Function Get-LogSensemessage
{
Param(
[string]$LogMessage
)
$LogValues = ($LogMessage | Select-String -Pattern '\d+' -AllMatches).Matches.Value
[pscustomobject]@{
DiskNumber = $LogValues[0]
Threshold = $LogValues[1]
RemainingCapacity = $LogValues[2]
}
}
$LogValues
成为一个字符串数组,因此我们使用从[0]
开始的数组索引来获取每个匹配的值。
答案 1 :(得分:1)
您可以使用简单的[0-9]+
模式
答案 2 :(得分:1)
使用-AllMatches
参数,仅运行一次Select-String
并从结果中指定值:
$results = $text | Select-String -Pattern "\d+" -AllMatches
$FirstNum = $results.Matches[0].value
$SecondNum = $results.Matches[1].value