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

从远程注册表项获取(Default)字符串值失败,求原因及解决办法

注册表Default值读取异常问题

注册表项HKLM\SOFTWARE\Classes\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.8\0\Win32存在一个*(Default)*字符串值,指向MS Office的MSO.dll路径(示例:C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE16\MSO.DLL)。

失败的读取尝试

尝试用以下PowerShell代码读取该默认值到$KEY_VAL变量,但未成功:

$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine", $COMPUTER)
$RegKey = $Registry.OpenSubKey("SOFTWARE\Classes\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.8\0\Win32")
$KEY_VAL = $RegKey.getvalue("(Default)")
"$KEY_VAL"

自定义值读取正常

在同一位置创建名为TEST的自定义字符串值后,可正常读取:

$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $COMPUTER)
$RegKey = $Reg.OpenSubKey("SOFTWARE\\Classes\\TypeLib\\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\\2.8\\0\\Win32")
$KEY_VAL = $RegKey.GetValue("TEST")
"$KEY_VAL"

输出结果:

C:\My\fake\path

异常现象

  • 尝试多种引号、转义符写法均无效
  • 使用$RegKey.GetValueNames()遍历值名称时,仅显示TEST,不显示*(Default)*

临时解决办法

通过遍历值名称的方法可读取/修改*(Default)*值:

读取代码

foreach ($rVALUE in $RegKey.GetValueNames()){
$KEY_VAL = $RegKey.getvalue($rVALUE)
"$KEY_VAL"
}

修改代码

$RegKey = $Registry.OpenSubKey("$REG_KEY",$TRUE)
foreach ($rVALUE in $RegKey.GetValueNames()){
$ValueData = "C:\Program Files\Microsoft Office\Root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.DLL"
$RegKey.SetValue($rVALUE,$ValueData, [Microsoft.Win32.RegistryValueKind]::String)
}

疑问

  • 是否是未正确转义含大括号的键名导致失败?
  • 还是*(Default)*值本身难以操作?
  • 或是微软的特殊存储机制导致显示与实际存储不同?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:05:30