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

PowerShell脚本无法找到已存在且有权限读取的SCOM注册表项

解决PowerShell访问SCOM注册表项时的路径错误问题

从错误信息可以明确:PowerShell将你指定的注册表路径误识别为文件系统路径,自动拼接了当前用户目录(C:\Users\UserName\...),这是因为Get-Item默认操作文件系统,直接传入HKEY_LOCAL_MACHINE开头的字符串无法被识别为注册表位置。

修正方案

1. 核心修复:使用PowerShell注册表PSDrive

PowerShell内置了专门的注册表驱动器(HKLM:对应HKEY_LOCAL_MACHINE),用它指定路径就能正确识别注册表位置。同时优化脚本逻辑,避免重复读取注册表项:

# 使用HKLM PSDrive指定注册表路径
$scomRegistryPath = "HKLM:\SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup"

# 一次性读取注册表项对象,避免重复调用Get-Item
$scomRegItem = Get-Item -Path $scomRegistryPath -ErrorAction Stop

# 读取对应注册表值
$scomDisplayName = $scomRegItem.GetValue("DisplayName")
$scomVersion = $scomRegItem.GetValue("DisplayVersion")
$scomBuild = $scomRegItem.GetValue("BuildNumber")

# 输出结果
Write-Host "SCOM Name: $scomDisplayName"
Write-Host "SCOM Version Number: $scomVersion"
Write-Host "SCOM Build Number: $scomBuild"

2. 处理64位系统注册表重定向问题

如果是64位系统上运行32位PowerShell,注册表会自动重定向到Wow6432Node分支,此时可以通过指定注册表视图强制访问64位分支:

# 32位PowerShell访问64位注册表分支
$scomRegItem = Get-Item -Path "HKLM:\SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup" -RegistryView 64 -ErrorAction Stop

3. 简化写法:使用Get-ItemProperty

也可以直接用Get-ItemProperty一次性读取所有需要的值,代码更简洁:

$scomRegistryPath = "HKLM:\SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup"
$scomProps = Get-ItemProperty -Path $scomRegistryPath -ErrorAction Stop

Write-Host "SCOM Name: $($scomProps.DisplayName)"
Write-Host "SCOM Version Number: $($scomProps.DisplayVersion)"
Write-Host "SCOM Build Number: $($scomProps.BuildNumber)"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:25:21