所以我运行这个命令
$driverRAIDv = $data|where-object{$_.Name -eq "$serverName" -and ($_.Description1 -match "hpsa")} | select -ExpandProperty version它返回这个值:
HP HPSA Driver (v 5.0.0-28OEM)
我想接受这个值/变量并解析它,这样我就只有5.0.0-28OEM了
发布于 2014-06-04 15:19:54
试试这个,匹配(和)括号之间的任何内容:
编辑:..and移除v后面的空格:
$driverRAIDv = $data|where-object{$_.Name -eq "$serverName" -and ($_.Description1 -match "hpsa")} | select -ExpandProperty version
$regex = "(?<=\().*(?=\))"
[regex]::matches($driverRAIDv,$regex).Value -replace "v "返回:
5.0.0-28OEM或者您可以使用下面的正则表达式,它将匹配(v和)之间的任何内容
$regex="(?<=\(v\s).*(?=\))"发布于 2014-06-04 14:58:31
试试看。基本上,我们正在创建一个“计算属性”,其中包含一个表达式,用于解析所需值的部分。
$driverRAIDv = $data|where-object{$_.Name -eq "$serverName" -and ($_.Description1 -match "hpsa")} | select -Property @{ Label = 'Version'; Expression = { [void]($_ -match ('v\s(.*?)\)')); $matches[1]; }; };我使用以下代码对此进行了测试:
@{ Version = 'HP HPSA Driver (v 5.0.0-28OEM)'} | select -Property @{ Label = 'Version'; Expression = { [void]($_ -match ('v\s(.*?)\)')); $matches[1]; }; };如果您签出Select-Object命令的“帮助”,您将看到可以通过PowerShell表达式创建计算的属性,这基本上可以修改属性值。为此,创建一个包含两个项的Hashtable:Label和Expression。可以简单地将Label设置为您正在修改的相同的属性值。Expression是一个PowerShell ScriptBlock,它执行某种类型的操作,并返回结果。在上面给出的示例中,我们对Version属性运行一个正则表达式,并将其作为结果返回。

发布于 2014-06-04 14:59:23
你有很多方法去做这件事,这取决于你的需求和你将得到什么。
一种方法可以是使用替换操作符。说,你有
$driverRAIDv="HP HPSA Driver (v 5.0.0-28OEM)"
$driverRAIDv -replace 'HP HPSA Driver \(v ','' -replace '\)',''会给你5.0.0-28OEM
同一行:
$driverRAIDv = ($data|where-object{$_.Name -eq "$serverName" -and ($_.Description1 -match "hpsa")} | select -ExpandProperty version) -replace 'HP HPSA Driver \(v ','' -replace '\)',''https://stackoverflow.com/questions/24040759
复制相似问题