VMware Cluster>主持人> VM数据网格视图

时间:2015-01-26 15:29:33

标签: powershell datagrid powercli

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

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

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

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

最后,如果说列表中有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)
    }
}

1 个答案:

答案 0 :(得分:1)

在离开它之后做了一些挖掘,我能够将我的代码修改为下面的代码,它将采用多个值并用分号连接它们。这允许我将它们转储到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