PowerShell-Skripte für Hyper-V | einfach - schön
In meinen letzten Blogeinträgen ([1], [2], [3]) habe ich mich mit Hyper-V und der PowerShell beschäftigt. In einem größeren Szenario, mit vielen Snapshots und vielen Benutzern, die oft auf einen beliebigen Snapshot zurück setzen wollen, ist ein Skript, in dem man Parameter ändern muss, nicht sehr praktikabel. Im Folgenden stelle ich eine Möglichkeit vor, über einen Link auf dem Desktop ein PowerShell-Skript zu starten, das dann alle verfügbaren Snapshots anzeigt und die Umgebung auf den Ausgewählten Snapshot zurück setzt.
Das Szenario
Wir haben einen Server 2012 mit der Hyper-V Rolle. Auf diesem Server haben wir eine Umgebung mit mehreren Snapshots. Von jedem virtualisierten Server / Client existieren zusammengehörige Snapshots, die alle den gleichen Namen haben. Hier zum Beispiel Snapshot1 - ready2Go, Snapshot2 - updated-01-03-13, ... Unsere Umgebung besteht aus mehreren Servern und Clients. Der DomainController der Umgebung heißt DC01.
Das Ziel
Auf dem Desktop soll eine Verknüpfung liegen, die per Doppelklick das gewünschte Skript mit administrativen Berechtigungen ausführt und uns alle verfügbaren Snapshots anzeigt. Wird hier ein Snapshot ausgewählt und mit OK bestätigt, wir das System auf den Snapshot zurück gesetzt.
Die Snapshot-Auswahl
Eine Liste aller Verfügbaren Snapshots bekommt man über den Befehl Get-VMSnapshot -VMName DC01. Wir verwenden hier die Snapshots des DomainControllers DC01, da er zwingend an diesem Punkt gesichert sein muss, da es sonst zu Inkonsistenten im Active-Directory kommen kann. Damit man nun die Snapshots auswählen kann, erstellen wir uns mit einigen Elementen, die ich in [4] vorgestellt habe ein kleines Fenster mit einem DropDown-Menü. Hier der Quelltext dazu:
$objForm = New-Object System.Windows.Forms.Form $objForm.Text = "Wähle Snapshot" $objForm.Size = New-Object System.Drawing.Size(400,150) $objForm.StartPosition = "CenterScreen" $objForm.KeyPreview = $True $objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter"){$objForm.Close()}}) $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Size(120,80) $OKButton.Size = New-Object System.Drawing.Size(75,25) $OKButton.Text = "OK" $OKButton.Add_Click({$x=$objTextBox.Text;$objForm.Close()}) $objForm.Controls.Add($OKButton) $Label = New-Object System.Windows.Forms.Label $Label.Location = New-Object System.Drawing.Size(10,20) $Label.Size = New-Object System.Drawing.Size(100,20) $Label.Text = "Snapshot:" $objForm.Controls.Add($Label) $dropdown = New-Object System.Windows.Forms.ComboBox $dropdown.Location = New-Object System.Drawing.Size(110,20) $dropdown.Size = New-Object System.Drawing.Size(220,20) $objForm.Controls.Add($dropdown) foreach ($snapshot in Get-VMSnapshot -VMName DC01) { $dropdown.Items.add($snapshot.name) }
Wie auch in [4] müssen die Module System.Drawing und System.Windows.Forms geladen werden.
Der Befehl foreach ($snapshot in Get-VMSnapshot -VMName DC01) nimmt jeden Snapshot aus der Auflistung und fügt ihn über $dropdown.Items.add($snapshot.name) in das Dropdown-Menü ein. Über $dropdown.SelectedItem haben wir dann Zugriff auf den ausgewählten Snapshot. Nun kann man leicht über die in [1] vorgestellten Befehle den Snapshot auf allen Maschinen laden und die Maschinen in der richtigen Reihenfolge starten.
Der Desktop-Link
Will man nun noch einen Link auf dem Desktop, der das Skript direkt als Administrator ausführt, muss man folgendes tun:
In den Eigenschaften des Links unter Shortcut -> Advanced müssen wir noch den Haken bei Run as administrator setzen
[1] https://www.escde.net/blog/powershell-und-hyper-v-mit-server-2012?rq=Verwaltung%20einer%20Hyper-V
[2] https://www.escde.net/blog/verwaltung-einer-hyper-v-testumgebung-via-powershell-teil-2-snapshot-erstellen?rq=Verwaltung%20einer%20Hyper-V
[3] https://www.escde.net/blog/verwaltung-einer-hyper-v-testumgebung-via-powershell-teil-1-reset?rq=Verwaltung%20einer%20Hyper-V
[4] https://www.escde.net/blog/benutzerverwaltung-per-powershell-mit-gui?rq=Benutzerverwaltung%20per%20Powershell
- ASP.NET 1
- Active Directory 41
- Administration Tools 1
- Allgemein 60
- Backup 4
- ChatBots 5
- Configuration Manager 3
- DNS 1
- Data Protection Manager 1
- Deployment 24
- Endpoint Protection 1
- Exchange Server 62
- Gruppenrichtlinien 4
- Hyper-V 18
- Intune 1
- Konferenz 1
- Künstliche Intelligenz 7
- Linux 3
- Microsoft Office 11
- Microsoft Teams 1
- Office 365 11
- Office Web App Server 1
- Powershell 21
- Remote Desktop Server 1
- Remote Server 1
- SQL Server 8
- Sharepoint Server 12
- Sicherheit 1
- System Center 10
- Training 1
- Verschlüsselung 2
- Virtual Machine Manager 1
- Visual Studio 1
- WSUS 7
- Windows 10 12
- Windows 8 9
- Windows Azure 4
- Windows Client 1
- Windows Server 24
- Windows Server 2012 7
- Windows Server 2012R2 15
- Windows Server 2016 7
- Windows Server 2019 2
- Windows Server 2022 1
- Zertifikate 4