# encoding: ascii # api: powershell # title: WhereIsMyVM # description: Script to find on which host a particular VM is running when vCenter is down # version: 0.1 # type: script # author: Leon Scheltema # license: CC0 # x-poshcode-id: 4187 # x-archived: 2013-06-13T05:50:00 # x-published: 2013-05-29T13:49:00 # # #Start of settings $ScriptPath = (Split-Path ((Get-Variable MyInvocation).Value).MyCommand.Path) $ContentFolder = $ScriptPath + "\Lists\" #End of settings #Selection menu "**************************************" "* *" "* Where is My VM ? *" "* *" "* Please Select the Cluster *" "* You want to search *" "* *" "* 1) Cluster_1 *" "* 2) Cluster_2 *" "* 3) Cluster_3 *" "* 4) Complete_Datacenter *" "* 5) All_active_hosts *" "* 6) Exit *" "* *" "* *" "**************************************" $a = read-host "Select the Cluster" IF ($a -eq 1){$List = $ContentFolder + "\Cluster_1.txt"} Elseif ($a -eq 2){$List = $ContentFolder + "\Cluster_2.txt"} Elseif ($a -eq 3){$List = $ContentFolder + "\Cluster_3.txt"} Elseif ($a -eq 4){$List = $ContentFolder + "\Complete_Datacenter.txt"} Elseif ($a -eq 5){$List = $ContentFolder + "\All_active_hosts.txt"} Elseif ($a -eq 6){exit} $findvm = Read-Host -Prompt "Missing VM Name" $esxservers = get-content $List foreach ($esxserver in $esxservers) {Connect-VIServer -WarningAction SilentlyContinue -Server $esxserver -User username -Password password $vmlist = (Get-VM | select -expandproperty name) foreach ($vm in $vmlist) { if ($vm -eq $findvm){Write-Host $findvm "was located on $esxserver"} if ($vm -eq $findvm){exit} Elseif ($vm -eq $findvm){Write-Host "$findvm was not located on host"} } } Write-Host "$findvm was not located on any host" # Disconnect all connected ESXi hosts Disconnect-VIServer -server $esxserver -Force -Confirm:$false