使用 -Name 参数时 Get-Cluster cmdlet 失败

使用 -Name 参数时 Get-Cluster cmdlet 失败

概括

当我调用Get-Clusterpowershell 时,它返回我的集群的名称。为简单起见,我们将其称为Cluster1。如果我调用,Get-Cluster -Name Cluster1它会失败并出现错误。

错误:

Get-Cluster : Check the spelling of the cluster name. Otherwise, there might be a problem with your network. Make sure
the cluster nodes are turned on and connected to the network or contact your network administrator.
    The RPC server is unavailable
At line:1 char:1
+ Get-Cluster -Name Cluster1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ConnectionError: (:) [Get-Cluster], ClusterCmdletException
    + FullyQualifiedErrorId : ClusterRpcConnection,Microsoft.FailoverClusters.PowerShell.GetClusterCommand

细节

我首先想到的是,我错误地使用了 cmdlet,或者 winrm 不起作用(它确实起作用了)。我还认为,也许是调用方式不同导致了失败。按照这种逻辑,我查看了有关 cmdlet 的以下 Technet 页面:

研究http://technet.microsoft.com/en-US/library/hh847254(v=wps.630).aspx

根据那里的文字,我无法辨别出明显的用户错误。所以我尝试了一些方法来找出原因。首先,我想也许我只是经常打错字,所以我这样做了:

$Cluster = Get-Cluster
($cluster.Name -like "Cluster1")

条件返回True,所以我在打字时不会感到困惑。接下来我尝试了以下操作:

Get-Cluster | Where-Object{$_.Name -like "Cluster1"}

当然,它返回的是集群对象。那么,这里发生了什么? 有什么不同Get-Cluster -Name "Cluster1"

编辑

Powershell 的版本信息:

PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.17090
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

答案1

根据我Get-Cluster对工作中遇到的几个集群的运行情况的观察,在我看来,它-Name使用了名称解析,因此如果有任何东西导致解析名称出现问题,那么即使您给出的名称是本地机器,它也会失败。

我尝试使用集群名称和集群服务名称以及集群中各个节点的名称。

我还在 HOSTS 文件中添加了一个条目,将假名指向其中一个集群,并且能够成功使用该名称Get-Cluster

对我来说,这强烈表明使用-Name完全依赖于操作系统中的标准名称解析。

Get-Cluster没有名称的情况可以工作而Get-Cluster -Name localhost(或当前机器的实际主机名)不起作用,这向我表明,如果没有名称参数,则Get-Cluster尝试直接在当前机器上与集群服务进行通信,这不需要任何名称解析。

除了名称解析之外,我相信使用时会与目标服务器建立 RPC 连接-Name(即使它是本地计算机),因此即使名称解析有效,RPC 服务实际上不可用,或者防火墙打开实际上可能会阻止该连接并导致您看到的错误。

我无法测试这一点,因为我目前在我们的测试环境中没有集群,并且我无法故意破坏生产集群上的名称解析或 RPC!

不幸的是,我无法用任何权威来源支持这一假设(我找不到这种行为的明确描述)。

相关内容