Bulk unregister / register VMs on vSphere
If you want to unregister all VMs on a particular vSphere Cluster / Host you’re pretty done using the GUI, registering all VMs on a datastore could take you to the “hell of clicking masters” depending on the amount of VMs to register. I created two powershell functions which do that stuff for you.
Usage:
unregisterallvm “datacenter-A” “Cluster-A10-LAB” registerallvm “vcenter.domain.com” “datacenter-A” “Cluster-A10-LAB” “Datastore-SAN-001” And here is the code for copy ‘n pasting:Function unregisterallvm([STRING]$datacentername,[STRING]$clustername) { $vms = Get-DataCenter $datacentername | Get-Cluster $clustername | get-vm Foreach ($vm in $vms) { $vmname = $vm.name Write-Host "Unregistering VM: $vmname from Cluster $clustername" Remove-VM -VM $vmname -DeleteFromDisk:$false -Confirm:$false -RunAsync } } Function registerallvm([STRING]$vCenterHost,[STRING]$datacentername,[STRING]$clustername,[STRING]$datastorename) { $datastore = Get-Datacenter $datacentername | Get-Datastore | ? {$_.name -match $datastorename} $datastoreshortname = $datastore.Name $ResourcePool = Get-Cluster -Name $clustername | Get-ResourcePool | Get-View $vmFolder = Get-View (Get-Datacenter -Name $datacentername | Get-Folder -Name "vm").id $vmdirs = (dir "vmstores:\$vCenterHost@443\$datacentername\$datastoreshortname\") Foreach ($f in $vmdirs) { $vmname = $f.Name $checkreg = (Get-Cluster $clustername | Get-VM | ? { $_.name -match $vmname}) If (!$checkreg) { "Registering VM: $vmname on: $clustername \ $datastoreshortname" $vmFolder.RegisterVM_Task("[$datastoreshortname]/$vmname/$vmname.vmx", $vmname, $false, $ResourcePool.MoRef, $null) } Else { "VM: $vmname is already registered with the same name. Skipping...." } } }
Of course you need to place this functions in your script before you’re calling them and you need PowerCLI snapin registered and have a connection to vCenter using:
connect-viserver -server "vcenter.domain.com"