У меня есть сценарий PowerShell, который используется для возврата информации для каждого хоста в указанном пользователем кластере. Пользователь указывает vCenter и кластер в качестве параметров, и сценарий работает должным образом.
Я пытаюсь изменить этот сценарий, чтобы пользователю нужно было только передать vCenter в качестве параметра, и он возвращал информацию для всех хостов во всех кластерах.
Вот оригинальный скрипт, который у меня есть, который работает:
Param(
$vc,
$ClusterName
)
Add-PSSnapin VMware.VimAutomation.Core
Connect-VIServer $vc
$VMHosts = Get-Cluster $ClusterName | Get-VMHost | ? { $_.ConnectionState -eq "Connected" } | Sort-Object -Property Name
foreach ($VMHost in $VMHosts) {
Get-VMHostStorage -RescanAllHba -VMHost $VMHost | Out-Null
$esx = Get-VMHost $VMHost
foreach($hba in (Get-VMHostHba -VMHost $esx -Type "FibreChannel")){
$target = ((Get-View $hba.VMhost).Config.StorageDevice.ScsiTopology.Adapter | where {$_.Adapter -eq $hba.Key}).Target
$luns = Get-ScsiLun -Hba $hba -LunType "disk"
$nrPaths = ($target | %{$_.Lun.Count} | Measure-Object -Sum).Sum
$deadPaths = $luns | Get-ScsiLunPath | Group-Object -Property state | ? { $_.Name -eq "Dead"}
$hbaDevice = $hba.Device
$targetCount = $target.Count
$lunsCount = $luns.Count
$deadPathCount = $deadPaths.Count
"vmhost=$VMHost;hba=$hbaDevice;targets=$targetCount;devices=$lunsCount;paths=$nrPaths;deadpaths=$deadPathsCount|"
}
}
Disconnect-VIServer -Confirm:$False
А вот моя модифицированная версия:
Param(
$vc
)
Add-PSSnapin VMware.VimAutomation.Core
Connect-VIServer $vc
$clusters = Get-Cluster
foreach ($cluster in $clusters) {
$clusterName = $cluster.name
$VMHosts = Get-Cluster $clusterName | Get-VMHost | ? { $_.ConnectionState -eq "Connected" } | Sort-Object -Property Name
foreach ($VMHost in $VMHosts) {
Get-VMHostStorage -RescanAllHba -VMHost $VMHost | Out-Null
$esx = Get-VMHost $VMHost
foreach($hba in (Get-VMHostHba -VMHost $esx -Type "FibreChannel")){
$target = ((Get-View $hba.VMhost).Config.StorageDevice.ScsiTopology.Adapter | where {$_.Adapter -eq $hba.Key}).Target
$luns = Get-ScsiLun -Hba $hba -LunType "disk"
$nrPaths = ($target | %{$_.Lun.Count} | Measure-Object -Sum).Sum
$deadPaths = $luns | Get-ScsiLunPath | Group-Object -Property state | ? { $_.Name -eq "Dead"}
$hbaDevice = $hba.Device
$targetCount = $target.Count
$lunsCount = $luns.Count
$deadPathCount = $deadPaths.Count
"vmhost=$VMHost;hba=$hbaDevice;targets=$targetCount;devices=$lunsCount;paths=$nrPaths;deadpaths=$deadPathsCount|"
}
}
}
Disconnect-VIServer -Confirm:$False
Ошибка, которую я получаю:
Could not execute powershell command.
At \\xx\xxx\xxxx\scripts\vmwarePathCheckAllClusters.ps1:35 char:26
+ Get-VMHostStorage <<<< -RescanAllHba -VMHost $VMHost | Out-Null
Кажется, что $VMHost
возвращается как null, но я не могу понять, почему!
Я впервые использую PowerCLI CommandLets, и я также новичок в PowerShell. Я уверен, что это что-то очень простое, и буду признателен за любую помощь. Если вам потребуется дополнительная информация, я буду более чем счастлив предоставить. УДАР!
РЕДАКТИРОВАТЬ: Вот дополнительная информация об ошибке:
+ Get-VMHostStorage <<<< -RescanAllHba -VMHost $VMHost | Out-Null ---> VMware.VimAutomation.Sdk.Types.V1.ErrorHandling.VimException.VimException: 9/24/2014 5:58:57 AM Get-VMHostStorage Value cannot be found for the mandatory parameter VMHost ---> System.Management.Automation.ParameterBindingException: Value cannot be found for the mandatory parameter VMHost
$clusters
? Если да, то когда вы используете свой первый циклforeach
, правильно ли$cluster.name
заполняет$ClusterName
? Кроме того, возможно, изменение вашего кода для использования одного кластера в качестве теста может пролить некоторый свет на то, существует ли другая основная проблема, отличная от вашего измененного сценария. - person Kris Powell   schedule 23.09.2014$cluster
и$clusterName
заполняются правильно. Я попробовал ваше предложение, изменив код, чтобы принять только один статически установленный кластер. Поменял$clusters = Get-Cluster
на$clusters = @("server_name")
и все заработало! К сожалению, я до сих пор не могу понять, почему это происходит. Спасибо за предложение. - person Zanmato   schedule 24.09.2014