vasabii - Fotolia

Effizienteres Arbeiten in der Hyper-V-PowerShell mit ForEach-Loops

Die PowerShell ist ein äußerst effektives Hyper-V-Tool. Mit ForEach-Loops erreichen Administratoren dabei eine noch höhere Automatisierung.

Mit PowerShell-CMDlets für Hyper-V lässt sich die Zeit drastisch reduzieren, die für bestimmte Aufgaben benötigt wird – vor allem, wenn es sich um regelmäßige Aufgaben handelt. PowerShell-CMDlets helfen auch dabei, tägliche Verwaltungsaufgaben ohne die grafische Benutzeroberfläche des Hyper-V Manager zu erledigen.

Auch wenn es sehr viele PowerShell-Befehle für Hyper-V gibt, eignen sich nicht alle im gleichen Maß für tägliche Verwaltungsaufgaben. Im folgenden Artikel werfen wir einen Blick häufig zusammen mit Hyper-V genutzte PowerShell-CMDlets und zeigen, wie sich diese mit einem ForEach-Loop noch effizienter einsetzen lassen.

VM-Failover per PowerShell

Für die VM-Replikation mit Hyper-V kann das Compete-VM-Failover-CMDlet eingesetzt werden. Der vollständige Failover einer Replica-VM löscht alle Wiederherstellungspunkte auf dem Replica-Server. Hierfür wird entweder eine einzelne virtuelle Maschine angegeben, oder aber man verwendet einen Asterisk, um den vollständigen Failover aller Replica-VMs eines Server anzustoßen. Für einen vollständigen Failover einer einzelnen VM des lokalen Replica-Servers kann zum Beispiel das folgende CMDlet verwendet werden:

Complete-VMFailover –VMName ReplicaVM

Soll der Failover auf einem Remote-Server durchgeführt werden, dann kann hierfür einfach das Attribut –ComputerName verwendet werden:

Complete-VMFailover –VMName ReplicaVM –ComputerName ReplicaServer1

Falls der Failover-Prozess für mehr als nur eine Replica-VM durchgeführt werden soll, kann dies durch die Angabe mehrerer VM-Namen getrennt durch Kommata erfolgen:

Complete-VMFailover –VMName ReplicaVM1, ReplicaVM2, ReplicaVM3 –ComputerName ReplicaServer1

Anhalten und Stoppen der VM-Replikation: Die PowerShell bietet mit Suspend-VMReplication und Stop-VMReplication auch CMDlets zum zeitweiligen Anhalten und vollständigen Stoppen einer laufenden Replikation. Vor allem das Suspend-VMReplication-CMDlet kann sehr hilfreich sein, wenn man während einer laufenden Replikation plötzlich auftretende Netzwerkprobleme untersuchen will. Der Befehl Suspend-VMReplication * hält dann alle laufenden Replikationen für alle virtuellen Maschinen des lokalen Hyper-V-Hosts an.

Das gleiche Ergebnis würde man erhalten, wenn man im Hyper-V Manager mit der rechten Maustaste auf jede einzelne virtuelle Maschine klickt und im Kontextmenü manuell die Replikation pausiert. Per PowerShell geht dies aber viel schneller, da sowohl Suspend-VMReplication als auch Stop-VMReplication mehrere VM-Namen und Hyper-V-Hosts akzeptieren:

Suspend-VMReplication –VMName ReplicaVM1, ReplicaVM2, ReplicaVM3 –ComputerName ReplicaServer1

VM-Zugriff gewähren und entziehen: In Hyper-V-Hosts auf Basis von Windows Server 2012 R2 kann Benutzern der Zugriff auf virtuelle Maschinen über Grant-VMConnectAccess und Revoke-VMConnectAccess gewährt und auch wieder entzogen werden. Soll beispielsweise User 1 Zugriff auf die virtuelle Maschine ExchangeVM erhalten, dann würde man folgenden Befehl verwenden:

Grant-VMConnectAccess –VMName ExchangeVM –Username TechTarget.com\User1

Entsprechend lässt sich ihm mit dem folgenden Befehl der Zugriff auch wieder entziehen:

Revoke-VMConnectAccess –VMName ExchangeVM –Username TechTarget.com\User1

Mehr Effizienz in der PowerShell mit ForEach-Loops

Die meisten PowerShell-CMDlets für Hyper-V unterstützen die Verwendung der Attribute –ComputerName und –VMName, mit denen sich Remote-Hosts und mehrere virtuelle Maschinen gleichzeitig ansprechen lassen. Auch wenn man damit zwar mehrere VMs und Hyper-V-Hosts angeben kann, ist es zumindest mit einem einzigen Befehl nicht möglich festzulegen, dass eine virtuelle Maschine zu einem bestimmten Hosts repliziert werden soll und eine andere VM zu einem anderen Host.

Auch wenn die oben genannten PowerShell-CMDlets sicherlich schon einiges an Zeit einsparen helfen, muss man für komplexere Aufgaben manchmal auf ForEach-Loops zurückgreifen. Ein ForEach-Loop oder auch eine ForEach-Schleife ermöglicht das wiederholte Ausführen bestimmter PowerShell-CMDlets, wobei bei jedem Durchgang unterschiedliche virtuelle Maschinen und Hyper-V-Hosts genutzt werden.

Wenn man beispielsweise den Host angeben will, auf den der VM-Failover erfolgen soll, dann kann man hierfür eine CSV-Datei mit allen VMs und Hosts anlegen. In der PowerShell lässt sich diese Liste anschließend referenzieren und über einen PowerShell-Befehl mit ForEach-Loop verwenden:

$VMFile = Import-CSV MyVMs.CSV

ForEach ($Items in $VMFile)

{

Complete-VMFailover -VMName $VM.VMName –ComputerName $VM.Hyper-VServer

}          

Eine ForEach-Schleife lässt sich aber natürlich auch im Zusammenhang mit anderen PowerShell-Befehlen verwenden. Wenn man beispielsweise mehreren Nutzern Zugang zur ExchangeVM geben will, kann hierfür eine einfache TXT-Datei mit den Nutzernamen für den ForEach-Loop angelegt werden:

$AllUsers = Get-Content Users.TXT

ForEach ($ThisUser in $AllUsers)

 {

Grant-VMConnectAccess -VMName ExchangeVM –UserName $ThisUser

 }

Die PowerShell ist ein mächtiges Werkzeug, um die Produktivität zu erhöhen und sich wiederholende Aufgaben effizienter zu erledigen. Manchmal reichen einfache CMDlets aber nicht aus, um das Maximum aus der PowerShell herauszuholen – in diesem Fall kann ein ForEach-Loop helfen, um CMDlets mit Verweis auf bestimmte virtuelle Maschinen und Hosts noch effizienter zu verwenden.

Folgen Sie SearchDataCenter.de auch auf Twitter, Google+ und Facebook!

Artikel wurde zuletzt im Dezember 2015 aktualisiert

Erfahren Sie mehr über Serverbetriebssysteme

- GOOGLE-ANZEIGEN

ComputerWeekly.de

Close