本文提供了一个全面的指南,用于排查在 Windows Server 2016、Windows Server 2019、Windows Server 2022、Windows Server 2025 和 Windows 10 企业/教育版中管理 Hyper-V、存储空间直通(S2D)、故障转移群集和 PowerShell 任务时遇到的常见问题。 这些问题通常影响虚拟机作、存储管理、群集通信和自动化,从而导致 VHD/VSS 损坏和 PowerShell cmdlet 错误等故障。 本指南提供详细的解决方案和诊断方法来解决这些难题。
可能会遇到以下问题:
Hyper-V/虚拟化问题
- 虚拟机(VM)导入或迁移失败,没有显式错误消息。
- 优化 VHD 等任务后无法启动的 VM,错误代码0x80070570:
该文件或目录已损坏且无法读取。
-
通过 PowerShell 启用处理器兼容性或杂交模式时出现问题。
-
对具有不同 CPU 模型的群集节点之间的 VM 实时迁移的担忧。
-
通过 PowerShell 生成清单或存储使用情况报告时失败。
-
应用配置脚本后,意外的主机重新启动(蓝屏死亡)。
-
PowerShell cmdlet 错误,例如:
无法在此对象上找到 MonitorMode 属性。 验证属性是否存在并且可以设置。 - > connect-VIServer:无法连接:无法加载文件或程序集 VMware.Vim,版本=8.3.0.399...
存储/S2D 问题
Get-PhysicalDisk不Get-VirtualDisk返回来自某些群集节点的输出或不正确的数据。- 磁盘在 PowerShell 中显示为“未知”或已分离,但在故障转移群集管理器中显示为正常。
- App-V 包中的文件显示为 脱机 或重新分析点,应用程序无法启动。
- 卷影复制服务 (VSS) 命令,例如
vssadmin list writers,返回空或缺失的编写器列表。
群集/权限问题
- 运行具有 cmdlet 的
Get-Cluster*PowerShell 脚本的计划任务在被动节点上失败,并出现如下错误:
Get-Cluster:在群集上没有管理权限。 拒绝访问。
- 切换设置或重启服务后,权限的间歇性还原。
常规/报告问题
- 无法通过 PowerShell 枚举磁盘、存储使用情况或生成清单报告。
- 使用 PowerShell 连接到 Azure 订阅时出现问题。
- 需要有关在 Windows 10 或 Windows 11 上添加注册表项或配置存储/高可用性的指导。
这些问题的根本原因可按如下所示进行分类:
原因 1:配置或知识差距
- PowerShell cmdlet 语法不正确或不完整。
- 对使用内置工具检索存储或 VM 信息的理解有限。
- 不同硬件之间 VM 迁移的 CPU 兼容性要求误解。
原因 2:权限/上下文问题
- 作为 SYSTEM 帐户运行的计划任务或 PowerShell 脚本缺少群集权限,尤其是在被动节点上。
- 用户帐户控制(UAC)或组策略限制限制执行上下文。
- 分配给群集或存储 cmdlet 的服务帐户的权限不足。
原因 3:软件/驱动程序 bug
- Windows Server 更新引入的 Bug(例如,2025 年 5 月更新由于 vhdmp.sys 问题导致 VHD 损坏)。
- S2D 或故障转移群集 PowerShell 模块中的缺陷导致磁盘或虚拟磁盘信息不一致。
- 在 App-V 包作期间更新文件属性或删除重新分析点失败。
原因 4:环境或第三方干扰
- 安全或防病毒软件干扰 VSS 编写器或文件系统作。
- 第三方工具(如 VMware PowerCLI、Zscaler 或 Crowdstrike)导致的依赖项或功能块。
- 非永久性磁盘、未加入域的系统或不支持的服务器版本。
原因 5:不支持的方案
- 在不支持的 Windows Server 版本上运行命令或使用专为其他平台设计的脚本(例如,Hyper-V上的 VMware cmdlet)。
- 尝试高级配置更改(例如 NIC/SR-IOV 或注册表调整),而无需进行适当的测试。
按照这些分步解决方案解决所描述的问题。
PowerShell cmdlet 和报告问题的解决方法
-
验证 cmdlet 语法:
-
始终使用官方Microsoft文档验证 PowerShell cmdlet 语法。
-
磁盘和存储使用情况的示例:
在 Hyper-V 主机上:
Get-Volume | Select-Object DriveLetter, Size, SizeRemaining在 VM 中:
Get-Volume | Select-Object -Property DriveLetter, Size, SizeRemaining -
导出清单:
Get-VM | Select-Object -Property * | Export-Csv -Path "C:\VMInventory.csv" -NoTypeInformation
-
-
启用 VM 处理器兼容性:
Set-VMProcessor -VMName <VMName> -CompatibilityForMigrationEnabled $true Set-VMProcessor -VMName <VMName> -CompatibilityForOlderOperatingSystemsEnabled $true Get-VMProcessor -VMName <VMName> # Confirm settings -
杂交模式/监视模式:
- 使用正确的属性名称(例如,AllowPacketDirect 而不是 MonitorMode for Hyper-V vSwitches)。
- 使用官方Microsoft源交叉检查第三方文档。
-
Azure PowerShell 身份验证:
Install-Module Az -Scope CurrentUser Import-Module Az Connect-AzAccount Set-AzContext -Subscription "<subscription-name-or-id>" -
解决 VMware PowerCLI 错误。
确保从官方源安装 PowerCLI,并检查 VMware 对缺少程序集问题的支持。
解决群集和权限问题
-
解决访问被拒绝错误:
- 使用具有群集管理脚本适当权限的域服务帐户。
- 如果使用 SYSTEM,在故障转移群集管理器中切换权限:
- 删除并重新添加具有“允许”权限的 SYSTEM 帐户。
- 重启与群集相关的服务。
-
修复存储 cmdlet 故障:
-
重新启动所有群集节点以重置状态并清除不一致。
-
收集诊断日志:
Get-SddcDiagnosticInfo -Path
-
存储、文件系统和 VHD 问题的解决方法
-
VHD 损坏:
-
安装 2025 年 6 月累积更新以修复 vhdmp.sys bug。
-
在应用更新之前禁用计划
Optimize-VHD任务。 -
查看已安装的更新:
Get-HotFix | Sort-Object InstalledOn -Descending
-
-
App-V 包文件问题:
-
分析文件属性:
Get-ChildItem -Path <package-path> -Recurse | Select-Object FullName, Attributes -
禁用导致干扰的第三方软件。
-
-
通过重启 VSS 服务解决缺少的 VSS 编写器:
Restart-Service -Name VSS
解决常规配置/注册表/高可用性问题
-
添加注册表项:
Set-ItemProperty -Path "HKLM:\Software\<Path>" -Name "<Key>" -Value "<Value>" -
处理具有不同 CPU 的群集节点。
在迁移期间为 VM 启用 CPU 兼容性:VM 设置>处理器>迁移到具有不同处理器版本的物理计算机。
-
避免高级配置风险:
- 在部署之前全面测试高级 NIC 属性(如 SR-IOV)。
- 使用新式浏览器,而不是禁用 Internet Explorer 增强的安全性。
数据收集
如果需要进一步的帮助,请收集以下数据:
- PowerShell 输出(例如,
Get-Volume或Get-VM``Get-PhysicalDisk)。 - TSS 工具中的诊断。
- 使用
Get-SddcDiagnosticInfo. - VSS 状态为
vssadmin list writers. - 已安装的修补程序, 使用
Get-HotFix.
有关详细信息,请参阅 Hyper-V、S2D、PowerShell 和故障转移群集的官方Microsoft文档。 始终确保环境已完全修补,并在非生产环境中测试配置,然后再进行重大更改。