在PowerCLI脚本中验证VLAN存在的IF语句

时间:2016-12-07 13:40:53

标签: powershell automation vmware powercli

我正在编写一个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窗口混乱

  3. 感谢您提供的任何帮助

1 个答案:

答案 0 :(得分:1)

编辑为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
}