我有一个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
您是否测试了在没有-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节点关闭,我不希望我的应用程序关闭。