Я только начал в мире Powershell, и я пишу простой скрипт, чтобы перевести хосты в режим обслуживания, применить исправления, перезагрузиться, а затем вернуть на сервер. Я решил использовать службу отказоустойчивой кластеризации, чтобы проверить доступность хоста, прежде чем снова вводить его в эксплуатацию. Но я, кажется, получаю ошибку, о которой я не могу найти много.

Get-ClusterNode : Cannot convert 'hyperv1.example.com' to the type     'System.Collections.Specialized.StringCollection' required by parameter 'Name'. Unable to cast object of type 'System.Management.Automation.PSObject' to type 'System.String'.

Кодекс у меня есть:

$VMMServer = Get-VMMServer -ComputerName "scvmm.example.com"
$Cluster = "HyperVCluster"
$VMHosts = Get-VMHost -VMHostCluster $Cluster
Foreach ($VMHost in $VMHosts) {
psexec \\$VMHost -s wuinstall /reboot /install
sleep 120
$Status = Get-Clusternode -Cluster $Cluster -name $VMHost | select state
function CheckHostStatus {
if ($Status -match "Up") {
Write-Host "Host is Up"
Write-Host "Placing host" $VMHost "back into service."
    Enable-VMHost $VMHost
                        }
elseif ($Status -match "Down") {
Write-Host "Host is still rebooting"
sleep 120
CheckHostStatus
}
                    }
CheckHostStatus
}

1 ответ1

0

Get-VMHost возвращает «VMHost []» как тип.

Таким образом, каждый возвращаемый VMHost представляет собой собственный структурированный тип, а не простую строку.

Насколько я понимаю, структура VM-Host такова (у меня не установлены надстройки PS VM для двойной проверки):

  • государственный
  • Настраиваемые поля
  • Я БЫ
  • название

Так что, возможно, попробуйте использовать $VMHost.Name когда вы просто хотите (строковое) имя текущего VMHost:

$Status = Get-Clusternode -Cluster $Cluster -name $VMHost.Name | select state

Write-Host "Placing host " + $VMHost.Name + " back into service."

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .