VMware Cloud Community
nmbgdc
Enthusiast
Enthusiast

Is there is way to change IP, subnet and Gateway IP address using PowerCLI

Hi Guys,

I wanted to change the Management IP, subnet and Gateway of  all multiple Esxi Host from Powercli 

and I tried below codes but it doesn't have have the subnet parameter, does someone knows how can we add subnet parameter along with IP in the same script to make the change..

$esxName = '10.2.113.66'
$tgtPg = 'Management Network' #portGroup
$vmkName = 'vmk0'
$newDG = '192.168.100.254'
$newip = '192.168.100.110'
$stackName = 'defaultTcpipStack'
$esx = Get-VMHost -Name $esxName
$netMgr = Get-View -Id $esx.ExtensionData.ConfigManager.NetworkSystem
$config = New-Object VMware.Vim.HostNetworkConfig

#change ip address to ESXi
$vmk = $netmgr.NetworkConfig.Vnic | where{$_.Device -eq $vmkName}
$vmk.ChangeOperation =[VMware.Vim.ConfigSpecOperation]::edit
$vmk.Spec.Ip.IpAddress= $newip

#change Defult Gateway

$stack = $esx.ExtensionData.Config.Network.NetStackInstance | where{$_.Key -eq $stackName}
$spec = New-Object VMware.Vim.HostNetworkConfigNetStackSpec
$spec.Operation = [VMware.Vim.ConfigSpecOperation]::edit
$spec.NetStackInstance = $stack
$spec.NetStackInstance.RouteTableConfig = New-Object VMware.Vim.HostIpRouteTableConfig
$route = New-Object VMware.Vim.HostIpRouteConfig
$route.defaultGateway = $newDG
$route.gatewayDevice = $vmkName
$stack.IpRouteConfig.DefaultGateway = $newDG
$spec.NetStackInstance.ipRouteConfig = $route

# close and commit changes
$config.NetStackSpec += $spec
$config.Vnic += $vmk
$netMgr.UpdateNetworkConfig($config,[VMware.Vim.HostConfigChangeMode]::modify)

 

 

Thanks

 

0 Kudos
1 Reply
LucD
Leadership
Leadership

You can try to use the PrefixLength 

$esxName = '10.2.113.66'
$tgtPg = 'Management Network' #portGroup
$vmkName = 'vmk1'
$newDG = '192.168.100.254'
$newip = '192.168.100.110'
$stackName = 'defaultTcpipStack'
$esx = Get-VMHost -Name $esxName
$netMgr = Get-View -Id $esx.ExtensionData.ConfigManager.NetworkSystem
$config = New-Object VMware.Vim.HostNetworkConfig

#change ip address to ESXi
$vmk = $netmgr.NetworkConfig.Vnic | where{$_.Device -eq $vmkName}
$vmk.ChangeOperation =[VMware.Vim.ConfigSpecOperation]::edit
$vmk.Spec.Ip.IpAddress= $newip

#change Defult Gateway

$stack = $esx.ExtensionData.Config.Network.NetStackInstance | where{$_.Key -eq $stackName}
$spec = New-Object VMware.Vim.HostNetworkConfigNetStackSpec
$spec.Operation = [VMware.Vim.ConfigSpecOperation]::edit
$spec.NetStackInstance = $stack
$spec.NetStackInstance.RouteTableConfig = New-Object VMware.Vim.HostIpRouteTableConfig

$ipRoute = New-Object -TypeName VMware.Vim.HostIpRouteOp
$ipRoute.ChangeOperation = [VMware.Vim.HostConfigChangeOperation]::edit
$ipRouteEntry = New-Object -TypeName VMware.Vim.HostIpRouteEntry
$ipRouteEntry.Gateway = $newDG
$ipRouteEntry.Network = ($newDG.Split('.')[0..2] + '0') -join '.'
$ipRouteEntry.PrefixLength = 24

$ipRoute.Route = $ipRouteEntry
$stack.RouteTableConfig.IpRoute += $ipRoute

$route = New-Object VMware.Vim.HostIpRouteConfig
$route.defaultGateway = $newDG
$route.gatewayDevice = $vmkName
$stack.IpRouteConfig.DefaultGateway = $newDG
$spec.NetStackInstance.ipRouteConfig = $route

# close and commit changes
$config.NetStackSpec += $spec
$config.Vnic += $vmk
$netMgr.UpdateNetworkConfig($config,[VMware.Vim.HostConfigChangeMode]::modify)

 


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

0 Kudos