Search code examples
powershellautomationvmwarepowercli

IF Statement to Verify VLAN Exists in PowerCLI Script


I am writing a PowerCLI script to automate the creation of VMs based on the data within a CSV file and I would like to know how to format an IF statement to check if the VLANs specified already exist to avoid cluttering up the screen with errors.

The section of the script dealing with the VLAN creation in its current format:

  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 

I would like to determine a way to have the script do something like:

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)
        }

I don't have much experience in writing these so I was hoping for some assistance on how to

  1. Check whether the VLAN already exists in vSphere on the switch

  2. How to format the IF/ELSE statement properly to avoid cluttering up the PowerCLI window with errors when the script is run

Thank you for any assistance you may provide


Solution

  • EDIT to work for vlan rather than vswitch

    You could use get-virtualportgroup for this and check if the names returned contain your vlanid. This won't work for distributed switches as that's a different set of cmdlets.

    $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
    }