用于验证 PowerCLI 脚本中是否存在 VLAN 的 IF 语句

IF Statement to Verify VLAN Exists in PowerCLI Script

我正在编写 PowerCLI 脚本以根据 CSV 文件中的数据自动创建 VM,我想知道如何设置 IF 语句的格式以检查指定的 VLAN 是否已经存在以避免弄乱屏幕有错误。

以当前格式处理 VLAN 创建的脚本部分:

  New-VM -Name $_.Name -VMHost ($esx | Get-Random) -NumCPU $_.NumCPU -Location $Folder  

    $list = Get-Cluster $_.Cluster | Get-VMHost
    foreach ($esxhost in $list)
    { Get-VirtualSwitch -Name $switch -VMHost $esxhost |
      New-VirtualPortgroup -Name "VLAN $($_.VLAN)" -VLANID $($_.VLAN)
    }

  Write-Host "Wait - propagating VLAN $($_.VLAN) to all hosts" -foreground yellow
  Start-Sleep 10 

我想确定一种让脚本执行类似操作的方法:

IF $_.VLAN exists 
 Write-host "$_.VLAN already present, proceeding to next step"

ELSE  DO{ Get-VirtualSwitch -Name $switch -VMHost $esxhost |
          New-VirtualPortgroup -Name "VLAN $($_.VLAN)" -VLANID $($_.VLAN)
        }

我没有太多写这些的经验,所以我希望得到一些关于如何

的帮助
  1. 检查交换机vSphere中是否已经存在该VLAN

  2. 如何正确格式化 IF/ELSE 语句以避免在脚本为 运行

    [= 时使 PowerCLI window 因错误而混乱29=]

感谢您提供的任何帮助

编辑以用于 vlan 而不是 vswitch

您可以为此使用 get-virtualportgroup 并检查返回的名称是否包含您的 vlanid。这不适用于分布式交换机,因为那是一组不同的 cmdlet。

$host = 'YourHost'
$vlanid = 'YourVlanId'

if ((Get-VirtualPortGroup -host $host).VLanId -contains $vlanid )
{
    Write-Output 'vlan present'
}
else
{
   Write-Output 'vlan missing'
   #your code to create vlan here
}