Manchmal brauche ich zur Entwicklung mehrere virtuelle Maschinen, die erst zusammen ein brauchbares Entwicklungssystem ergeben, beispielsweise eine gesamte kleine Domäne. In diesem Fall müssen bestimmte Rechner in einer vordefinierten Reihenfolge gestartet werden. Da ich keinen großen Hyper-V-Host habe, sondern meine virtuellen Maschinen auf mehrere Hyper-V-Hosts verteilt habe und ich nicht manuell alle virtuellen Maschinen starten möchte, starte ich diese über ein powershell-Script, dass die VMs in einer vordefinierten Reihenfolge ($VMNames) auf den unterschiedlichen Hyper-V Hosts ($VMHostServers) startet.
In diesem Skript:
- Zwei Arrays definieren die zu überprüfenden Hyper-V-Hosts (
$VMHostServers
) und virtuellen Maschinen ($VMNames
). - Das Skript durchläuft jede VM in
$VMNames
und überprüft auf jedem Server in$VMHostServers
, ob die VM vorhanden und gestartet ist. - Es wird zunächst die Verfügbarkeit jedes Servers überprüft.
- Für verfügbare Server wird dann überprüft, ob die VM existiert. Falls ja, wird geprüft, ob sie bereits läuft.
- Falls die VM nicht läuft, wird sie gestartet.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Definiert eine Liste von Hyper-V-Servern und VM-Namen | |
$VMHostServers = "HyperV-1", "HyperV-2", "HyperV-3", "HyperV-4" | |
$VMNames = "Dev1-DC", "Dev1-SQL2012", "Dev1-SP2013", "Dev1-Win8", "Dev1-Win7" | |
# Durchläuft alle VM-Namen | |
ForEach ($VMName in $VMNames) { | |
Write-Host "$VMName" -BackgroundColor Yellow | |
# Durchläuft alle Hyper-V-Server | |
ForEach ($VMHostServer in $VMHostServers) { | |
Write-Host "Überprüfe, ob VM $VMName auf Server $VMHostServer enthalten ist" | |
# Überprüft, ob der Hyper-V-Server verfügbar ist | |
if (Test-Connection -ComputerName $VMHostServer -Count 1 -Quiet -EA 0) { | |
Write-Host "Server $VMHostServer verfügbar" -ForegroundColor Green | |
# Überprüft, ob die VM auf dem Server vorhanden ist | |
if (Get-VM -ComputerName $VMHostServer | Where-Object { $_.Name -eq $VMName }) { | |
Write-Host "gefunden: $VMName" -ForegroundColor Green | |
# Überprüft, ob die VM bereits läuft | |
if (Get-VM -ComputerName $VMHostServer | Where-Object { $_.State –eq 'Running' -and $_.Name -eq $VMName }) { | |
Write-Host "$VMName läuft bereits" | |
} else { | |
Write-Host "$VMName wird gestartet" | |
# Startet die VM, falls sie nicht bereits läuft | |
Start-VM $VMName -ComputerName $VMHostServer | |
} | |
} else { | |
Write-Host "$VMName auf $VMHostServer nicht gefunden" -ForegroundColor Yellow | |
} | |
} else { | |
Write-Host "Server $VMHostServer NICHT verfügbar" -ForegroundColor Red | |
} | |
} | |
} |
Das Ganze gibt es auch als Programm: