当前位置: 首页 > 知识库问答 >
问题:

无法使用PowerCLI返回PowerShell中多个群集中主机的信息

梁华清
2023-03-14

我有一个PowerShell脚本,用于返回用户指定集群上每个主机的信息。用户提供vCenter和cluster in作为参数,脚本按预期工作。

我正在尝试修改这个脚本,这样用户只需要将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

编辑:以下是其他错误信息:

+         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

共有1个答案

宫子晋
2023-03-14

您是否测试了在没有-rescanallhba的情况下运行get-vmhoststorage?您为什么认为$VMHOST会作为NULL返回?也许它找到了主机,但没有什么可以重新扫描的?只是猜测。

不确定这会导致您的问题,但您不需要运行get-cluster两次。相反,

$VMHosts = $cluster | Get-VMHost  | ? <etc>

编辑-对于脚本的给定运行,完整的错误文本出现多少次?在那次运行中找到了多少vmhosts?您有没有一个没有主机的集群?没有存储的主机?如果一个循环迭代的值似乎破坏了下一个迭代,则可以设置$vmhost=$null$cluster=$null。(对不起,应该有更好的表达方式...希望你明白我的意思。)您可以始终将出错的代码行放在[try]块中,并使用catch处理错误。

再次编辑-显然这为处于维护模式的主机修复了它:if(!$VMHost){continue}

 类似资料:
  • 我使用的是infra team(不是mini kube)提供的kubernetes集群,我已经创建了带有所有配置的traefik入口控制器,入口容器,我们的应用程序正在集群中运行。现在我想使用域名或IP地址访问应用程序,为此,我创建了一个入口资源,如下所示 这里我没有得到的是主机名,因为应用程序在集群中运行,这个主机名应该是集群主节点名吗?实际prod环境中的主机名或ip地址应该是什么。 注意:我

  • 我们有kafka集群,包含3个kafka代理节点和3个zookeepers服务器 Kafka版本- 10.1 ( hortonworks) 根据我的理解,因为所有的元数据都位于zookeeper服务器上,kafka代理正在使用这些数据(kafka通过端口2181与zookeeper服务器对话) 我只是想知道是否每台kafka机器都与集群中的其他kafka交谈,或者kafka可能只在动物园管理员服务

  • 上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatisfieddependencyexception:创建名为“mongo bootapplication”的bean时出错:通过字段“repository”表示的不满足的依赖关系;嵌套异常为org.springframework.beans.factory.BeanCreatio

  • 本文向大家介绍PowerShell函数一次返回多个返回值示例,包括了PowerShell函数一次返回多个返回值示例的使用技巧和注意事项,需要的朋友参考一下 本文介绍在自定义PowerShell函数时,如何让函数返回值,如何接收返回值,如何让不相干的内容不放到返回值数组中。 PowerShell函数体中的任何输出,一般来说,都会以返回值的形式返回给函数调用者。多个输出的内容是放到一个返回值数组中的。

  • 我想将配置文件中的多个Cassandraendpoint提供给我的Java应用程序。 例如:cassandra主机:“主机1,主机2” 我尝试了< code > addContactPoints(host),但它不起作用。如果其中一个Cassandra节点关闭,我不希望我的应用程序关闭。