PowerShell中REG_MULTI_SZ转指定格式字符串的技术求助
REG_MULTI_SZ类型注册表值转换为PowerShell数组的问题
我正在将Roger Zanders开发的Reg2PS工具改编为适配Intune的PowerShell脚本,用于便捷配置注册表。参考原工具的C#代码后,发现它处理REG_MULTI_SZ类型的逻辑更为完善。
通过reg.exe导出的REG_MULTI_SZ类型注册表值示例及预处理代码如下:
$PlainValue = '"MultiStringProperty"=hex(7):56,00,61,00,6c,00,75,00,65,00,31,00,00,00,56,00,\61,00,6c,00,75,00,65,00,32,00,00,00,56,00,61,00,6c,00,75,00,65,00,33,00,00,\00,00,00' # 获取值部分 $Value = $PlainValue.Split("=")[1] # 移除Hex描述 $Value = $Value.Replace( "hex(7):","" ) # 移除reg.exe用于换行的反斜杠 $Value = $Value.Replace("\","")
我的目标是将处理后的十六进制值转换为@("Value1","Value2","Value3")格式的PowerShell数组字符串。尝试了以下两种转换方式:
# 方法1:通过Unicode编码转换 $Value1 = $Value -split (",") | % { [INT]"0x$_" } $Value1 = [Text.Encoding]::Unicode.GetString($Value1) # 方法2:逐字节转换为字符后拼接 $Value2 = $Value -split (",") | % { [char][byte]"0x$_" } $Value2 = $Value2 -join ''
但遇到了问题:转换后的字符串无法通过.split(" ")正确分割;如果提前用分隔符",00,00,00,"分割再转换,PowerShell又会出现数字转换错误。
想确认两个问题:
- 是我的理解有误,还是PowerShell的转换逻辑存在问题?有没有更合适的分割方式?
- REG_MULTI_SZ的值中是否允许包含空格?
内容的提问来源于stack exchange,提问作者Smithy
相关产品推荐
相关产品推荐

