Сводка
Когда я звоню Get-Cluster
powershell возвращает название моего кластера. Для пользы простоты, позволяет, называют его 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 не работает (это). Я также думал, что, возможно, существует различие в способе, которым оно звонило, это вызывает отказ. Следующий, что логика я рассмотрел следующую technet страницу на cmdlet:
Исследование: http://technet.microsoft.com/en-US/library/hh847254 (v=wps.630) .aspx
На основе записи там, я не мог различить очевидную пользовательскую ошибку. Таким образом, я попробовал несколько вещей понять это. Сначала я думал, возможно, что я просто постоянно завинчиваю ввод, таким образом, я сделал это:
$Cluster = Get-Cluster
($cluster.Name -like "Cluster1")
Условные возвраты True
таким образом, я не кластер f при вводе. Затем я попробовал следующее:
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
На основании моих наблюдений за запуском Get-Cluster
против нескольких работающих у меня кластеров, мне показалось, что -Name
использует разрешение имен, поэтому, если есть что-то, что вызывает проблемы с разрешением имен, оно не сработает, даже если имя, которое вы даете ему, является локальным компьютером.
Я попробовал это с именами кластеров и именами служб кластеров, а также именами отдельных узлов в кластере.
Я также добавил в свой файл HOSTS запись, указывающую поддельное имя для одного из кластеров, и смог успешно использовать это имя с Get-Cluster
.
Для меня это убедительно свидетельствует о том, что использование -Name
полностью зависит от стандартного разрешения имен в ОС.
Случай, когда Get-Cluster
без имени будет работать, тогда как Get- Cluster -Name localhost
(или фактическое имя хоста текущего компьютера) не будет работать, подсказывает мне, что без параметра имени Get-Cluste r
пытается связаться со службой кластера непосредственно на текущем компьютере, что не требует разрешения имен.
В дополнение к разрешению имен, я считаю, что RPC-соединение устанавливается с целевым сервером при использовании ] -Name
(даже если это локальный компьютер), поэтому, даже если разрешение имен работает, служба RPC фактически недоступна или включен брандмауэр может заблокировать это соединение и вызвать ошибку, которую вы видели.
I не смог это проверить, так как в настоящее время у меня нет кластера в нашей тестовой среде, и я не могу намеренно нарушить разрешение имен или RPC в производственном кластере!
К сожалению,Я не мог подтвердить эту гипотезу каким-либо авторитетным источником (я не смог найти окончательного описания такого поведения).