最推荐方式是用Invoke-Command批量远程执行健康检查命令,需确保WinRM启用、账户具集群管理权限、PowerShell版本兼容,并验证Test-WSMan连通性及FailoverClusters模块可用性。
直接在本地 powershell 中远程调用集群节点的健康检查命令,是最常用且可靠的方式。关键不是“连得上”,而是“查得准”——必须确保执行上下文具备足够权限,并能真实反映节点本地服务状态。
使用 Invoke-Command 批量验证节点健康
这是最推荐的方法:不登录节点,也不依赖本地缓存,直接在目标节点上实时执行健康命令。
- 基础语法示例(以检查集群节点状态为例):
Invoke-Command -ComputerName Node01,Node02 -ScriptBlock { Get-ClusterNode | Select-Object Name, State } - 若需跨域或非默认凭据,加上 -Credential (Get-Credential)
- 建议加 -ErrorAction Stop 并配合 try/catch,区分“连接失败”和“命令执行失败”
重点验证的健康项及对应远程命令
不要只查“是否在线”,要查服务是否真正就绪:
-
集群角色托管能力:
Get-ClusterResource | Where-Object {$_.State -ne 'Online'} | Select-Object Name, State, OwnerNode -
存储空间直通(S2D)状态:
Get-StorageSubSystem -FriendlyName "*Cluster*" | Select-Object HealthStatus, OperationalStatus, FriendlyName -
RHS(资源宿主服务)稳定性:
Get-Service rhs -ComputerName . | Select-Object Status, StartType, Name(注意:rhs 服务必须运行,否则节点会隔离) -
仲裁配置有效性:
Get-ClusterQuorum | Select-Object QuorumType, QuorumLogLocation
验证前必须确认的三项前提
很多“健康检查失败”其实源于执行环境本身不满足条件:
- WinRM 已启用且防火墙放行:远程节点需运行 winrm quickconfig,并确保端口 5985(HTTP)或 5986(HTTPS)开放
- 执行账户有集群管理权限:至少是 Cluster Administrator 或本地 Administrators 组成员
- PowerShell 版本兼容:Windows Server 2016+ 节点建议使用 PowerShell 5.1+;若用 PowerShell Core(7+),需确认 FailoverClusters 模块已导入(部分 cmdlet 不原生支持)
快速诊断连通性与权限问题
当 Invoke-Command 报错时,按顺序排查:
- 先测试基础通信:Test-WSMan -ComputerName Node01(返回对象即 WinRM 可达)
- 再验证集群模块可用性:Invoke-Command -ComputerName Node01 -ScriptBlock { Get-Module -ListAvailable FailoverClusters }
- 最后检查事件日志中是否有 RHS 崩溃记录(事件 ID 7031)、节点隔离(1641)或仲裁丢失(1212)等线索


















