简介这份资源面向在 Win10 系统下使用 VMware 运行 Ubuntu 等虚拟机的用户尤其是关闭 Hyper-V 后仍被 Device/Credential Guard 拦截、导致虚拟机无法启动的开发者与运维人员。它提供微软官方的 Windows Defender Device Guard 与 Credential Guard 硬件就绪检测工具用于识别兼容性问题并一键禁用相关安全特性从而恢复 VMware Workstation 的正常运行。压缩包共 6 个文件约 32KB以 ps1 主脚本为核心辅以 p7b 策略文件、xml 配置模板和 txt 说明文档分别承担执行入口、策略定义与使用指引体积轻量、便于随取随用。目前已有 3195 人学习下载说明该问题在 Win10 与 VMware 组合环境中较为普遍。借助包内脚本与配套策略文件读者可快速完成检测与禁用操作省去逐项排查系统安全设置的麻烦适合需要稳定虚拟化环境的初中级用户参考使用。1. 从一台 Win10 虚拟机里的 Credential Guard 报错说起上周帮同事在一台 Win10 虚拟机上跑环境检测脚本脚本刚启动就弹出一行红字大意是这台机器上 Credential Guard 的状态读不出来后面的检查项全部中断。他一开始以为是脚本坏了重装了两遍 Python又换了一个版本的运行库问题依旧。真正的原因其实在虚拟机配置层Win10 默认开启了基于虚拟化的安全功能Credential Guard 依赖 Hyper-V 的虚拟化能力而 VMware 这类宿主上的嵌套虚拟化如果没打开检测工具就拿不到这个安全模块的状态直接报错退出。这类“工具本身没毛病、卡在系统环境”的场景在 Win10 VMware 的组合里非常常见。dgreadiness 这类就绪性检测工具本质上是把系统里一堆安全与兼容性开关读出来做判断Credential Guard 只是其中一项但它恰好是最容易被虚拟化层挡住的一项。装不好会怎样轻则检测结果缺项、误判为“未就绪”重则脚本中途抛异常你根本不知道剩下哪些项没跑。这篇笔记面向的是正在 Win10 虚拟机上部署检测环境、被 Credential Guard 相关报错卡住的开发者从版本选择、虚拟机参数、依赖安装一路写到验证和排错照着走能跑通。2. 装前把环境列清Win10 版本、VMware 与 Credential Guard 的前置关系动手之前先把三件事定下来Win10 的具体版本、VMware 的版本与虚拟化设置、以及 Credential Guard 在这套组合里到底依赖什么。很多人翻车不是因为命令敲错而是版本和开关没对齐装到一半才发现系统根本不支持某个检测项。2.1 Win10 版本怎么选专业版、企业版与 LTSC 的差异dgreadiness 这类工具读取的 Credential Guard 状态底层走的是 Windows 的安全相关接口不同 Win10 版本暴露的能力不一样。常见做法是优先用企业版或教育版因为 Credential Guard 的完整管理能力在这两个版本上默认可用专业版能读到部分状态但某些策略项会显示为“不支持”LTSC 版本精简了部分组件检测脚本可能少读几项结果看起来“干净”但其实是缺项。我一般会先确认版本号再决定要不要继续# 在 Win10 里用 PowerShell 查系统版本与 SKU Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsBuildNumber, OsHardwareAbstractionLayer这段命令输出四个关键字段。WindowsProductName告诉你是不是企业版WindowsVersion是 2004、21H2 这类大版本号OsBuildNumber是具体构建号OsHardwareAbstractionLayer用来判断虚拟化层是否正常暴露。构建号低于 19041 的老版本Credential Guard 的查询接口行为和较新版本有差异检测脚本可能报“未知状态”。如果只是做兼容性验证选 21H2 企业版最省事如果必须复现某个老环境就按目标构建号来别图新。2.2 VMware 侧的关键开关嵌套虚拟化与虚拟化引擎Win10 虚拟机里要读到 Credential Guard宿主 VMware 必须把虚拟化能力透传给客户机。这一步没开客户机里所有依赖 Hyper-V 的检测项都会失败。在 VMware Workstation 里虚拟机关机状态下进“处理器”设置勾选“虚拟化 Intel VT-x/EPT 或 AMD-V/RVI”这是嵌套虚拟化的总开关。只勾这一项还不够虚拟机配置文件.vmx里通常还要补两行否则客户机启动后 Credential Guard 依然读不到# 编辑虚拟机的 .vmx 配置文件追加以下参数 hypervisor.cpuid.v0 FALSE vhv.enable TRUEvhv.enable TRUE是真正把硬件虚拟化透传给客户机的开关很多人只勾了界面选项却没生效就是缺这一行。hypervisor.cpuid.v0 FALSE的作用是让客户机不认为自己跑在 Hypervisor 之上某些检测工具会据此判断“当前是虚拟环境”而跳过安全模块查询设成 FALSE 能绕过这个判断。改完.vmx必须完全关机再开机挂起恢复不生效这是血泪经验。2.3 依赖清单.NET、PowerShell 版本与脚本执行策略检测脚本本身通常依赖 PowerShell 和 .NET 运行时。Win10 自带 PowerShell 5.1够用但如果脚本里用了较新的语法可能需要 PowerShell 7。.NET 方面多数就绪性检测工具基于 .NET Framework 4.6 以上Win10 21H2 默认满足老构建号要手动确认。执行策略是另一个高频坑。默认策略是 Restricted脚本双击或直接运行会被拦。常见做法是只对当前进程放开# 仅对当前 PowerShell 会话放开执行策略不改系统全局设置 Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass用-Scope Process而不是-Scope LocalMachine是因为前者只影响当前窗口关掉就恢复不会给系统留下长期放宽的安全口子。装完验证阶段如果换窗口重跑记得再执行一次。依赖装齐、策略放开才算把“装什么”这一步走完。3. 解压与部署dgreadiness 脚本落盘、参数配置与首次运行环境对齐之后进入实际部署。这一步的目标是把压缩包里的检测脚本放到一个路径干净、权限明确的位置配好运行参数然后完成第一次可解释的运行——不是“能跑就行”而是每一步输出你都知道它在读什么。3.1 解压路径与目录结构为什么不要放在桌面或下载目录压缩包解压后通常包含主检测脚本、若干辅助模块和配置文件。路径选择看着小事实际影响不小桌面和下载目录往往带中文路径或空格PowerShell 调用外部模块时对含空格路径的处理容易出问题另外这些目录权限较宽松脚本写日志时可能被安全软件拦截。我一般固定放到一个短路径下比如C:\tools\dgreadiness解压后确认目录结构# 解压并查看目录结构在 PowerShell 中执行 Expand-Archive -Path C:\Users\Public\dgreadiness_v3.6.zip -DestinationPath C:\tools\dgreadiness -Force Get-ChildItem -Path C:\tools\dgreadiness -Recurse | Select-Object FullName, LengthExpand-Archive是 PowerShell 内置的解压命令-Force表示目标已存在时覆盖适合反复部署的场景。Get-ChildItem -Recurse列出所有文件及大小用来确认解压完整——如果主脚本大小明显偏小多半是解压中断重新解压即可。路径里避免中文和空格是后面所有命令能稳定执行的前提。3.2 运行参数怎么配输出目录、日志级别与检测范围检测脚本一般支持几个关键参数指定输出报告路径、控制日志详细程度、限定只检测某几类项目。参数不配也能跑但默认输出会散落在当前目录日志级别偏低出问题时看不到细节。常见做法是显式指定输出目录和详细日志# 以详细日志模式运行检测脚本报告输出到独立目录 cd C:\tools\dgreadiness .\dgreadiness.ps1 -OutputPath C:\tools\dgreadiness\reports -Verbose -LogLevel Debug-OutputPath把报告集中到一个目录方便后续比对多次运行结果-Verbose让脚本输出每一步在做什么-LogLevel Debug把底层读取的原始状态也记下来排查 Credential Guard 这类项时特别有用。参数名以实际脚本为准如果脚本不认某个参数会直接报错这时用Get-Help .\dgreadiness.ps1 -Full看它支持哪些别硬猜。3.3 首次运行的正确姿势先只读、再全量第一次运行不建议直接全量检测。先跑一个只读的、范围最小的模式确认脚本能正常启动、能读到系统信息再放开全量。这样出问题时能快速定位是“脚本起不来”还是“某一项读不到”。# 第一步最小范围运行只确认脚本可执行 .\dgreadiness.ps1 -OutputPath C:\tools\dgreadiness\reports -CheckOnly SystemInfo # 第二步确认无误后全量运行 .\dgreadiness.ps1 -OutputPath C:\tools\dgreadiness\reports -Verbose -LogLevel Debug-CheckOnly SystemInfo只跑系统信息读取不碰安全模块用来验证运行环境和权限。这一步过了说明 PowerShell 策略、路径、依赖都没问题剩下的报错就只可能出在具体检测项上。分两步走的好处是Credential Guard 报错时你能确定它不是环境问题而是虚拟化配置问题排查方向立刻收窄。4. 避坑与排查Credential Guard 读不到、脚本中断、结果缺项的救法部署阶段真正耗时间的不是装是装完跑不通。下面几条是 Win10 VMware 组合里反复出现的坑按“现象 → 原因 → 解决”记下来遇到时直接对号入座。4.1 现象脚本报 Credential Guard 状态未知或读取失败原因通常是嵌套虚拟化没真正生效。界面上勾了选项但.vmx里缺vhv.enable TRUE或者改完没有完全关机。另一种可能是客户机里 Hyper-V 相关服务被禁用检测接口拿不到数据。解决分两步先确认.vmx参数已写入并完全关机重启再在客户机里检查虚拟化是否可见# 在 Win10 客户机里确认虚拟化已暴露 systeminfo | findstr /i Hyper-V如果输出里 Hyper-V 相关项显示“已检测到虚拟机监控程序”或类似字样说明透传成功如果显示“未检测到”回到 VMware 侧继续查.vmx。服务被禁的情况用Get-Service查 Hyper-V 相关服务状态按需启动但注意别在不需要的机器上乱开会影响其他虚拟化软件。4.2 现象脚本运行到一半直接中断无报错信息多半是执行策略或权限问题。脚本调用了外部模块当前会话策略不允许或者当前用户对输出目录没有写权限脚本写日志失败后静默退出。解决确认当前会话策略是 Bypass输出目录换成当前用户有完全控制权的路径比如C:\tools\dgreadiness\reports而不是系统目录。用-Verbose重跑中断前最后一行输出就是线索。如果还是静默退出把脚本输出重定向到文件看有没有被吞掉的异常.\dgreadiness.ps1 -Verbose -LogLevel Debug * C:\tools\dgreadiness\run.log*把标准输出和错误流一起写进日志静默退出的场景下这是唯一的黑匣子。4.3 现象检测结果缺项某些项目显示“不支持”这是版本差异导致的不是故障。专业版或 LTSC 上部分 Credential Guard 管理项本来就不暴露脚本读到“不支持”是正常行为。误判为故障去反复重装纯属浪费时间。解决先对照 2.1 的版本说明确认当前 SKU 是否支持该项不支持就在报告里标注“环境限制”不要当成部署失败。如果业务上必须读到该项换企业版环境重跑而不是在专业版上死磕。4.4 现象同一台机器两次运行结果不一致常见于挂起恢复后的虚拟机。挂起再恢复虚拟化状态和部分安全模块状态可能没重新初始化检测结果就会漂移。另一个原因是脚本缓存了上一次的中间结果。解决每次正式检测前完全关机再开机不用挂起恢复输出目录每次用新的子目录避免旧报告干扰比对。我一般按时间戳建目录跑完直接对比两次的差异项漂移一目了然。5. 装完怎么验证跑通三组对照与一次回归部署完成的标志不是“脚本没报错”而是“结果可解释、可复现”。验证阶段我固定做三组对照再走一次回归确认这套环境真的立住了。第一组对照最小范围运行与全量运行的系统信息部分必须一致。如果-CheckOnly SystemInfo和全量运行读到的构建号、SKU 不同说明两次运行的环境有差异先查是不是换了会话或改了策略。第二组对照Credential Guard 项在开启嵌套虚拟化和关闭嵌套虚拟化两种状态下结果必须不同。开启时能读到状态哪怕是“未配置”关闭时应该是读取失败或未知。如果两种情况结果一样说明虚拟化透传根本没生效前面的配置白做了。这一组是判断虚拟化配置是否真正起作用的硬指标。第三组对照同一配置下连续运行两次除时间戳外结果应完全一致。不一致就回到 4.4 查挂起恢复和缓存问题。回归验证用一个简单的检查表收口验证项期望结果不通过时先查脚本可启动最小范围运行正常退出执行策略、路径权限系统信息读取构建号与 SKU 正确PowerShell 版本、依赖Credential Guard 项开启透传时可读、关闭时失败.vmx参数、完全关机两次运行一致性除时间戳外无差异挂起恢复、输出目录复用报告落盘指定目录生成完整报告输出目录写权限这张表我一般贴在部署记录里每次换机器或换版本都过一遍比凭记忆靠谱。有一次我图省事跳过了第二组对照结果交付后对方在另一台没开透传的机器上跑Credential Guard 项直接报错回头补配置又多花半天。从那以后我每次部署完都强制走一遍“开启/关闭透传”的对照确认结果真的随配置变化而不是碰巧读到了缓存。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?