用于检测 WinRE 已启用的注册表标志(Windows 恢复环境)

用于检测 WinRE 已启用的注册表标志(Windows 恢复环境)

是否有人知道是否存在注册表标志可以用来检测 Windows 恢复环境是否启用或禁用?

目前,我在应用程序部署的“检查要求”部分使用此脚本:

<#
.SYNOPSIS
Detects if a Windows Recovery Partition needs to be setup

.DESCRIPTION
Uses powershell to check if WinRE is enabled

.NOTES
To be used in the Endpoint Manager and as the remidiation script
#>

try {
    $reagentcOutput = reagentc /info

    # Check if Recovery is already enabled
    if ($reagentcOutput -match "Enabled") {
        Write-Output "Enabled"
        exit 0
    } else {
        Write-Output "Not"
        exit 0
    }
  
  
}
catch {
    Write-Host "An Error occured! Hopefully this helps: $reagentcOutput"
    Write-Host "ERROR: at $($_.InvocationInfo.ScriptLineNumber)"
    Write-Error "Message: " $_.Exception.Message
    Write-Host "StackTrace: "
    Write-Host $_.Exception.StackTrace
    Write-Host ""
    exit 1
}    

exit 0

需求评估

但问题似乎是 Intune 未按照我期望的方式评估此脚本的返回值,或者脚本的语法或执行存在其他问题。我找不到任何可行需求脚本的示例。

本质上,我只是想添加一个“要求”,即在安装我的应用程序(配置分区并移动 WinRE img 文件)之前尚未启用 WinRE

答案1

在比较使用 Reagentc 命令禁用和启用 WinRE 的结果后,我没有观察到注册表修改。但是,我发现文件夹内部存在差异 C:\Windows\System32\Recovery

主要有两个变化:

  • 启用时,文件Winre.wim存在于文件夹中。禁用时,文件不存在。
  • 文件的内容ReAgent.xml已经改变。

以下是关于的差异ReAgent.xml。我只包括已更改的 XML 标签。

已启用

  <WinreBCD id="{ee2fae51-df9e-11ea-8242-9cb6d0fa6b80}"/>
  <WinreLocation path="\Recovery\WindowsRE" id="0" offset="493646512128" guid="{a588d765-1bef-40cb-a90f-0b8cdafcd122}"/>
  <InstallState state="1"/>
  <ScheduledOperation state="5"/>

已禁用

  <WinreBCD id="{00000000-0000-0000-0000-000000000000}"/>
  <WinreLocation path="" id="0" offset="0" guid="{00000000-0000-0000-0000-000000000000}"/>
  <InstallState state="0"/>
  <ScheduledOperation state="4"/>

您应该检查您的计算机上的情况,特别是那些没有 WinRE 的计算机,但我的猜测是检查应该类似于此:

  • 如果该文件夹C:\Windows\System32\Recovery不存在或ReAgent.xml丢失,则 WinRE 可能未安装。
  • 如果 的内容 ReAgent.xmlWinreLocation path=""InstallState state="0",则 WinRE 可能已被禁用。

相关内容