VMware Cloud Community
brisketx
Contributor
Contributor
Jump to solution

Trying to change multiple network adapters on a virtual machine

Here is what i have to change multiple vm's with one adapter:

$test5 = Import-Csv C:\test5.csv

foreach ($vm in $test5) {

$server= $vm.name

$networkname= $vm.networkname

Write-host "Changing $server to new network $networkname "

Get-VM $server | Get-NetworkAdapter | Set-NetworkAdapter -networkname $networkname -confirm:$false

####Start server

Write-Host "Done, Starting $server"

Start-VM $server -confirm:$false

Write-Host "Complete!"

}

This looks at a spreadsheet with name in one column and networkname in the other and sets the adapter accordingly.  It works as long as there is only one network adapter to set...for example if there is a vm with vlan1 for 3 nics on a vm it will set all 3 adapters to vlan 1 but if one network adapter is different than vlan 1 it will fail.  How would I set a vm with multiple network adapters?  I tried separating with a comma but it doesn't like it.  Any ideas?

Reply
0 Kudos
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

You can add some additional columns in your CSV file.

Something like this

Name,NetworkName1,NetworkName2,NetworkName3

vm1,net1,net2,net3

vm2,net1,net1,net1

Then you could change the code something like this

$test5 = Import-Csv C:\test5.csv

foreach ($vm in $test5) {

    $server = $vm.name

    Get-VM $server | Get-NetworkAdapter | %{

        if($_.Name -eq "Network adapter 1"){

            Set-NetworkAdapter -NetworkAdapter $_ -NetworkName $vm.networkname1 -confirm:$false

        }

        elseif($_.Name -eq "Network adapter 2"){

            Set-NetworkAdapter -NetworkAdapter $_ -NetworkName $vm.networkname2 -confirm:$false

        }

        elseif($_.Name -eq "Network adapter 3"){

            Set-NetworkAdapter -NetworkAdapter $_ -NetworkName $vm.networkname3 -confirm:$false

        }

    }

    Write-host "Changing $server to new network $networkname "

    ####Start server

    Write-Host "Done, Starting $server"

    Start-VM $server -confirm:$false

    Write-Host "Complete!"

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

View solution in original post

Reply
0 Kudos
2 Replies
LucD
Leadership
Leadership
Jump to solution

You can add some additional columns in your CSV file.

Something like this

Name,NetworkName1,NetworkName2,NetworkName3

vm1,net1,net2,net3

vm2,net1,net1,net1

Then you could change the code something like this

$test5 = Import-Csv C:\test5.csv

foreach ($vm in $test5) {

    $server = $vm.name

    Get-VM $server | Get-NetworkAdapter | %{

        if($_.Name -eq "Network adapter 1"){

            Set-NetworkAdapter -NetworkAdapter $_ -NetworkName $vm.networkname1 -confirm:$false

        }

        elseif($_.Name -eq "Network adapter 2"){

            Set-NetworkAdapter -NetworkAdapter $_ -NetworkName $vm.networkname2 -confirm:$false

        }

        elseif($_.Name -eq "Network adapter 3"){

            Set-NetworkAdapter -NetworkAdapter $_ -NetworkName $vm.networkname3 -confirm:$false

        }

    }

    Write-host "Changing $server to new network $networkname "

    ####Start server

    Write-Host "Done, Starting $server"

    Start-VM $server -confirm:$false

    Write-Host "Complete!"

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
brisketx
Contributor
Contributor
Jump to solution

That worked beautifully! thanks!

Reply
0 Kudos