Das initiale Erstellen einer Laborumgebung ist mit AutomatedLab schnell erledigt. Nach wenigen Minuten stehen Domänencontroller, Serverrollen und erste virtuelle Maschinen bereit. In der Praxis beginnt die eigentliche Arbeit jedoch oft erst danach. Es gilt, zusätzliche Software zu verteilen, Konfigurationen auszurollen oder Zertifikate zu importieren. Daneben zeigt unser Workshop wie sich mit der kostenlosen Umgebung Testdaten bereitstellen lassen und wie sich mehrere Dienste zu einer realistischen Abbildung der Produktionsumgebung verbinden.
AutomatedLab [1] abstrahiert typische Installationsszenarien. Sie installieren Pakete vom Host, aus einer ISO-Datei oder direkt innerhalb der VM. Dadurch verwenden Sie konsistente Befehle und halten Installationen reproduzierbar. Alle nötigen Voraussetzungen für die Arbeit mit AutomatedLab beschreibt unser Artikel unter [2]. Verwenden Sie für automatisierte Abläufe eine Silent-Installation. Andernfalls warten viele EXE-Installer auf Benutzereingaben und blockieren den Prozess.
Parallele Installation beschleunigt Rollouts
Installieren Sie Software bei Bedarf parallel auf mehreren VMs. Der folgende Befehl rollt "Notepad++" gleichzeitig auf allen Maschinen aus:
Mit der parallelen Installation sparen Sie Zeit. Statt jede VM einzeln zu konfigurieren, führt AutomatedLab die Installation gleichzeitig auf allen Zielsystemen aus.
AutomatedLab [1] abstrahiert typische Installationsszenarien. Sie installieren Pakete vom Host, aus einer ISO-Datei oder direkt innerhalb der VM. Dadurch verwenden Sie konsistente Befehle und halten Installationen reproduzierbar. Alle nötigen Voraussetzungen für die Arbeit mit AutomatedLab beschreibt unser Artikel unter [2]. Verwenden Sie für automatisierte Abläufe eine Silent-Installation. Andernfalls warten viele EXE-Installer auf Benutzereingaben und blockieren den Prozess.
Parallele Installation beschleunigt Rollouts
Installieren Sie Software bei Bedarf parallel auf mehreren VMs. Der folgende Befehl rollt "Notepad++" gleichzeitig auf allen Maschinen aus:
Mit der parallelen Installation sparen Sie Zeit. Statt jede VM einzeln zu konfigurieren, führt AutomatedLab die Installation gleichzeitig auf allen Zielsystemen aus.
Je nach Installer-Typ unterscheiden sich die benötigten Silent-Parameter. MSI-Installer verwenden typischerweise "/quiet", "/passive" oder "/qn" und EXE-Installer auf NSIS-Basis nutzen meist "/S". Produkte wie Inno-Setup-Installer oder InstallShield erwarten andere Eingaben, die verfügbaren Parameter prüfen direkt über den jeweiligen Installer mit .\setup.exe /help" oder vergleichbaren Kommandos. Alternativ entnehmen Sie die erforderlichen Optionen der Herstellerdokumentation.
Abhängigkeiten bei Toolketten beachten
Für eine vollständig ausgestattete Entwicklungsumgebung benötigen Sie häufig mehrere Werkzeuge. Installieren Sie diese bei Bedarf sequenziell und berücksichtigen Sie Abhängigkeiten, wie im Listing zu sehen. Sie installieren die Pakete nacheinander. Jedes Paket rollt AutomatedLab parallel auf alle Zielsysteme aus. Mit "-ErrorAction Stop" brechen Sie den Ablauf bei Fehlern sofort ab. Aktivieren Sie zusätzlich "-Verbose", um detaillierte Installationsinformationen zu erhalten.
Listing : Werkzeuge sequenziell installieren
# Software-Liste mit Installationsparametern definieren
# Sequenzielle Installation mit Fortschrittsanzeige
foreach ($software in $softwareListe) {
Write-Host "Installiere $($software.Name) auf $($devServer.Count) VMs..." -ForegroundColor Cyan
Install-LabSoftwarePackage `
-Path $software.Path `
-CommandLine $software.CommandLine `
-ComputerName $devServer `
-ErrorAction Stop
Write-Host " $($software.Name) erfolgreich installiert" -ForegroundColor Green
}
Einige Installer verweigern die Ausführung per Remoting oder erwarten eine lokale Benutzerumgebung. Ein typisches Beispiel ist das .NET Framework, da es den Windows-Updateservice aufruft, der bei Remoteausführung abbricht. In solchen Fällen installieren Sie lokal auf der VM über eine geplante Aufgabe.
Schließlich hängen sie das ISO-File via Dismount-LabIsoImage -ComputerName Web1 wieder aus.
Verwenden Sie "$drive.DriveLetter", da Hyper-V den Laufwerksbuchstaben für ISO-Laufwerke nicht zuverlässig konstant vergibt. Mit "Mount-LabIsoImage -PassThru" erhalten Sie ein Objekt, dessen Eigenschaft "DriveLetter" den tatsächlich zugewiesenen Buchstaben enthält.
Befindet sich die Installationsdatei bereits auf der VM, greifen Sie direkt auf den lokalen Pfad zu:
Mit dem Parameter "-LocalPath" teilen Sie AutomatedLab mit, dass sich die Datei bereits auf der Zielmaschine befindet und nicht übertragen werden muss.
Dateien gezielt auf VMs verteilen
Sobald Sie mehr als reine Softwareinstallationen durchführen, übertragen Sie zusätzliche Dateien in Ihr Lab. Dazu zählen Konfigurationsdateien wie "web.config" oder "appsettings.json", Automatisierungsskripte, Zertifikate, Testdaten oder Build-Artefakte. Für diesen Zweck verwenden Sie das Copy-LabFileItem-Cmdlet. Damit kopieren Sie Dateien direkt vom Host auf eine oder mehrere VMs. Das folgende Beispiel überträgt eine Konfigurationsdatei auf einen Webserver:
Der Parameter "-Path "definiert den Quellpfad auf dem Host, "-ComputerName" die Ziel-VM. Mit "-PassThru" geben Sie die kopierten Objekte zurück.
Webanwendung konsistent auf alle Server verteilen
Doch Projekte beschränken sich selten nur auf das Bereitstellen von Serverrollen. Häufig rollen Sie eine fertige Webanwendung auf mehrere Webserver aus – inklusive Konfiguration und Zertifikaten. Genau hier zeigt das Copy-LabFileItem-Cmdlet seinen praktischen Nutzen. Sie übertragen Artefakte zentral vom Host in Ihr Lab und stellen sicher, dass alle Webserver denselben Stand besitzen. Ein typisches Deployment umfasst drei Schritte:
Write-Host "Deployment abgeschlossen" -ForegroundColor Green
Nach diesen Schritten liegt die Anwendung einschließlich Konfiguration und Zertifikat auf allen Webservern und ist bereit für die weitere Einrichtung, etwa die Integration in IIS.
Die Übertragung und Verifikation einer Datei auf einem Webserver war in unserer Laborumgebung erfolgreich.
Logs und Artefakte vom Lab zurückholen
Neben dem Verteilen von Dateien holen Sie häufig Ergebnisse aus den virtuellen Maschinen. Typische Beispiele sind Logdateien, generierte Reports, Exportdateien oder Diagnoseinformationen aus automatisierten Testläufen. AutomatedLab stellt dafür eigene Cmdlets bereit. Die Cmdlets "Receive-File" und "Receive-Directory" stammen aus dem PSFileTransfer-Modul, das Bestandteil von AutomatedLab ist.
Sie öffnen zunächst eine PowerShell-Session zur Ziel-VM und nutzen diese für den Dateitransfer. AutomatedLab übernimmt die Authentifizierung über die konfigurierte Remoting-Umgebung:
$session = New-LabPSSession -ComputerName Server1
Das folgende Beispiel überträgt eine Logdatei vom Server auf den Host:
Der Transfer erfolgt direkt über die bestehende PowerShell-Session. Sie benötigen weder SMB-Freigaben noch zusätzliche Netzwerkshares. Übertragen Sie bei Bedarf komplette Verzeichnisse, etwa Ergebnisordner oder Report-Archive wie folgt:
Das Cmdlet kopiert alle enthaltenen Dateien und Unterordner und erhält die Verzeichnisstruktur auf dem Host. Schließen Sie die Session nach Abschluss des Transfers, um Ressourcen freizugeben:
Remove-PSSession $session
Auf diese Weise sammeln Sie Logs und Testergebnisse zentral auf dem Host und können sie dort archivieren, analysieren oder in weitere Automatisierungsschritte einbinden.
Remotebefehle zentral und parallel ausführen
Mit dem Invoke-LabCommand-Cmdlet führen Sie PowerShell-Befehle direkt auf den virtuellen Maschinen Ihres Labs aus. So automatisieren Sie Konfigurationsschritte zentral vom Host. Typische Anwendungsfälle sind das Installieren von Windows-Features, das Anpassen von Diensten oder das Ausrollen von Anwendungskonfigurationen. Beginnen Sie mit einem einfachen Beispiel und führen Sie einen Befehl auf allen VMs aus:
AutomatedLab startet den Befehl parallel auf allen Zielsystemen und gibt das jeweilige Systemdatum zurück. Das gleichzeitige Ausführen reduziert den Zeitaufwand erheblich, insbesondere in größeren Umgebungen. Der Parameter "-ActivityName" versieht den Vorgang mit einer aussagekräftigen Bezeichnung. So identifizieren Sie den Schritt später eindeutig in den Logs und erleichtern somit die Fehleranalyse. Fazit
Wir haben am Ende von Teil 1 dieses Workshops unser virtuelles Testlabor für die kommenden, anspruchsvollen Aufgaben vorbereitet. Der zweite Teil in der Juni-Ausgabe führt uns dann bis zu einer 3-Tier-Applikation.