我希望创建一个简单的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)
}
}
答案 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