Skip to content

VirtuallyThatGuy

Anything VMware , PowerCLI, PowerShell, Automation and some Windows

Menu
  • Home
  • PowerCLI
  • VMware
  • Automation
  • Windows
  • About
Menu

Script: How to Create VMware Distributed Switch or Virtual Distributed Switch VDS Using Powercli – VirtuallyThatGuy

Posted on April 26, 2019December 19, 2025 by VirtuallyThatGuy

I often rebuild my lab and wanted to script something simple to recreate the VDS once I blast the lab. This is a very simple script I worked on to create my VDS environment and uplinks teaming.

Start-Transcript -Path C:\scripts\transcripts\create_vds_vmkDTCP-vDS-Switch.txt

#### Create Portgroups for vDS
Import-Module vmware.vimautomation.core
#Connect-VIServer DTCP-vc01.lab.local, DTCP-vc01.lab.local
Connect-VIServer uk3P-vc01.lab.local, ntcP-vc01.lab.local -User "[email protected]" -Password "StandUpIfYouHateTottenham"

$myDatacenter = Get-Datacenter -Name "LON-Datacenter"
New-VDSwitch -Name "DTCP-vDS-Switch" -Location $myDatacenter -NumUplinkPorts 6 -Version 6.0.0

# Set the VDS Name to variable
$vds = "DTCP-vDS-Switch"
$vdsname = get-vdswitch $vds

Get-vdswitch $vdsname | New-VDPortgroup -name 'Management_DTCP' -NumPorts 6 -PortBinding Ephemeral
get-vdswitch $vdsname | Get-VDPortgroup Management_DTCP | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -UnusedUplinkPort 'dvUplink3', 'dvUplink4', 'dvUplink5', 'dvUplink6'
get-vdswitch $vdsname | Get-VDPortgroup Management_DTCP| Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -ActiveUplinkPort 'dvUplink1', 'dvUplink2'

Get-vdswitch $vdsname | New-VDPortgroup -name 'vMotion_DTCP' -NumPorts 6 -PortBinding Ephemeral
get-vdswitch $vdsname | Get-VDPortgroup vMotion_DTCP | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -UnusedUplinkPort 'dvUplink1', 'dvUplink2', 'dvUplink5', 'dvUplink6'
get-vdswitch $vdsname | Get-VDPortgroup vMotion_DTCP | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -ActiveUplinkPort 'dvUplink3', 'dvUplink4'

#### VM Networks

Get-vdswitch $vdsname | New-VDPortgroup -name 'DTCP-Windows-vDS' -NumPorts 6 -PortBinding Ephemeral
get-vdswitch $vdsname | Get-VDPortgroup DTCP-Windows-vDS | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -UnusedUplinkPort 'dvUplink1', 'dvUplink2', 'dvUplink3', 'dvUplink4'
get-vdswitch $vdsname | Get-VDPortgroup DTCP-Windows-vDS | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -ActiveUplinkPort 'dvUplink5', 'dvUplink6'

Get-vdswitch $vdsname | New-VDPortgroup -name 'DTCP-Linux-vDS' -NumPorts 6 -PortBinding Ephemeral
get-vdswitch $vdsname | Get-VDPortgroup DTCP-Linux-vDS | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -UnusedUplinkPort 'dvUplink1', 'dvUplink2', 'dvUplink3', 'dvUplink4'
get-vdswitch $vdsname | Get-VDPortgroup DTCP-Linux-vDS | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -ActiveUplinkPort 'dvUplink5', 'dvUplink6'

Get-vdswitch $vdsname | New-VDPortgroup -name 'DTCP-Appliance-vDS' -NumPorts 6 -PortBinding Ephemeral
get-vdswitch $vdsname | Get-VDPortgroup DTCP-Appliance-vDS | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -UnusedUplinkPort 'dvUplink1', 'dvUplink2', 'dvUplink3', 'dvUplink4'
get-vdswitch $vdsname | Get-VDPortgroup DTCP-Appliance-vDS | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -ActiveUplinkPort 'dvUplink5', 'dvUplink6'

Get-vdswitch $vdsname | New-VDPortgroup -name 'DTCP-DMZ-vDS' -NumPorts 6 -PortBinding Ephemeral
get-vdswitch $vdsname | Get-VDPortgroup DTCP-DMZ-vDS | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -UnusedUplinkPort 'dvUplink1', 'dvUplink2', 'dvUplink3', 'dvUplink4'
get-vdswitch $vdsname | Get-VDPortgroup DTCP-DMZ-vDS | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -ActiveUplinkPort 'dvUplink5', 'dvUplink6'



#### iSCSI Networks


Get-vdswitch $vdsname | New-VDPortgroup -name 'iSCSI_1_DTCP' -NumPorts 6 -PortBinding Ephemeral
get-vdswitch $vdsname | Get-VDPortgroup iSCSI_1_DTCP | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -UnusedUplinkPort 'dvUplink1', 'dvUplink2', 'dvUplink3', 'dvUplink4', 'dvUplink6'
get-vdswitch $vdsname | Get-VDPortgroup iSCSI_1_DTCP | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -ActiveUplinkPort 'dvUplink7'

Get-vdswitch $vdsname | New-VDPortgroup -name 'iSCSI_2_DTCP' -NumPorts 6 -PortBinding Ephemeral
get-vdswitch $vdsname | Get-VDPortgroup iSCSI_2_DTCP | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -UnusedUplinkPort 'dvUplink1', 'dvUplink2', 'dvUplink3', 'dvUplink4', 'dvUplink5'
get-vdswitch $vdsname | Get-VDPortgroup iSCSI_2_DTCP | Get-VDUplinkTeamingPolicy | Set-VDUplinkTeamingPolicy -ActiveUplinkPort 'dvUplink8'

# List the vLANS after creation
Write-Host "`nPortgroups created. Now confirming settings" -ForegroundColor Cyan
Get-VDSwitch $vdsname | Get-VDPortgroup | select name, numports, portbinding, vlanconfiguration

Stop-Transcript
 


Start-Transcript​​ -Path​​ C:\scripts\transcripts\create_vds_vmkDTCP-vDS-Switch.txt

 

#### Create Portgroups for vDS

Import-Module​​ vmware.vimautomation.core

#Connect-VIServer DTCP-vc01.lab.local, DTCP-vc01.lab.local

Connect-VIServer​​ uk3P-vc01.lab.local,​​ ntcP-vc01.lab.local​​ -User​​ "[email protected]"​​ -Password​​ "StandUpIfYouHateTottenham"

 

$myDatacenter​​ =​​ Get-Datacenter​​ -Name​​ "LON-Datacenter"

New-VDSwitch​​ -Name​​ "DTCP-vDS-Switch"​​ -Location​​ $myDatacenter​​ -NumUplinkPorts​​ 6​​ -Version​​ 6.0.0

 

# Set the VDS Name to variable

$vds​​ =​​ "DTCP-vDS-Switch"

$vdsname​​ =​​ get-vdswitch​​ $vds

 

Get-vdswitch​​ $vdsname​​ |​​ New-VDPortgroup​​ -name​​ 'Management_DTCP'​​ -NumPorts​​ 6​​ -PortBinding​​ Ephemeral

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ Management_DTCP​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -UnusedUplinkPort​​ 'dvUplink3',​​ 'dvUplink4',​​ 'dvUplink5',​​ 'dvUplink6'

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ Management_DTCP|​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -ActiveUplinkPort​​ 'dvUplink1',​​ 'dvUplink2'

 

Get-vdswitch​​ $vdsname​​ |​​ New-VDPortgroup​​ -name​​ 'vMotion_DTCP'​​ -NumPorts​​ 6​​ -PortBinding​​ Ephemeral

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ vMotion_DTCP​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -UnusedUplinkPort​​ 'dvUplink1',​​ 'dvUplink2',​​ 'dvUplink5',​​ 'dvUplink6'

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ vMotion_DTCP​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -ActiveUplinkPort​​ 'dvUplink3',​​ 'dvUplink4'

 

#### VM Networks

 

Get-vdswitch​​ $vdsname​​ |​​ New-VDPortgroup​​ -name​​ 'DTCP-Windows-vDS'​​ -NumPorts​​ 6​​ -PortBinding​​ Ephemeral

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ DTCP-Windows-vDS​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -UnusedUplinkPort​​ 'dvUplink1',​​ 'dvUplink2',​​ 'dvUplink3',​​ 'dvUplink4'

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ DTCP-Windows-vDS​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -ActiveUplinkPort​​ 'dvUplink5',​​ 'dvUplink6'

 

Get-vdswitch​​ $vdsname​​ |​​ New-VDPortgroup​​ -name​​ 'DTCP-Linux-vDS'​​ -NumPorts​​ 6​​ -PortBinding​​ Ephemeral

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ DTCP-Linux-vDS​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -UnusedUplinkPort​​ 'dvUplink1',​​ 'dvUplink2',​​ 'dvUplink3',​​ 'dvUplink4'

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ DTCP-Linux-vDS​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -ActiveUplinkPort​​ 'dvUplink5',​​ 'dvUplink6'

 

Get-vdswitch​​ $vdsname​​ |​​ New-VDPortgroup​​ -name​​ 'DTCP-Appliance-vDS'​​ -NumPorts​​ 6​​ -PortBinding​​ Ephemeral

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ DTCP-Appliance-vDS​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -UnusedUplinkPort​​ 'dvUplink1',​​ 'dvUplink2',​​ 'dvUplink3',​​ 'dvUplink4'

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ DTCP-Appliance-vDS​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -ActiveUplinkPort​​ 'dvUplink5',​​ 'dvUplink6'

 

Get-vdswitch​​ $vdsname​​ |​​ New-VDPortgroup​​ -name​​ 'DTCP-DMZ-vDS'​​ -NumPorts​​ 6​​ -PortBinding​​ Ephemeral

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ DTCP-DMZ-vDS​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -UnusedUplinkPort​​ 'dvUplink1',​​ 'dvUplink2',​​ 'dvUplink3',​​ 'dvUplink4'

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ DTCP-DMZ-vDS​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -ActiveUplinkPort​​ 'dvUplink5',​​ 'dvUplink6'

 

 

 

#### iSCSI Networks

 

 

Get-vdswitch​​ $vdsname​​ |​​ New-VDPortgroup​​ -name​​ 'iSCSI_1_DTCP'​​ -NumPorts​​ 6​​ -PortBinding​​ Ephemeral

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ iSCSI_1_DTCP​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -UnusedUplinkPort​​ 'dvUplink1',​​ 'dvUplink2',​​ 'dvUplink3',​​ 'dvUplink4',​​ 'dvUplink6'

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ iSCSI_1_DTCP​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -ActiveUplinkPort​​ 'dvUplink7'

 

Get-vdswitch​​ $vdsname​​ |​​ New-VDPortgroup​​ -name​​ 'iSCSI_2_DTCP'​​ -NumPorts​​ 6​​ -PortBinding​​ Ephemeral

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ iSCSI_2_DTCP​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -UnusedUplinkPort​​ 'dvUplink1',​​ 'dvUplink2',​​ 'dvUplink3',​​ 'dvUplink4',​​ 'dvUplink5'

get-vdswitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ iSCSI_2_DTCP​​ |​​ Get-VDUplinkTeamingPolicy​​ |​​ Set-VDUplinkTeamingPolicy​​ -ActiveUplinkPort​​ 'dvUplink8'

 

# List the vLANS after creation

Write-Host​​ "`nPortgroups created. Now confirming settings"​​ -ForegroundColor​​ Cyan

Get-VDSwitch​​ $vdsname​​ |​​ Get-VDPortgroup​​ |​​ select​​ name,​​ numports,​​ portbinding,​​ vlanconfiguration

 

Stop-Transcript

​​ 

 

Hope you find this helpful. You can upgrade your VDS to version 6.5.0 then after. I chose version 6.0.0 as I have ESXi 6.0.0 in the lab.

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • vROps: Management Pack Troubleshooting
  • Windows AD {Active Directory} (PowerShell) samples
  • Migrate VMs Between vCentres Using Powershell or PowerCLI
  • Set VM Tools to Update Automatically on VM Reboot using powershell
  • Windows Administrator Must Have Powershell Commands

Recent Comments

  • JB on Script: How to get VM with Tag Assignment and export results to csv using PowerCLI or Powershell
  • DL on How to change VCSA root password and bypass BAD PASSWORD: it is based on a dictionary word for vCenter VCSA root account warning
  • 360coolp on How to change VCSA root password and bypass BAD PASSWORD: it is based on a dictionary word for vCenter VCSA root account warning
  • Yogesh on ESXi 8.x, 7.x, 6.x Service sfcbd-watchdog Not Running / Fails to Start – VirtuallyThatGuy
  • VirtuallyThatGuy on ESXi 8.x, 7.x, 6.x Service sfcbd-watchdog Not Running / Fails to Start – VirtuallyThatGuy

Archives

  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • February 2018
  • January 2018
  • December 2017

Categories

  • Automation
  • PowerCLI
  • VMware
  • Windows
© 2026 VirtuallyThatGuy | Powered by Superbs Personal Blog theme