Hopefully you’ve all read Part One of this series, where I provide examples of gathering information from vCenter mainly for VM’s in order to recreate your environment from scratch, just in case you have a major vCenter database corruption or the like. If you have, sorry part two has taken so long!
Part Two will show how to export information regarding your ESX(i) hosts, including networking information, so that this part of your setup is also easy to recreate. I should note here, that I’ll be trying to export VSS information, as well as Service Console and VM Kernel port configuration, and get this all exported into CSV files.
So… Here goes…!
Exporting physcial NIC info for the vDS switch
This is a pretty simple script that uses the get-vmhostpnic function from the Distributed Switch module in I mentioned in part one (Thanks again Luc Dekens :¬)).
import-module distributedswitch write-host "Getting vDS pNIC Info" $vdshostfilename = "C:\vdshostinfo.csv" $pnics = get-cluster "<em>ClusterName</em>" | get-vmhost | get-vmhostpnic foreach ($pnic in $pnics) { if ($pnic.Switch -eq "<em>dVS-Name</em>") { $strpnic = $strpnic + $pnic.pnic + "," + $pnic.VMhost + "," + $pnic.Switch + "`n" } } #Writes to CSV file out-file -filepath $vdshostfilename -inputobject $strpnic -encoding ASCII
Simply change “ClusterName” to match that of your cluster, and change “dVS-Name” to match that of your dVS (vDS – whichever). Then the info exported will contain the physical nic info for your distributed switch.
Next it’s time for simply getting a list of hosts in the cluster, I know, it’s nothing major, but at least it’s in a CSV I can import later, and it makes life much easier!!!
$cluster="ClusterName" $hostfilename = "c:\filename.csv" write-host "Getting Host List" $hosts = get-cluster $cluster | get-vmhost foreach ($vmhost in $hosts) { $outhost = $outhost + $vmhost.Name + "`n" } out-file -filepath $hostfilename -inputobject $outhost -encoding ASCII
Simply put, gather a list of hosts in the cluster called “ClusterName” and output their names to “c:\filename.csv”
OK, so now that we have that info, all I need to gather is a list of Standard Switches and their port groups, including IP information to make life easy… So, here goes:
$vssoutfile = "vssoutfile.csv" $cluster = "Cluster Name" $vmhosts = get-cluster $cluster | get-vmhost $vssout = "Host Name, VSS Name, VSS Pnic, VSS PG" + "`n" foreach ($vmhost in $vmhosts) { $vmhostname = $vmhost.name $switches = get-virtualswitch $vmhost foreach ($switch in $switches) { $vssname = $switch.name $Nic = $switch.nic $pgs = get-virtualportgroup -virtualswitch $switch foreach ($pg in $pgs) { $pgname = $pg.name $vssout = $vssout + "$vmhostname" + "," + ` "$vssname" + "," + "$Nic" + "," + ` "$pgName" + "`n" } } } out-file -filepath $vssoutfile -inputobject $vssout -encoding ASCII
Now we just need the host IP’s. At the moment, I can find this info for VM Kernel ports on ESX hosts, but I can get service console information, and the vmkernel IP in ESXi hosts (it’s pulled from the same PowerCLI script, so that’s this one here:
$hostipoutfile = "hostip.csv" $cluster = "Cluster Name" $output = "Host Name" + "," + "IP Addresses" + "`n" $vmhosts = get-cluster $cluster | get-vmhost foreach ($vmhost in $vmhosts) { $vmhostname = $vmhost.name $ips = Get-VMHost $vmhostname | ` Select @{N="ConsoleIP";E={(Get-VMHostNetwork $_).VirtualNic | ` ForEach{$_.IP}}} $ipaddrs = $ips.ConsoleIP $output = $output + "$vmhostname" + "," + "$ipaddrs" + "`n" } out-file -filepath $hostipoutfile -inputobject $output -encoding ASCII
Now, I’m slowly working on this project in my spare time at work (it’s actually for work but not as important as everything else I’m doing!), so part 3 is probably going to be some time away, and that’ll show you how to import all this info back into vCenter to reconfigure your hosts… bear with me, I’ll get this written 🙂