Pages: [1]
Print
Author Topic: change the portgroup of all guests within a cluster  (Read 1144 times)
esarakaitis
Administrator
Sr. Member
*****
Posts: 256


8223109 sack57@hotmail.com littleking57 rootinfortwayne
View Profile WWW Email
« on: January 13, 2009, 09:31:06 AM »

Code:
#
# Usage:     IsPingable <hostname> | <ip>
# Returns:   $true if pingable, $false otherwise
Function IsPingable
{
    Param
    (
        [String]$target = $(throw "Must specify a target to ping.")
    )
   
    $ping = new-object System.Net.NetworkInformation.Ping
    trap [Exception] {continue;}
    $status = $false
       
    # Process any arguments given as if this were a command
    if ($ping.Send($target).status -eq "Success" )
    {
        $status = $true
    }
   
    $status
}

#####    MAINLINE    #####

###  SET PARAMETERS HERE ####
$FromNetwork = "source portgroup"
$ToNetwork = "target portgroup"
$vmCluster = "targetcluster"

###  Check if the from and to port group names are available on hosts in the cluster.

$terminate = 0
$ClusterHosts = get-cluster $vmCluster | get-vmhost
$ClusterHosts
if ( $ClusterHosts.length -ne $null ) {
     for ($i = 0; $i -lt $ClusterHosts.length; $i++) {
"Verifying port groups on " + $ClusterHosts[$i].name ;
$view = get-view $ClusterHosts[$i].id ;
$pg = $view.config.network.portgroup | ? {$_.key.contains($FromNetwork)} ; if ($pg.key -ne $null) {"  From Port Group Found"} else {"  From Port Group NOT Found" ; $terminate = 1 }
$pg = $view.config.network.portgroup | ? {$_.key.contains($ToNetwork)} ; if ($pg.key -ne $null) {"  To Port Group Found"} else {"  To Port Group NOT Found" ; $terminate = 1 } }
     }
else {
$view = get-view $ClusterHosts.id ;
$pg = $view.config.network.portgroup | ? {$_.key.contains($FromNetwork)} ; if ($pg.key -ne $null) {"  From Port Group Found"} else {"  From Port Group NOT Found" ; $terminate = 1 }
$pg = $view.config.network.portgroup | ? {$_.key.contains($ToNetwork)} ; if ($pg.key -ne $null) {"  To Port Group Found"} else {"  To Port Group NOT Found" ; $terminate = 1 }
     }

### If from and to network are NOT configuref on all host in cluster, teminate the script.

If  ( $terminate -eq 1 ) {"Script Terminated" ; exit }


$guests = get-cluster $vmCluster| get-vm

$guests |   % {
$vmName = $_.name ;
$vmHostName = $_.guest.hostname; if ($vmHostName -eq $null) { $vmHostName = "NO HOST NAME"} else {$vmHostName = ($vmHostName.split("."))[0]}
$netAdapt = $_ | Get-NetworkAdapter | ? {$_.networkname -eq $FromNetwork } ;
$netName = $netAdapt.networkname
if ($netName -eq $null ) {$netName = "VM Guest NOT on port group"} ;
$OnOff = $_.PowerState ;
$pingstatus = " "
if ($OnOff -eq "PoweredOn")
{if (IsPingable($vmHostName))
  {$pingstatus = "Pingable"}
else
  {$pingstatus = "NOT Pingable"} }
[string]::join(" ; ",($vmName, $vmHostName, $netName, $OnOff, $pingstatus)) ;

###   This is section that does the change    ####

if ( $netName -eq $FromNetwork -and $pingstatus -eq "Pingable")
      {"Change Me" ; $netAdapt | set-networkadapter -networkname $ToNetwork ;
if (IsPingable($vmHostName) ) {"OK"} else {"Change Failed, Exiting" ; exit }}
else {"Do not change me"}
         }
Logged
Pages: [1]
Print
Jump to: