You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取System.String中的value与localizedValue属性?

如何从System.String中提取'value'和'localizedValue'属性?

问题场景

给定变量:

$Value = "@{value=Microsoft.Management/getEntities/action; localizedValue=List Entities}"

需要提取出value的值:Microsoft.Management/getEntities/action,以及localizedValue的值:List Entities。

当前实现方式:

($Value | Select-Object @{Name="OperationName"; Expression={ForEach-Object{($_ -split "value=")[1]} | ForEach-Object{($_ -split ";")[0]}}}).OperationName

更顺畅的提取方法

方法1:转换为哈希表(推荐)

PowerShell中@{key=value; key2=value2}格式的字符串可直接通过Invoke-Expression转为哈希表,之后能直接通过键名取值:

# 转换为哈希表
$hashTable = Invoke-Expression $Value
# 提取value
$hashTable.value
# 提取localizedValue
$hashTable.localizedValue

这种方式直观易读,后续取其他属性只需调用对应键名即可。

方法2:正则表达式匹配

若担心字符串来源不安全、不想用Invoke-Expression,可通过正则精准匹配:

# 提取value
$valueMatch = [regex]::Match($Value, 'value=(.*?);').Groups[1].Value
# 提取localizedValue
$localizedMatch = [regex]::Match($Value, 'localizedValue=(.*)$').Groups[1].Value

# 输出结果
$valueMatch
$localizedMatch

value=(.*?);匹配value=后到分号前的内容,localizedValue=(.*)$匹配localizedValue=后到字符串结尾的内容,能准确获取目标值。

方法3:简化拆分逻辑

如果保留拆分思路,可简化现有代码,去掉冗余的ForEach-Object:

# 提取value
($Value -split 'value=|;')[1]
# 提取localizedValue
($Value -split 'localizedValue=')[1]

通过多次拆分直接定位目标内容,比原代码更简洁。

内容的提问来源于stack exchange,提问作者user3022917

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:42:02