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

Powershell VMware群集>;主机>;虚拟机数据网格视图,powershell,datagrid,powercli,Powershell,Datagrid,Powercli,我希望创建一个简单的powershell脚本,该脚本将获取vcenter中的所有集群,并为每个集群获取该集群中主机的列表,然后列出该集群中的所有VM。我可以很容易地创建datagrid,但我不确定如何让它更改行大小 目前我有这个,但我不知道它是否真的有效: $Grid.Columns["Hosts"].DefaultCellStyle.WrapMode = [System.Windows.Forms.DataGridViewTriState]::True 目前,当我运行它时,我会得到包含3列(

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

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

$Grid.Columns["Hosts"].DefaultCellStyle.WrapMode = [System.Windows.Forms.DataGridViewTriState]::True
目前,当我运行它时,我会得到包含3列(集群、主机、虚拟机)的网格。但是,在主机和虚拟机中,它显示System.Object[],而不是列出所有主机和虚拟机

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

下面是我为获取集群、主机和虚拟机的函数所做的一些工作。也许我的问题在于为什么它显示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工作表中,然后我可以在分号上进行查找/替换以分离出值

此外,我构建了一个数组来添加我想要的值,并将其导入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
会有帮助的