【发布时间】:2015-04-17 22:09:43
【问题描述】:
我的脚本的目的是从我们的 vcenter 获取整个虚拟机列表,检查它们是否有 DNS 条目 - 如果 dns 条目为空,则输出虚拟机名称和相应的 IP 地址。很简单,但是我在将 VM 名称数组与 IP 地址数组结合起来时遇到了麻烦。这就是我的意思:
$mainArray = @()
$vmArray = @()
$ipArray = @()
$vms = Get-VM | select Name, @{N="DnsName"; E={$_.ExtensionData.Guest.Hostname}}, @{N="IPAddress"; E={$_.Guest.IPAddress[0]}}
foreach ($vm in $vms)
{
$dnsname = $vm.DnsName
$ipaddr = $vm.IPAddress
$vmname = $vm.Name
if (!$vm.DNSName) #if DNS name is null
{
$vmArray += $vmname
$ipArray += $ipaddr
}
}
$item = New-Object PSObject
$item | Add-Member -type NoteProperty -Name 'VM Name' -Value $vmArray
$item | Add-Member -type NoteProperty -Name 'IP Address' -Value $ipArray
$mainArray += $item
$mainArray | ft -wrap -autosize
这会输出彼此相邻的两列,但输出用逗号分隔并用椭圆截断。我知道有更好的方法可以做到这一点,所以我愿意接受建议。也很想知道如何使这项工作只是为了我自己的理解。感谢大家的帮助。
【问题讨论】:
-
您只关心屏幕上的输出吗?我猜数据在那里。您只是看到了 PowerShell 向控制台显示数组的作用。数据还在。这只会生成一行吗?您是否期望您的表格中有更多结果?
-
对不起,我应该更具体一些。是的,数据看起来不错,是的,它只生成一行。有很多数据(超过 300 台虚拟机),并且在第 5 台虚拟机处被截断。我希望将其输出为显示在两个干净列中的列表(每行一个值)。一列用于 VM 名称,另一列用于对应的 IP 地址。我想我已经接近了,但不确定我是否会以最好的方式解决这个问题。
标签: arrays powershell powercli