寻求检测Windows恢复环境(WinRE)启用状态的注册表项及Intune需求评估脚本故障解决方案
寻求检测Windows恢复环境(WinRE)启用状态的注册表项及Intune需求评估脚本故障解决方案
我来帮你解决这两个问题——先讲检测WinRE状态的注册表项,再修复你Intune需求脚本的问题:
一、检测WinRE启用状态的注册表项
你可以直接通过注册表键值来判断WinRE的启用状态,对应的注册表信息如下:
- 注册表路径:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RecoveryEnvironment - 键名:
Enabled,类型为DWORD- 值为
1:WinRE已启用 - 值为
0:WinRE已禁用
- 值为
这个键值和reagentc /info的输出完全同步,你也可以用PowerShell快速读取它:
$winreStatus = Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RecoveryEnvironment' -Name Enabled -ErrorAction SilentlyContinue if ($winreStatus -eq 1) { Write-Host "WinRE 已启用" } else { Write-Host "WinRE 未启用" }
二、修复Intune需求评估脚本的问题
你的脚本核心问题是退出码逻辑不符合Intune的要求:Intune需求脚本的规则是:
exit 0:表示满足需求,允许继续部署应用exit 1:表示不满足需求,会阻止部署
而你原来的脚本不管WinRE是否启用都返回exit 0,这就导致Intune无法正确判断是否跳过部署。下面是修改后的正确脚本:
<# .SYNOPSIS 检测WinRE是否未启用(用于Intune需求校验) .DESCRIPTION 通过PowerShell验证WinRE状态,仅当WinRE未启用时返回exit 0(满足需求) .NOTES 在Intune中使用时,请勾选"以管理员身份运行脚本"和"在64位PowerShell中运行" #> try { $reagentcOutput = reagentc /info # 检查WinRE是否已启用 if ($reagentcOutput -match "Enabled") { # WinRE已启用,不满足需求,返回exit 1 Write-Output "WinRE已启用 - 不满足部署需求" exit 1 } else { # WinRE未启用,满足需求,返回exit 0 Write-Output "WinRE未启用 - 满足部署需求" exit 0 } } catch { Write-Host "检查WinRE状态时发生错误:" Write-Host "Reagentc输出内容:$reagentcOutput" Write-Host "错误所在行:$($_.InvocationInfo.ScriptLineNumber)" Write-Host "错误信息:$($_.Exception.Message)" Write-Host "堆栈跟踪:$($_.Exception.StackTrace)" # 错误场景下默认判定为不满足需求,可根据实际情况调整 exit 1 }
关键修改说明:
- 调整了退出逻辑:WinRE已启用时返回
exit 1,告知Intune跳过部署;未启用时返回exit 0,允许部署 - 错误场景统一返回
exit 1,避免因脚本报错导致误判 - 补充了更清晰的输出日志,方便在Intune控制台排查问题
额外注意事项:
- 在Intune配置脚本时,必须勾选以管理员身份运行(
reagentc命令需要管理员权限) - 建议勾选在64位PowerShell中运行,避免32位环境下的注册表重定向问题
- 本地测试时,可以运行脚本后执行
$LASTEXITCODE查看退出码,验证逻辑是否正确
备注:内容来源于stack exchange,提问作者David Shader
相关产品推荐
相关产品推荐

