2015-03-19 81 views
0
$version = Get-EventLog 
       -Newest 1 
       -ComputerName $systemnummer 'Symantec Endpoint Protection Client' 
       -Message "*Version*" | Select message 
[string]$version = $version 
$version = $version.Split(":") 

获取事件日志条目$版本包含以下字符串后: "@{Message=New virus definition file loaded. Version: 150317001.}"PowerShell的string.split

我怎么可以分割字符串,仅保留号码“150317001”?

回答

0

这应该工作:

$version = Get-EventLog -Newest 1 -ComputerName $systemnummer 'Symantec Endpoint Protection Client' -Message "*Version*" | Select message 
$ver = $version.message -replace ".*(\d+).*", "`$1" 
+0

我试过,但我很抱歉...您的$版本似乎是空 – 2015-03-19 12:18:56

+0

不要投给'[字符串]'做我添加的代码之前,见好就收'$ version' as它是从'Get-Eventlog'返回的时候' – arco444 2015-03-19 12:28:39

+0

考虑使用'Select -expand message'来返回字符串。删除一个障碍。 – Matt 2015-03-19 12:33:45

0

只需使用正则表达式这一点。为你的例子这里代码:

$content = '@{Message=New virus definition file loaded. Version: 150317001.}'; 
$regex = 'version\s*:\s*(\d+)'; 
$resultingMatches = [Regex]::Matches($content, $regex, "IgnoreCase") 
$version = $resultingMatches[0].Groups[1].Value 
1

的问题是,你的消息字符串仍然是对象的属性(消息),所以你需要通过属性名称引用它:

$version = Get-EventLog 
       -Newest 1 
       -ComputerName $systemnummer 'Symantec Endpoint Protection Client' 
       -Message "*Version*" | Select message 
$version = $version.Message.Split(":")[1] 

或者使用Select -ExpandProperty得到公正的价值:

$version = Get-EventLog 
       -Newest 1 
       -ComputerName $systemnummer 'Symantec Endpoint Protection Client' 
       -Message "*Version*" | Select -ExpandProperty message 
$version = $version.Split(":")[1]