0

下面的代码获取可用的数据中心名称并将它们添加到组合框。

function fill_dclist 
{
$comboBox1.Items.Clear()
$dclist = Get-Datacenter
foreach ($dc in $dclist)
{
$comboBox1.Items.add($dc.name.toString())
}

下面的代码应该读取上面组合框中的选定项,并使用它来搜索该数据中心名称并显示该数据中心的所有虚拟机。

function fill_updatevmlist 
{
$selecteddc = ($comboBox1.SelectedItem)
$dcvms = Get-datacenter -Name $selecteddc | get-VM 
foreach ($dcvm in $dcvms)
{
[void]$listBox1.Items.Add($vm.name)
}
}

组合框代码:

###DROPDOWN DC SELECT LIST###
$comboBox1.DataBindings.DefaultDataSourceUpdateMode = 0
$comboBox1.FormattingEnabled = $True
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 7
$System_Drawing_Point.Y = 7
$comboBox1.Location = $System_Drawing_Point
$comboBox1.Name = "comboBox1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 21
$System_Drawing_Size.Width = 121
$comboBox1.Size = $System_Drawing_Size
$comboBox1.TabIndex = 0
$comboBox1.add_Click({

fill_dclist
fill_updatevmlist

})

目前出现以下错误

Get-Datacenter : Cannot validate argument on parameter 'Name'. The argument is null or empty. Supply an argument th
at is not null or empty and then try the command again.
At C:\Users\Olly\Documents\Dropbox\_PROJECT\First Stage\Code\draft.ps1:251 char:30
+ $dcvms = Get-datacenter -Name <<<<  $selecteddc | get-VM 
    + CategoryInfo          : InvalidData: (:) [Get-Datacenter], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,VMware.VimAutomation.ViCore.Cmdlets.Commands.GetDat 
   acenter

Exception calling "Add" with "1" argument(s): "Value cannot be null.
Parameter name: item"
At C:\Users\Olly\Documents\Dropbox\_PROJECT\First Stage\Code\draft.ps1:254 char:26
+ [void]$listBox1.Items.Add <<<< ($vm.name)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

有高手吗?

4

1 回答 1

0

和上次一样,因为我没有 vspehere,所以你在这里是我的测试对象。:) 尝试:

function fill_updatevmlist 
{
    $selecteddc = ($comboBox1.SelectedItem.toString())
    $dcvms = Get-datacenter -Name $selecteddc | get-VM 
    foreach ($dcvm in $dcvms)
    {
        [void]$listBox1.Items.Add($dcvm.name)
    }
}

你在 foreach 循环中有错字。我不确定第一个错误。这可能是因为您尝试在组合框中选择任何内容之前更新列表框。因此,如果上述方法不起作用,请尝试将其也包括在内:

function fill_dclist 
{
    $comboBox1.Items.Clear()
    $dclist = Get-Datacenter
    foreach ($dc in $dclist)
    {
        $comboBox1.Items.add($dc.name.toString())
    }
}

删除你在做的那个组合框 add_click 的事情。组合框不是按钮。确保fill_dclist仅在表单加载时调用(如果您有刷新数据中心按钮)。但是,不要调用fill_updatevmlist负载。仅调用fill_updatevmlistcombobox1 的 selectedIndexChanged 事件。您使用 ex: 分配它$comboBox1.add_SelectedIndexChanged({fill_updatevmlist})。如果您确保仅在组合框具有新值之后调用 updatevmlist,它应该可以工作。

于 2013-01-10T18:07:33.783 回答