【问题标题】:Passing multiple variables to parameter将多个变量传递给参数
【发布时间】:2013-03-08 11:39:21
【问题描述】:

语法: New-VirtualSwitch [-VMHost] [-Name] [[-NumPorts] ] [[-Nic] String[]]

我正在使用上面的 cmdlet 在 vSphere 中添加一个新的 vSwitch,我所缺乏的知识是如何使用代表四个 NIC 的四个复选框,并在选中时传递给 -Nic 参数。

例如下面的行不通

New-VirtualSwitch -VMHost $comboBox611.SelectedItem.toString() -Name $textBox611.Text -NumPorts 200 **-Nic $nic0,$nic1,$nic2,$nic3** -Mtu $textBox612.Text -Confirm

如语法所示,如何将每个复选框的变量传递给字符串数组?

$handler_linkLabel601_LinkClicked= 
{
if ($networkdataGridView.CurrentRow.Cells['VM Host'].Value.toString() -gt " ")
{
Add-Type -AssemblyName System.Windows.Forms
$form601 = New-Object Windows.Forms.Form
$form601.Size = New-Object Drawing.Size (250,270)
$form601.StartPosition = "CenterScreen"

$label611.Size = New-Object Drawing.Size (70,40)
$label611.Location = New-Object System.Drawing.Size (10,15)
$label611.Text = "vSwitch Name:"

$textBox611.Size = New-Object Drawing.Size (100,30)
$textBox611.Location = New-Object System.Drawing.Size (90,15)
$textBox611.Name = "vSwitch Name"

$label612.Size = New-Object Drawing.Size (50,20)
$label612.Location = New-Object System.Drawing.Size (10,55)
$label612.Text = "Host:"

$vmhostlist = Get-VMHost
    foreach ($vmhost in $vmhostlist)
    {
        $comboBox611.Items.add($vmhost.name.toString())
    }

$comboBox611.Size = New-Object Drawing.Size (100,20)
$comboBox611.Location = New-Object System.Drawing.Size (90,50)

$checkBox611.Size = New-Object Drawing.Size (20,20)
$checkBox611.Location = New-Object System.Drawing.Size (100,80)
# Add Click-Event
$checkBox611.Add_CheckStateChanged({
    If ($checkBox611.Checked) {
        $global:nic0 = "vmnic0"
    } Else {
         $global:nic0 = ""
    }
})
$checkBox612.Size = New-Object Drawing.Size (20,20)
$checkBox612.Location = New-Object System.Drawing.Size (170,80)
$checkBox611.Add_CheckStateChanged({
    If ($checkBox611.Checked) {
         $global:nic1 = "vmnic1"
    } Else {
         $global:nic1 = ""
    }
})
$checkBox613.Size = New-Object Drawing.Size (20,20)
$checkBox613.Location = New-Object System.Drawing.Size (100,100)
$checkBox611.Add_CheckStateChanged({
    If ($checkBox611.Checked) {
        $global:nic2 = "vmnic2"
    } Else {
         $global:nic2 = ""
    }
})
$checkBox614.Size = New-Object Drawing.Size (20,20)
$checkBox614.Location = New-Object System.Drawing.Size (170,100)
$checkBox611.Add_CheckStateChanged({
    If ($checkBox611.Checked) {
         $global:nic3 = "vmnic3"
    } Else {
         $global:nic3 = ""
    }
})
$label613.Size = New-Object Drawing.Size (80,20)
$label613.Location = New-Object System.Drawing.Size (10,140)
$label613.Text = "MTU Size:"

$textBox612.Size = New-Object Drawing.Size (100,20)
$textBox612.Location = New-Object System.Drawing.Size (90,140)
$textBox612.Name = "MTU"

$button = New-Object System.Windows.Forms.Button
$button.Size = New-Object Drawing.Size (90,30)
$button.Location = New-Object System.Drawing.Size (70,200)
$selectedvmhost = ($comboBox611.SelectedItem.toString())
$button.add_click({test})
$button.Text = "Add New vSwitch"
$form601.Controls.Add($button)
$form601.Controls.Add($textBox611)
$form601.Controls.Add($textBox612)
$form601.Controls.Add($label611)
$form601.Controls.Add($label612)
$form601.Controls.Add($label613)
$form601.Controls.Add($comboBox611)
$form601.Controls.Add($checkBox611)
$form601.Controls.Add($checkBox612)
$form601.Controls.Add($checkBox613)
$form601.Controls.Add($checkBox614)
$form601.ShowDialog()
}
ELSE
{}
}
function test
{
$nic = @($global:nic0,$global:nic1,$global:nic2,$global:nic3 | ? {-not [string]::IsNullOrEmpty($_)})
 if ( $nic.count )
    {
        New-VirtualSwitch -VMHost $comboBox611.SelectedItem.toString() -Name $textBox611.Text -NumPorts 200 -Nic $nic -Mtu $textBox612.Text -Confirm
    }
}

【问题讨论】:

  • 在你的代码中 $nic 从来没有得到一个值..
  • 忽略这一点,需要帮助将 $nic0 $nic1 $nic2 $nic3 移动到数组并传递给 -Nic 参数
  • 尝试将变量声明为 $global:nicX 并像第一个示例一样调用。

标签: arrays powershell powercli


【解决方案1】:

正如 C.B. 所说,将 $nic0 替换为 $global:nic0,将 $nic1 替换为 $global:nic1 等。 然后测试是

function test
{
    $nic = @($global:nic0,$global:nic1,$global:nic2,$global:nic3 | ? {-not [string]::IsNullOrEmpty($_)})
    if ( $nic.count )
    {
        New-VirtualSwitch -VMHost $comboBox611.SelectedItem.toString() -Name $textBox611.Text -NumPorts 200 -Nic $nic -Mtu $textBox612.Text -Confirm
    }
}

【讨论】:

  • 获取此“New-VirtualSwitch:无法验证参数“Nic”上的参数。参数为 null、空或参数集合的元素包含 null 值。提供一个不包含任何空值的集合,然后重试该命令。'
  • 我没发现什么问题,在test()中加write-host $global:nic0看看发生了什么。
  • 它打印 vmnic0 很好,但它只通过它的外观读取该变量。如果我选中另一个框,按钮什么也不做,命令似乎没有运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 2023-04-03
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多