PowerShell写入注册表值时开头出现额外符号的解决方法求助
解决PowerShell写入注册表字符串开头多出隐形字符的问题
这坑我之前踩过!你遇到的问题根源在于-Value参数里的字符串藏了肉眼不可见的特殊Unicode字符——具体看你写的'02 ee 7f',开头的那个隐形字符大概率是零宽非断空格(U+200E)或者类似的格式控制字符,复制粘贴的时候从其他文档/网页带进来的,PowerShell会把它当成字符串的一部分原样写入注册表,就出现了莫名其妙的开头符号。
下面是具体的解决步骤:
1. 先确认隐形字符的存在
先运行这段代码,查看字符串的Unicode编码,就能揪出那个隐形字符:
$problemStr = '02 ee 7f' $problemStr.ToCharArray() | ForEach-Object { Write-Host "字符: $_ | 编码: $([int]$_)" }
运行后你会看到第一个字符的编码不是数字或空格的ASCII码(比如200E),这就是罪魁祸首。
2. 最直接的解决:手动重新输入字符串
别复制原来的内容,手动敲一遍'02 ee 7f',确保没有带进来隐形字符,再运行你的脚本:
Push-Location Set-Location HKCU: New-ItemProperty -Path SOFTWARE\Microsoft\Office\16.0\Common\Security\Crypto\EscrowCerts -Name "EscrowCert01" -Value '02 ee 7f' -PropertyType "String"
3. 自动化清理:用正则过滤隐形字符
如果没办法手动输入(比如脚本是自动生成的),可以用正则表达式去掉所有非ASCII的隐形字符:
Push-Location Set-Location HKCU: $rawValue = '02 ee 7f' $cleanValue = $rawValue -replace '[^\x00-\x7F]', '' # 只保留ASCII范围内的字符 New-ItemProperty -Path SOFTWARE\Microsoft\Office\16.0\Common\Security\Crypto\EscrowCerts -Name "EscrowCert01" -Value $cleanValue -PropertyType "String"
4. 验证结果
写完注册表后,用下面的命令检查值是否正常:
Get-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Security\Crypto\EscrowCerts -Name "EscrowCert01"
输出里的EscrowCert01值应该就是干净的02 ee 7f了。
补充说明
这种隐形字符通常来自网页、Word、PDF等带格式的文档,复制文本时会附带这些格式控制字符,PowerShell不会自动过滤,所以会原样写入。以后复制代码或字符串时,尽量用纯文本编辑器中转一下,避免带进来这类隐形字符。
内容的提问来源于stack exchange,提问作者imconnor
相关产品推荐
相关产品推荐

