0

以下のコードは、利用可能なデータセンター名を取得し、それらをコンボボックスに追加します。

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

以下のコードは、上記のコンボボックスで選択された項目を読み取り、これを使用してそのデータセンター名を検索し、そのデータセンターのすべてのVMを表示する必要があります。

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 に答える