在Powershell中将特殊格式字符串转换为Hashtable以获取name属性内容
解决方案:解析特殊格式哈希表字符串提取name属性值
方法1:直接解析为PowerShell哈希表(适用于字符串来源可信的场景)
你拿到的字符串本身就是标准的PowerShell哈希表字面量格式,可以直接通过Invoke-Expression解析为原生Hashtable对象,直接读取属性即可:
# 填入你获取到的原始字符串 $rawString = '@{id = 04cc943e-14a8-4bf6-8601-bd6fde3cc229; name = 7.10 10-16 - 6.0 * * * * | 1 0 0 0; privileges =}' # 解析为哈希表对象 $resultHash = Invoke-Expression $rawString # 直接读取name属性值 $nameContent = $resultHash.name # 输出验证结果 $nameContent
执行后可以直接得到你需要的name值:7.10 10-16 - 6.0 * * * * | 1 0 0 0
方法2:正则匹配提取(适用于字符串来源不可信的场景,无代码执行风险)
如果字符串来自不可信外部输入,不想用表达式执行,可以直接用正则匹配提取name字段对应的值:
$rawString = '@{id = 04cc943e-14a8-4bf6-8601-bd6fde3cc229; name = 7.10 10-16 - 6.0 * * * * | 1 0 0 0; privileges =}' if ($rawString -match 'name\s*=\s*(?<nameVal>.*?)\s*(;|})') { $nameContent = $matches.nameVal # 输出验证结果 $nameContent }
说明:为什么ConvertFrom-StringData不生效
ConvertFrom-StringData要求输入为每行一个键=值格式的键值对,不支持分号作为分隔符,也无法识别你当前的PowerShell哈希表字面量语法,因此无法直接使用。
内容的提问来源于stack exchange,提问作者Kevin Torres
相关产品推荐
相关产品推荐

