如何通过SCCM读取注册表值检测Outlook的32/64位版本
SCCM检测Outlook 32/64位的解决方案
1. SCCM不依赖脚本直接读取注册表值的方法
方法一:通过硬件清单收集
- 打开SCCM控制台,进入资产和合规性 > 客户端设置 > 默认客户端设置(或自定义客户端设置)
- 编辑硬件清单设置,点击设置类 > 添加 > 添加自定义 WMI 类
- 在弹出窗口中选择连接到本地计算机,输入WMI命名空间
root\cimv2后点击导入 - 选择从注册表导入,输入注册表路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Outlook,勾选Bitness值完成导入 - 部署客户端设置后,客户端会在下次硬件清单周期收集该值,可在资产的硬件清单报表中查看
方法二:通过配置项目检测
- 进入资产和合规性 > 合规性设置 > 配置项目,新建自定义配置项目
- 在设置步骤中添加新设置,类型选择注册表,路径输入
HKLM\SOFTWARE\Microsoft\Office\16.0\Outlook,值名称填Bitness - 可设置规则判断值为
x86或x64,后续可通过合规性报表查看结果,也能作为集合查询的依据
2. 可在SCCM中运行的脚本方案
修复后的BAT脚本
之前的脚本失败大概率是因为SCCM客户端默认以32位运行,会自动重定向到HKLM\SOFTWARE\Wow6432Node,需强制访问64位注册表:
@echo off :: 强制访问64位注册表分支 REG QUERY HKLM\SOFTWARE\Microsoft\Office\16.0\Outlook /v "Bitness" /reg:64 if %errorlevel% equ 0 ( for /f "tokens=3" %%a in ('REG QUERY HKLM\SOFTWARE\Microsoft\Office\16.0\Outlook /v "Bitness" /reg:64') do ( if "%%a"=="x86" ( :: 替换为你的32位脚本路径 start "" "C:\Path\To\Your\32bit_Script.bat" ) else if "%%a"=="x64" ( :: 替换为你的64位脚本路径 start "" "C:\Path\To\Your\64bit_Script.bat" ) ) ) else ( echo Outlook 16.0 registry entry not found exit /b 1 )
- 在SCCM包中部署时,设置程序的运行环境为64位,避免注册表重定向问题
可运行的PowerShell脚本
解决弹窗后停止的问题,需设置执行策略并确保脚本后台执行,同时处理注册表重定向:
# 强制访问64位注册表路径 $outlookBitness = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Office\16.0\Outlook" -Name "Bitness" -ErrorAction SilentlyContinue if ($outlookBitness) { switch ($outlookBitness.Bitness) { "x86" { # 替换为你的32位脚本路径 & "C:\Path\To\Your\32bit_Script.ps1" } "x64" { # 替换为你的64位脚本路径 & "C:\Path\To\Your\64bit_Script.ps1" } } } else { Write-Error "Outlook 16.0 registry entry not found" exit 1 }
- 在SCCM中部署时的程序命令行设置:
powershell.exe -ExecutionPolicy Bypass -File "Your_Script_Name.ps1" - 运行环境选择64位,并勾选隐藏程序窗口避免弹窗
内容的提问来源于stack exchange,提问作者ezG
相关产品推荐
相关产品推荐

