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

求无需匹配值名称的SCCM检测键脚本:匹配卸载路径值数据

实现SCCM检测脚本:匹配注册表Uninstall路径中的指定值数据(无需指定值名称)

要实现无需指定值名称、直接匹配注册表HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall路径中任意值数据的SCCM检测脚本,可以按以下思路编写:

核心思路

  1. 遍历目标注册表路径下的所有子项
  2. 对每个子项,获取其所有属性及对应值(即你提供的$properties = Get-ItemProperty -Path $_.PSPath步骤)
  3. 遍历所有属性的值,检查是否存在与目标数据匹配的内容
  4. 按照SCCM检测脚本要求返回结果(返回0表示检测通过,非0表示未检测到)

完整脚本示例

# 替换为你需要匹配的目标值数据
$targetValue = "YourTargetValue"

# 遍历Uninstall路径下的所有注册表项(跳过无法访问的项)
Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" -ErrorAction SilentlyContinue | ForEach-Object {
    # 获取当前注册表项的所有属性
    $properties = Get-ItemProperty -Path $_.PSPath

    # 遍历所有属性的值,检查是否匹配目标数据
    foreach ($value in $properties.PSObject.Properties.Value) {
        # 精确匹配用-eq,模糊匹配可改用-like(例如 $value -like "*$targetValue*")
        if ($value -eq $targetValue) {
            # 输出匹配项路径(可选,用于调试)
            Write-Host "匹配项找到: $($_.Name)"
            # 返回0表示SCCM检测通过
            exit 0
        }
    }
}

# 若未找到匹配项,返回1表示检测不通过
exit 1

关键细节说明

  • 遍历所有属性值:通过$properties.PSObject.Properties.Value可以提取当前注册表项的所有属性值,无需提前知道具体键名(比如DisplayName、DisplayVersion等)
  • 匹配规则调整:如果需要模糊匹配(比如只匹配值数据的一部分),可以将-eq替换为-like,并给目标值添加通配符,例如$value -like "*2023*"
  • 覆盖32位程序:在64位系统中,32位程序的卸载信息存放在HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall,如果需要覆盖这类程序,可以在脚本中添加对该路径的遍历
  • 错误处理:添加-ErrorAction SilentlyContinue可以跳过没有权限访问的注册表项,避免脚本中途报错中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:27:09