Search
website about Regular Expressions
VLAN.csv file
vswitch,vlanname,vlanid
vswitch0,MGMT,2
vswitch0,BROKER,10
.
param(
$server="<hostIP>",
$password="pwd",
$file="VLANS.csv"
)
# preparing values
# BROKER & MGMT are
# always the same so can be specified explicitly
$portgrpexmatch = "BROKER","MGMT"
# match to be on the start and end of the string as array values
# and string match in the middle
# separated by comma
$portgrpsematch = @("START","_OP_END")
# match on the beginning to the Port Group name i.e. partial match
$portgrpptmatch = "START-P2P-"
$errorActionPreference = "SilentlyContinue"
<# old way loading Snapin
if ((Get-PSSnapin | Where {$_.Name -eq "VMware.VimAutomation.Core"}) -eq $null)
{ Write-Output "Importing VMware.VimAutomation.Core Snapin"
Add-PSSnapin VMware.VimAutomation.Core}
#>
if ((Get-Module | Where {$_.Name -eq "VMware.VimAutomation.Core"}) -eq $null)
{ Write-Output "Importing VMware.VimAutomation.Core Module ..."
Import-Module VMware.VimAutomation.Core}
$scriptPath = Split-Path $SCRIPT:MyInvocation.MyCommand.Path -Parent
# import csv file
$fname = $scriptPath + [char]92 + $file
$vlanFile = Import-CSV $fname
# connect to ESXi host
Write-Output "Connecting to host $server"
$svr = Connect-VIServer -Server $server -User root -Password $password
$vmHost = Get-VMHost -Server $svr
# Create Portgroups with default security settings from CSV file
Write-Output "Creating PortGroups with default security settings ..."
$vlanfile | % { Get-VirtualSwitch -VMHost $vmHost -Name $_.vSwitch | New-VirtualPortGroup -Name $_.vlanName -VLanId $_.vlanID }
# Write-Output "PortGroup $($_.vlanname) with VLAN ID $($_.vlanID) has been created on Virtual Switch $($_.vSwitch)" }
Write-Output "PortGroups were successfully created"
Write-Output ""
Write-Output "Updating SecurityPolicy on selected Port Groups ..."
#updating SecurityPolicy - explicit match
$portgrpexmatch | % {
Write-Output "Updating SecurityPolicy on $_ Port Group ..."
Get-VirtualPortGroup -Name $_ | Get-SecurityPolicy | Set-SecurityPolicy -AllowPromiscuous $true -MacChanges $true -ForgedTransmits $true }
#updating SecurityPolicy - match on the start and end of the string
$portgrpset = $vlanFile | where {($_.vlanname -match ('^'+$portgrpsematch[0]+'[A-B]'+$portgrpsematch[1]+'$'))}
$portgrpset | % {
Write-Output "Updating VLAN SecurityPolicy on $($_.vlanname) Port Group ..."
Get-VirtualPortGroup -Name $_.vlanname | Get-SecurityPolicy | Set-SecurityPolicy -AllowPromiscuous $true -MacChanges $true -ForgedTransmits $true }
#updating SecurityPolicy - partial match from the begining of string
$portgrpset = $vlanFile | where {($_.vlanname -match '^'+$portgrpptmatch )} #+ '$')}
$portgrpset | % {
Write-Output "Updating P2P VLAN SecurityPolicy on $($_.vlanname) Port Group ..."
Get-VirtualPortGroup -Name $_.vlanname | Get-SecurityPolicy | Set-SecurityPolicy -AllowPromiscuous $true -MacChanges $true -ForgedTransmits $true }
Write-Output "Updating default portgroups ..."
Write-Output "Removing VM Network portgroup ..."
Get-VirtualPortGroup -Name "VM Network" | Remove-VirtualPortGroup
Write-Output "Renaming Management Network portgroup to Management Kernel ..."
Get-VirtualPortGroup -Name "Management Network" | set-VirtualPortGroup -Name "Management Kernel"
# close connection to ESXi host
Write-Output "Disconnecting from host $server ..."
Disconnect-VIServer -Server $server -Force -Confirm:$false
VLAN.csv file
vswitch,vlanname,vlanid
vswitch0,MGMT,2
vswitch0,BROKER,10
.

