new1234.jpg
Home > VMware > VMware: Mass change portgroup VM’s in cluster with PowerCLI

VMware: Mass change portgroup VM’s in cluster with PowerCLI

Last week I configured for a customer some new VLAN’s and created on each host new vSwitches with new portgroups, to migrate all VM’s in cluster with network label “VM Network” to “Production” I’ve created this script to automate this for all virtual machines with specific network label in cluster:

Original situation:

image


Script
:

#====================================================================#
#   SCRIPT:        PowerCLI_Mass_change_network_label.ps1            #
#   FUNCTION:      Mass change network label Network A to Network B  #
#   OWNER:         Sander Daems                                      #
#   VSPHERE:       5.0 Update 1 build 623860                         #
#   CREATED:       10/01/2013                                        #
#   MODIFIED:      10/01/2013                                        #
#   VERSION:       v.1.0                                             #
#====================================================================#
#   CHANGELOG:                                                       #
#                                                                    #
#    v.1.0                                                           #
#    - Script created;                                               #
#                                                                    #
#====================================================================#
#   HOST - Specify host and connect                                  #
#====================================================================#
$vCenterServer = Read-Host "Enter vCenter Hostname / IP"
Connect-VIServer $vCenterServer
#
#====================================================================#
# CUSTOM DEFINITIONS                                                 #
#====================================================================#
$Cluster = "Cluster01" 
$SourcePortgroup = "VM Network" 
$DestinationPortgroup = "Production" 
#
#====================================================================#
# SCRIPT                                                             #
#====================================================================#
Get-Cluster $Cluster | Get-VM | Get-NetworkAdapter | Where {$_.NetworkName -eq $SourcePortgroup } | Set-NetworkAdapter -NetworkName $DestinationPortgroup -Confirm:$false#====================================================================#

 

Result:


New situation
 (All VM’s in cluster):

image

sanderdaems

Sander Daems is founder and author of this blog and working as a Lead (Sr.) Consultant by UNICA ICT Solutions. Sander has over 15 years experience in IT, primary focus: virtualization and modern worksplace.

More Posts - Website

Follow Me:
TwitterLinkedIn

  1. Matthew
    January 11th, 2013  (Quote) at 10:26  (Quote) | #1

    Keep up the fantastic work , I read few blog posts on this website and I think that your site is rattling interesting and contains sets of fantastic info .

  2. Almero
    February 9th, 2018  (Quote) at 11:36  (Quote) | #2

    Great Stuff , anybody have a sample script of how to handle MANY Port Groups . As in , not a static value to OLD and NEW but an array . I have created an imported a CSV , but have no test environment . Don’t want to experiment in PROD 🙂

    If I have this
    $vNetworks = Import-Csv .\LDSvdsvss.csv | select OLDNetwork , NewNetwork

    Can i just foreach VM or VMadapter

    Get-VM -name $VM |Get-NetworkAdapter |Where {$_.NetworkName -eq $OldNetwork } |Set-NetworkAdapter -NetworkName $NewNetwork -Confirm:$true

  3. Almero
    February 9th, 2018  (Quote) at 14:37  (Quote) | #3

    Hello , just wanted to share the answer >

    $vNetworks = Import-Csv .\MANvdsvss.csv | select OLDNetwork , NewNetwork
    $ESXiHost = “hrlmgex5057.emea.hays.loc”
    $VMs = Get-VMHost -name $ESXiHost | Get-VM | select name

    Foreach ($ThisVM in $VMs){ # [0] run only 1st one in loop
    write-host “$($ThisVM.Name)”

    $Adaptors = Get-VM -name $ThisVM.Name |Get-NetworkAdapter
    ForEach($Adaptor in $Adaptors){
    If($Adaptor.NetworkName -in $vNetworks.OldNetwork){
    $ThisLookup = $vNetworks | Where{$_.OldNetwork -eq $Adaptor.NetworkName}
    write-host “–> $($Adaptor.Name) –> $($Adaptor.NetworkName) –> $($ThisLookup.NewNetwork)”

    $Adaptor |Set-NetworkAdapter -NetworkName $ThisLookup.NewNetwork -whatif -Confirm:$true
    }
    }

  1. No trackbacks yet.