VMware 集群 > 主机 > 虚拟机数据网格视图

VMware Cluster > Host > VM datagrid view

我想创建一个简单的 powershell 脚本,它将获取 vcenter 中的所有集群,并为每个集群获取该集群中的主机列表,然后列出该集群中的所有 VM。我可以很容易地创建数据网格,但不确定如何使用它来更改行大小。

目前我有这个,但我不知道它是否真的有效:

$Grid.Columns["Hosts"].DefaultCellStyle.WrapMode = [System.Windows.Forms.DataGridViewTriState]::True

目前,当我 运行 它时,我得到了包含 3 列(集群、主机、虚拟机)的网格。但是在主机和虚拟机中它显示 System.Object[] 而不是列出所有主机和虚拟机。

最后,如果说列表中有 5 台主机,该行是否可以增加到 5 行宽。如果在同一个集群中有 14 个虚拟机,我可以让它列出虚拟机说 5,然后 5,然后 4(所以几乎在行中有列)?

以下是我获取集群、主机和 VM 的功能。也许我的问题在于为什么显示 System.Object:

Function Get-Info
{
$clusters = Get-Cluster

Foreach ($cluster in $clusters)
   {
    $hosts = get-cluster -name $cluster | get-vmhost | select Name
    $vms = get-cluster -name $cluster | get-vm | select Name 

$Grid.Rows.Add($cluster,$hosts,$vms)
    }
}

离开它后进行一些挖掘,我能够将我的代码修改为下面的代码,它将采用多个值并用分号连接它们。这允许我将它们转储到 Excel sheet 中,然后我可以在分号上做一个 Find/replace 来分隔值。

此外,我构建了一个数组来添加我想要的值并将其通过管道传输到 CSV 文件中。

$array = @()

$clusters = Get-Cluster

Foreach ($cluster in $clusters)
{

 $hosts = get-cluster -name $cluster | get-vmhost
 $gethosts =  ($hosts.Name | % { (get-vmhost $_).Name;}) -join ';';
 $vms = get-cluster -name $cluster | get-vm
 $getvms =  ($vms.Name | % { (get-vm $_).Name;}) -join ';';


    $obj = New-Object PSObject

    $obj | Add-Member -MemberType NoteProperty -Name "Cluster" -Value $cluster

    $obj | Add-Member -MemberType NoteProperty -Name "Hosts" -Value $gethosts

    $obj | Add-Member -MemberType NoteProperty -Name "VMs" -Value $getvms

    $array += $obj
}


$array |  select Cluster, Hosts, VMs| export-csv "c:\temp\test\clusterinfo.csv" -NoTypeInformation -encoding ASCII -force