Grundlagen und erste Praxisbeispiele der Windows PowerShell

COPYRIGHT: KRAS99- FOTOLIA Grundlagen und erste Praxisbeispiele der Windows PowerShell Die Windows-PowerShell gehört zu den wichtigsten Admin-Tools i...
3 downloads 2 Views 871KB Size
COPYRIGHT: KRAS99- FOTOLIA

Grundlagen und erste Praxisbeispiele der Windows PowerShell Die Windows-PowerShell gehört zu den wichtigsten Admin-Tools in Microsoft-Umgebungen. Dieses E-Handbook erklärt Einsteigern die wichtigsten PowerShell-Grundlagen und stellt ausgewählte Anwendungsfälle vor.

EINFÜHRUNG: VARIABLEN UND KONSTANTEN

AUTOMATISCHE VARIABLEN

AUTOMATISIERUNG MIT FOREACHLOOPS

SKRIPT ZUR RDPABMELDUNG

DATEI-UPLOAD PER WEBCLIENTOBJEKT

HYPER-V UND DSC

GRENZEN DER POWERSHELL

EDITORIAL

Die PowerShell – auch in Zukunft Microsofts Management-Tool Nr. 1

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

2

Die Windows PowerShell ist das zentrale Management-Tool in Microsoft-Umgebungen, und trotzdem machen noch immer viele Windows-Admins einen großen Bogen um Microsofts .NET-basierte Skriptsprache. Die PowerShell bietet durch Automatisierung und Scripting zwar viele Vorteile, ihr haftet gleichzeitig aber auch der Ruf an, gerade Einsteiger mit der mitunter schnell steigenden Komplexität der Skripte und der großen Anzahl möglicher Cmdlets zu überfordern. Dieses E-Handbook richtet sich daher gezielt an Einsteiger und wenig erfahrene PowerShellNutzer, denen mit einigen Grundlagen und ersten Praxisbeispielen der große Mehrwert der PowerShell nähergebracht werden soll. Am Anfang steht dabei eine Einführung in Variablen und Konstanten sowie in automatische Variablen und ForEach-Loops. Die weiteren Artikel zeigen anhand verschiedener Praxisbeispiele den

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Aufbau einfacher PowerShell-Skripte, mit denen inaktive RDP-Sitzungen abgemeldet, Dateien per WebClient-Objekt auf FTP-Server hochgeladen oder über die Desired State Configuration HyperV-Hosts erstellt werden können. Der letzte Artikel geht schließlich auf die Grenzen der PowerShell ein. Manche Aufgaben werden eben doch besser mit alternativen Tools erledigt, in diesem Fall mit dem Hyper-V Manager. Gerade mit den neuen Möglichkeiten der PowerShell 5.0 wird Microsofts Scripting-Tool kaum an Bedeutung verlieren, sondern auch weiterhin eine zentrale Rolle spielen. WindowsAdmins tun also gut daran, lieber früher als später einen Einstieg in das PowerShell-Scripting zu suchen. n Wolfgang Dietl Online Editor TechTarget Deutschland

VARIABLEN UND KONSTANTEN

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

3

Einführung in Variablen und Konstanten

Die meisten Menschen definieren eine Variable in einer Programmiersprache als einen Platzhalter für irgendetwas anderes. Die Variable ist sozusagen der Eimer, in den Dinge hineinkommen, herauskommen, darin verändert oder daraus entfernt werden. Allerdings gibt es auch eine Teilmenge an PowerShell-Variablen, die zwar definiert werden, aber danach nie mehr verändert werden können. Diese Variablen werden Konstanten oder schreibgeschützte Variablen (Read-only) genannt. Konstanten und schreibgeschützte Variablen sind weitgehend identisch. Beiden werden initial Werte zugewiesen, die danach nicht mehr geändert werden können. Konstanten können, anders als schreibgeschützte Variablen, aber noch nicht einmal entfernt werden. Schauen wir uns kurz ein Beispiel an: Wer schon einmal Skripte in der PowerShell geschrieben hat, der wird Variablen wohl in etwa so definiert haben: $Variable = ‚Hallo Welt.‘

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Diese Deklaration ist die gängige und übliche Art, Variablen zu definieren. Aber auch mit einem eingebauten PowerShell-Cmdlet namens Set-Variable können Variablen Werte zugewiesen werden. Da $Eimer = ‚Voll‘ und Set-Variable -Name ‚Eimer‘ -Value ‚Voll‘

Die Variable ist sozusagen der Eimer, in den Dinge hineinkommen, herauskommen, darin verändert oder daraus entfernt werden.

funktional völlig äquivalent sind, kommt das Cmdlet aber eher selten zum Einsatz. Wie aber liegen die Dinge im Fall einer Konstanten? Es bietet sich dann die Verwendung von Set-Variable mit dem zusätzlichen Parameter Option an. Durch die Nutzung von

VARIABLEN UND KONSTANTEN

Option können Administratoren der Variable $Eimer den dauerhaften Wert „Voll“ zuweisen: Set-Variable –Name ´Eimer´-Value ´Voll´ -Option Constant EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG

Als Folge des Versuchs, den Wert von $Eimer zu ändern, würde ein roter Fehlertext ausgegeben mit dem Hinweis, dass diese Operation nicht erlaubt ist. Die Konstante kann also weder verändert noch entfernt werden.

MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

Konstanten und schreibgeschützte Variablen sind weitgehend identisch. Beiden werden initial Werte zugewiesen, die danach nicht mehr geändert werden können.

Soviel zu Konstanten. Wie aber sieht es mit schreibgeschützten Variablen aus? Der Unterschied liegt darin, dass schreibgeschützte Variablen eben schon entfernt werden können.

4

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Hierfür wird erneut der Befehl Set-Variable genutzt, während sämtliche Parameter und deren Werte identisch bleiben – mit Ausnahme des Wertes ReadOnly statt Constant für den Parameter Option. Nach dem Zuweisen des Wertes kann versucht werden, diesen zu entfernen – mit der Folge einer Fehlermeldung mit dem Wortlaut „…führen Sie den Vorgang mit dem Force-Parameter erneut aus.“ Unter Nutzung dieses Parameters für die Methode del kann die Variable dann erfolgreich entfernt werden. Wozu aber würde nun ein Administrator überhaupt eine Konstante oder eine schreibgeschützte Variable nutzen wollen? Tatsächlich gibt es dafür einige Gründe. Einer davon wäre beispielsweise ein sehr langes Skript, dass Hunderte – wenn nicht Tausende – Variablen deklariert. Konstanten oder schreibgeschützte Variablen können zum Beispiel sehr hilfreich sein, wenn einem wichtigen Attribut eine Variable zugeteilt wird, im weiteren Verlauf Veränderungen an weiteren Attributen vorgenommen werden und dieses eine Attribut aber vor diesen Änderungen geschützt werden soll.

VARIABLEN UND KONSTANTEN

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG

Es könnte zum Beispiel sein, dass eine Änderung an diesem Attributwert schwerwiegende Probleme nach sich zieht oder die Ausführung des Skripts verhindert. Eine schreibgeschützte Variable kann einen solchen Fehler vermeiden helfen. Für Konstanten trifft dies in ähnlicher Weise zu, auch sie können genutzt werden, um den Wert einer Variablen zu verfestigen und das irrtümliche Verändern oder Entfernen des Wertes zu unterbinden. Vorteilhaft kann dies zum Beispiel auch sein, wenn das Skript auch Dritten zugänglich gemacht wird und verhindert werden soll, dass innerhalb der

DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

5

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Variablendeklarationen fehlerhafte Zuweisungen vorgenommen werden. Letztlich sind Konstanten theoretisch auch auf einer technischen Ebene besser als Variablen. Die Definition einer Konstante beschreibt die Absichten des Skripts viel zielgerichteter. Mit Konstanten werden Variablen ersetzt, auf die man sonst im weiteren Code ständig achten müsste. Und wenn man technisch noch eine Ebene tiefer gehen möchte, dann liegt ein weiterer Vorteil in der geringeren Ressourcenbelastung, da Konstanten, anders als Variablen, nicht überwacht werden müssen.–Adam Betram 

AUTOMATISCHE VARIABLEN

Problemursache automatische Variablen

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

6

Manche Variablen sollte man in der Windows PowerShell besser nie anfassen, weil dies sonst zu unerwarteten und sicherlich ungewollten Ergebnissen führt. Jeder PowerShellEinsteiger wird irgendwann an diesen Punkt kommen und sich fragen, was nur mit seinem Skript los ist. Ursache hierfür sind dann meist automatische Variablen. Die PowerShell selbst benötigt einige Variablen, um korrekt zu funktionieren. Diese Variablen werden zur Speicherung von Informationen genutzt und können ausgelesen werden – aber nicht überschrieben. Die dort gespeicherten Informationen betreffen verschiedenste Bereiche. Eine der am häufigsten anzutreffenden automatischen Variablen ist die Pipeline-Variable $_, auch $PSItem genannt. Diese Variable wird zur Anzeige von Objekten genutzt, die durch Pipelines verbunden sind. Wenn man die PowerShell zum Lesen einer CSV-Datei nutzt oder das Cmdlet Get-AdUser

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

zum Finden eines Active-Directory-Nutzers verwendet, aber dabei nicht die ganze CSV-Datei oder alle Active-Directory-Nutzer angezeigt bekommen will, dann stößt man auch bereits auf die nächste automatische Variable: den WhereAlias, auch Where-Objekt genannt. Bei einer CSVDatei mit den Spalten FirstName und LastName, die Hunderte Namen enthält, könnte man durch den Einsatz von Where-Object alle Personen mit dem Nachnamen Jones herausfiltern: Import-Csv C:\Names.csv | Where-Object {$_.LastName –eq ´Jones´} In diesem Beispiel wurde die Pipeline-Variable genutzt, um alle Namen anzuzeigen, die vom Import-CSV-Cmdlet kommen. Anschließend wird der LastName-Wert der Pipeline-Variable referenziert und über das Where-Objekt nur die Nachamen Jones ausgefiltert. Die Variable $_ kann hier nicht verwendet werden, weil

AUTOMATISCHE VARIABLEN

sie bereits von der PowerShell selbst genutzt wird. Im nächsten PowerShell-Skript würde man erwarten, dass die Variable $_ dem Wert somethingelse entspricht. Das ist aber nicht EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS

Manche Variablen sollte man in der Windows PowerShell besser nie anfassen, weil dies sonst zu unerwarteten und sicherlich ungewollten Ergebnissen führt.

False. Diese Werte werden über verschiedenste PowerShell-Skripte einheitlich verwendet, um bestimmte Zustände zu bewerten. Man könnte mit der $false-Variable zum Beispiel herausfinden, ob ein Wert einem anderen gleicht, wie im dritten Beispiel, in dem das Verhältnis zwischen Integer 1 und Integer 2 bestimmt wird: 1 –eq 2 False (1 –eq 2) –eq $false True

SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

der Fall. Zudem lässt die PowerShell die falsche Nutzung automatischer Variablen zu, ohne dass ein Fehler ausgegeben wird. Dieses Verhalten bringt PowerShell-Nutzer regelmäßig zum Verzweifeln: Import-Csv C:\Names.csv | Where-Object {$_ = ´somethingelse´; $_} Zwei weitere automatische Variablen sind $true und $false. Die PowerShell reserviert diesen Variablen die Booleschen Werte True und

7

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

In diesem Fall ist 1 nicht gleich 2, was durch den Vergleich des Ergebnisses von 1 –eq 2 mit der automatischen $false-Variable bestätigt wird. Natürlich ergibt dieser Vergleich die andere automatische Variable $true. Wenn man der automatischen Variable $false eine andere Variable zuweisen möchte, beispielsweise mit $false = ´something´, dann erhält man eine Fehlermeldung, wonach die Variable nicht verändert werden kann. Das bedeutet lediglich, dass die Variable bereits an einer anderen Stelle einen Wert erhalten

AUTOMATISCHE VARIABLEN

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD

hat, der nicht geändert werden kann. Die hier aufgeführten Beispiele sind natürlich recht einfach, und kaum jemand würde mit diesen Variablen einen Fehler machen. Wenn man aber mit weitaus größeren Skripten arbeitet, dann kann das Aufspüren von Problemen mit automatischen Variablen wesentlich schwieriger werden. Dabei sollte man immer daran denken, dass man nicht zwangsläufig eine Fehlermeldung erhalten muss, wenn tatsächlich ein Problem im Skript besteht. Wenn man also ein Problem mit einem Skript hat, in dem die Cmdlets eigentlich alle korrekt aussehen, dann sollte man sich

PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

8

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

die automatischen Variablen einmal genauer ansehen. Gut möglich, dass diese im Konflikt

Wenn man ein Problem mit einem Skript hat, in dem die Cmdlets alle korrekt aussehen, sollte man sich die automatischen Variablen genauer ansehen.

mit den von der PowerShell selbst genutzten Variablen stehen. –Adam Betram

FOREACHLOOPS

Hyper-V mit ForEach-Loops automatisieren

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN

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

VM-FAILOVER PER POWERSHELL

AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC

PowerShell-Cmdlets helfen dabei, tägliche Verwaltungsaufgaben ohne die grafische Benutzeroberfläche des Hyper-V Managers zu erledigen.

GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

9

werfen wir einen Blick auf häufig zusammen mit Hyper-V genutzte PowerShell-Cmdlets und zeigen, wie sich diese mit einem ForEach-Loop noch effizienter einsetzen lassen.

dabei, tägliche Verwaltungsaufgaben ohne die grafische Benutzeroberfläche des Hyper-V Managers 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

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS 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 ReplicaServers kann zum Beispiel das folgende Cmdlet verwendet werden: Complete-VMFailover –VMName ReplicaVM

GENERATION-2FOREACHLOOPS VMS

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

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG

Netzwerkprobleme untersuchen will. Der Befehl Suspend-VMReplication * hält dann alle laufenden Replikationen für alle virtuellen Maschinen des lokalen Hyper-V-Hosts an.

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:

Die PowerShell bietet Cmdlets zum zeitweiligen Anhalten und vollständigen Stoppen einer laufenden Replikation.

MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT

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

HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

10

ANHALTEN UND STOPPEN DER VM-REPLIKATION

Die PowerShell bietet mit SuspendVMReplication 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

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

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

FOREACHLOOPS

VM-ZUGRIFF GEWÄHREN UND ENTZIEHEN

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

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

Die meisten PowerShell-Cmdlets für Hyper-V unterstützen die Verwendung der Attribute -ComputerName und –VMName, mit denen sich

11

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

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 Host repliziert werden soll und eine andere VM zu einem anderen Host.

Mit PowerShell-Cmdlets für Hyper-V lässt sich die Zeit drastisch reduzieren, die für bestimmte Aufgaben benötigt wird.

Auch wenn die oben genannten PowerShellCmdlets 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 ForEachSchleife ermöglicht das wiederholte Ausführen bestimmter PowerShell-Cmdlets, wobei bei jedem Durchgang unterschiedliche virtuelle

FOREACHLOOPS

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

12

Maschinen und Hyper-V-Hosts genutzt werden. Wenn man beispielsweise den Host angeben will, auf dem 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 PowerShellBefehlen verwenden. Wenn man beispielsweise mehreren Nutzern Zugang zur ExchangeVM

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

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. –Nirmal Sharma

RDP-SKRIPT

PowerShell-Skript zur RDP-Abmeldung

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

13

Das Problem ist nicht gerade neu: Ein Endanwender loggt sich über das Remote Desktop Protocol (RDP) in einen Windows Server ein und vergisst dann später, sich wieder abzumelden. Offene Sitzungen verbrauchen aber auf dem Server unnötig Ressourcen. Mit einem kleinen PowerShell-Skript kann die Abmeldung von Nutzern erzwungen werden, um diese Ressourcen freizugeben. Um eine erzwungene Abmeldung einer Sitzung über das Remote Desktop Protocol durchzuführen, muss ein Admin zunächst sämtliche Dienste der Remote Desktop Services (RDS) auf dem Server und deren Status abfragen. Nachdem alle getrennten Dienste erkannt worden sind, folgt als nächstes der Abmeldeprozess. Im ersten Schritt muss hierfür das kostenlose PowerShell-Modul PSTTerminalServices heruntergeladen und dessen Verfügbarkeit in der PowerShell sichergestellt werden. Die nötigen Installationshinweise hierfür sind auf der

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Download-Seite erhältlich. Im ersten Schritt sollen nun zunächst alle aktiven Sitzungen auf einem Lab-Server mit dem Namen HYPERV abgefragt werden: Get-TSSession –ComputerName hyperv In diesem Fall werden aber natürlich alle – und nicht nur die inaktiven Sitzungen –angezeigt, obwohl in diesem Beispiel ja gerade die getrennten Sitzungen interessant sind. Über den Parameter State lassen sich diese herausfiltern: Get-TSSession –ComputerName hyperv – State Disconnected Dieses Ergebnis ist zwar schon hilfreicher, aber es gibt noch immer ein Problem: Möglicherweise ist eine Sitzung keine RDP-Sitzung, dann gäbe es auch keine Möglichkeit, diese mittels GetTSSession aus den Ergebnissen auszuschließen.

RDP-SKRIPT

Die Lösung des Problems besteht in der Verwendung eines where-Filters, der auch diese Sitzung entfernen kann:

EDITORIAL EINFÜHRUNG: VARIABLEN UND

Get-TSSession –ComputerName hyperv – State Disconnected | where {$_.SessionID –ne O}

KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

14

An diesem Punkt erhält man also alle Sitzungen, die problemlos beendet werden können. Als nächstes müssen die inaktiven Sitzungen noch geschlossen werden. Dafür bietet das Modul PSTerminalServices das hilfreiche Cmdlet Stop-TSSession. Das Cmdlet Stop-TSSession meldet eine Sitzung zwangsweise ab. Dadurch könnten Endanwender Teile ihrer Arbeit verlieren, weshalb eine Rückfrage an den Administrator erfolgt. An dieser Stelle könnte man natürlich die Abfrage einfach bestätigen und den Dingen ihren Lauf

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

lassen. Allerdings mögen es Administratoren nicht sonderlich, in einem eigentlich fortlaufenden Prozess manuell Tasten betätigen zu müssen. Wird dieses Cmdlet beispielsweise in ein längeres Skript eingefügt, dann wird die Rückfrage das Skript natürlich unterbrechen. Daher ist es möglich, die Bestätigungsanfrage zu entfernen. Das Cmdlet Stop-TSSession verfügt über den gängigen PowerShell-Parameter -Force, der Administratoren das Durchlaufen der Vorgänge ohne manuellen Eingriff erlaubt. Das finale Skript sieht dann wie folgt aus: Get-TSSession -ComputerName HYPERV -State Disconnected | where {$_.SessionID -ne 0} | Stop-TSSession –Force Wenn auf diesen Befehl keine Ausgabe erfolgt, dann wurde die Sitzung erfolgreich abgemeldet. –Adam Betram

FTP-UPLOAD

Datei-Upload per WebClient-Objekt

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

15

Manchmal braucht auch ein SystemAdministrator Hilfe dabei, Dateien von A nach B zu verschieben. Wie meistens gibt es auch hierfür verschiedene Wege, eine sehr beliebte Methode basiert auf der Nutzung eines PowerShellSkripts, das einfach auf die in Windows bereits eingebauten .NET-Mechanismen aufbaut. Dank der PowerShell können Windows-Administratoren die .NET-Klasse WebClient einsetzen, mit der sich ein funktionsfähiges PowerShell-Skript zum Upload und Download von Dateien schreiben lässt. Dieses Skript soll fünf grundlegende Aufgaben übernehmen: • Die Eingaben des Anwenders entgegennehmen; • das WebClient-Objekt erzeugen; • das Credentials-Objekt erzeugen; • den Uniform Resource Identifier (URI) erzeugen sowie • Download oder Upload der Datei. Die erste Aufgabe besteht darin, die Eingaben des

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Anwenders entgegenzunehmen. Als Eingabedaten soll dabei alles angenommen werden, was für die Nutzung eines FTP-Servers über eine grafische Benutzeroberfläche benötigt wird. Dazu gehören Benutzername und Kennwort, Dateinamen und der FTP-Servername. Diesen Werten werden dann Variablen zugewiesen, damit man sie zu einem späteren Zeitpunkt nach Bedarf und Belieben wieder verändern kann: $UserName = ‚myusername‘ $Password = ‚mypassword‘ $LocalFilePath = ‚C:\myfile.txt‘ $RemoteFileName = ‚myfile.txt‘ $ServerName = ‚myftpserver.somedomain. com‘

FTP-UPLOAD

Damit wären alle benötigten Eingabedaten in Variablen abgespeichert. Im nächsten Schritt wird schließlich das WebClient-Objekt erzeugt:

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

$webclient = New-Object System.Net. WebClient Dieser Befehl übergibt uns das Objekt unserer Begierde, mit dem wir später den Upload oder Download der Datei durchführen können. Das WebClient-Objekt verfügt über einen Credentials-Wert, den die PowerShell zur Übergabe von Benutzername und Kennwort an den FTP-Server einsetzt. Der Wert Credentials muss mit einem Objekt vom Typ System.Net. NetworkCredential belegt werden, das wiederum die beiden Parameter UserName und Password benötigt. Hier werden dann einfach die zuvor in den Variablen abgelegten Daten verwendet: $webclient.Credentials = New-Object System.Net.NetworkCredential($UserName, $Password)

16

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

UPLOAD ODER DOWNLOAD?

Damit steht jetzt ein WebClient-Objekt mit Credentials-Eigenschaft zur Verfügung, als nächstes muss die Entscheidung erfolgen, ob ein Upload oder Download der Dateien vorgenommen werden soll. Je nach Auswahl wird sich entsprechend der Uniform Resource Identifier unterscheiden. Soll beispielsweise eine Datei von einem FTP-Server heruntergeladen werden, so muss der URI dem folgenden Format entsprechen: ftp://SERVERNAME/filename.ext. Für diesen Fall wird ein System.Uri-Objekt benötigt, das als Parameter den tatsächlichen URI enthält. Danach wird die Variable $RemoteFileName genutzt, um den gewünschten Ordner auf dem FTP-Server anzugeben. $uri = New-Object System. Uri(“ftp://$ServerName/$RemoteFileName”) Nun sind alle Voraussetzungen erfüllt, die für den Download einer Datei per FTP erforderlich sind. Um eine Datei tatsächlich herunterzuladen, die auf einem FTP-Server liegt, wird DownloadFile genutzt. DownloadFile benötigt

FTP-UPLOAD

zwei Parameter: den URI und den Dateipfad, unter dem der Download abgelegt werden soll: $webclient.DownloadFile($uri, $LocalFilePath) EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

Es ist nur diese eine Zeile, die den kompletten Verbindungsaufbau zum FTP-Server übernimmt. Dabei werden Benutzername und Kennwort für die Anmeldung verwendet und im Stammverzeichnis des Servers die Datei myfile.txt gesucht, die in das Stammverzeichnis von Laufwerk C übertragen wird. Um eine Datei hochzuladen, wird UploadFile() genutzt. Der zugehörige Befehl ist der gleiche wie beim Download, nur dass statt Download Upload ersetzt werden muss: $webclient.UploadFile($uri, $LocalFilePath) Mit diesem Befehl wird die Datei c:\myfile. txt in das Stammverzeichnis des FTP-Servers übertragen. Alle bisher verwendeten Befehle lassen sich jetzt in einem einzigen PowerShellSkript zusammenfassen, in unserem Beispiel

17

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Move-FtpFile.ps1 genannt: param($Username,$Password,$FilePath, $ServerName,$Action) $webclient = New-Object System.Net. WebClient $webclient.Credentials = New-Object System.Net.NetworkCredential($UserName, $Password) $file = Get-Item -Path $FilePath $uri = New-Object System.Uri(„ftp:// $ServerName/$($file.Name)“) if ($Action -eq ‘Download’) { $webclient.DownloadFile($uri, $FilePath) } elseif ($Action -eq ‘Upload’) { $webclient.UploadFile($uri, $FilePath)

FTP-UPLOAD

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN

Die einzige Änderung, die an dieser Stelle vorgenommen wurde, ist die Parametrisierung der Eingabedaten und das Hinzufügen des Parameters $Action. Dieser wurde eingesetzt, um Nutzern des Skripts einen einfachen Weg zum Download oder Upload von Dateien an die Hand zu geben. Das Skript Move-FtpFile.ps1 kann dann ganz

AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

18

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

einfach wie folgt gestartet werden: PS> .\Move-FtpFile.ps1 -Username ‘myuser’ -Password ‘mypassword’ -FilePath ‘C:\myfile.txt’ -ServerName ‘myftpserver.somedomain.com’ -Action Download –Adam Betram 

ALTERNATIVE HYPER-V HYPER-V UND DSC MANAGER

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN

Desired State Configuration für Hyper-V-Hosts

Auch wenn die Marktanteile von Hyper-V denen von VMware vSphere noch immer hinterherhinken, holt Microsoft doch langsam, aber sicher auf. Für immer mehr Unternehmen spielen dabei vor allem die Preisgestaltung – in vielen Fällen kann Hyper-V kostenlos genutzt

AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL

Auch wenn die Marktanteile von Hyper-V denen von VMware vSphere noch immer hinterherhinken, holt Microsoft doch langsam, aber sicher auf.

Hyper-V zu investieren. Das Aufsetzen eines Hyper-V-Hosts auf einem vorhandenen Windows Server 2012 R2 kann natürlich auch automatisiert werden, um sich wiederholende Aufgaben schneller zu erledigen. In diesem Tutorial zeigen wir, wie sich die Windows PowerShell für das Deployment einsetzen lässt, insbesondere die PowerShell Desired State Configuration (DSC). Was braucht man also, um aus einem bestehenden Windows Server einen Hyper-VHost zu machen? Für unsere Zwecke reichen drei Dinge: Ein paar Windows-Features, ein Verzeichnis für die VMs und ein Switch, um die VMs zu vernetzen.

ÜBER DIE AUTOREN

AUFSETZEN DES DSC-FRAMEWORKS

werden – und das ständig anwachsende FeatureSet der Hyper-V-Plattform eine große Rolle. Diese Entwicklung hat schon so manchen Administrator dazu gebracht, immer stärker in

19

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Wenn man mit der PowerShell Desired State Configuration arbeitet, sollte man mit einer einzigen .ps1-Datei und einem darin enthaltenen Konfigurationsblock anfangen. In unserem

ALTERNATIVE HYPER-V HYPER-V UND DSC MANAGER

Beispiel könnten wir diese Konfiguration HyperVBuild nennen. Configuration HyperVBuild { } EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG

Eine Konfiguration ähnelt einer Funktion; sie beinhaltet ausführbaren Code, verhält sich aber ein wenig anders. Auf einen Konfigurationsblock folgt üblicherweise ein Konfigurationsparameter, ganz wie bei einer PowerShell-Funktion.

MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL

Auf einen Konfigurationsblock folgt üblicherweise ein Konfigurationsparameter, ganz wie bei einer PowerShell-Funktion.

Host, da das Skript sich bereits auf dem Server befindet, auf dem wir den Hyper-V Host erstellen möchten. Dem Konfigurationsblock kann nun der nodeCodeblock hinzugefügt werden, darin wird dem $NodeName-Parameter ein Wert zugewiesen. Dies informiert Windows darüber, dass für den in $NodeName angegebenen Computer eine Konfiguration erstellt werden soll. Configuration HyperVBuild { param( [string]$NodeName = ‚localhost‘ ) node $NodeName { } }

ÜBER DIE AUTOREN

Ein gängiger Parameter wäre $NodeName – dieser Parameter wird den Computer bestimmen, auf den die Konfiguration angewendet werden soll. In diesem Fall bleiben wir einfach beim standardmäßigen lokalen

20

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

XHYPER-V-MODUL HINZUFÜGEN

Nachdem dieses Framework soweit eingerichtet wurde, muss ein Modul namens xHyper-V integriert werden. Dieses PowerShell DSC-Modul wird für das Erstellen des Hyper-V-Switches

ALTERNATIVE HYPER-V HYPER-V UND DSC MANAGER

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

benötigt. Das Modul ist standardmäßig kein Bestandteil von Windows, kann aber von Microsofts Github-Repository heruntergeladen werden. Als Speicherort empfiehlt sich C:\ Programme\WindowsPowerShell\Modules; von dort aus steht es dann allen späteren Skripten automatisch zur Verfügung. Im nächsten Schritt kommt das Cmdlet Import-DscResource mit Referenz auf xHyper-V zum Einsatz. Configuration HyperVBuild { param( [string]$NodeName = ‚localhost‘ ) Import-DscResource –ModuleName xHyper-V node $NodeName { } } Nun kann mit dem Hinzufügen der erforderlichen Ressourcen begonnen werden. Als erstes sollte das Hyper-V-Feature integriert werden. Dieses verwendet eine DSC-Ressource, die

21

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Bestandteil von Windows ist. Hierzu wird eine Zeile mit dem Ressourcennamen WindowsFeature am Anfang erstellt, die mit einem Anzeigenamen zur Repräsentation dieser Ressource fortgesetzt wird. In diesem Fall verwenden wir als Anzeigenamen einfach „Hyper-V“. Innerhalb dieses Blocks kann nun das Attribut Ensure verwendet und mit dem Wert Present belegt werden, um das Windows-Feature zu installieren. Mit dem Namen des zu installierenden Windows-Features wird für die Einrichtung bei Konfigurationsbeginn gesorgt. WindowsFeature ‚Hyper-V‘ { Ensure=‘Present‘ Name=‘Hyper-V‘ } Um sicherzustellen, dass das Feature HyperV-PowerShell installiert ist, fügen wir den nachfolgenden Absatz hinzu: WindowsFeature ‚Hyper-V-Powershell‘ { Ensure=‘Present‘ Name=‘Hyper-V-Powershell‘ }

ALTERNATIVE HYPER-V HYPER-V UND DSC MANAGER

EDITORIAL EINFÜHRUNG: VARIABLEN UND

Vor der Erstellung der virtuellen Maschinen wird dann noch ein Ordner benötigt, hier kann zum Beispiel C:\\VMs verwendet werden. Mithilfe der File-Ressourcen wird der Ordner dann angelegt. Die File-Ressource verfügt über ein Type-Attribut, mit dessen Hilfe zwischen Dateien und Ordnern unterschieden werden kann.

KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD

File VMsDirectory { Ensure = ‚Present‘ Type = ‚Directory‘ DestinationPath = „$($env:SystemDrive)\VMs“ }

PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

Für das letzte Feature verwenden wir aus dem xHyper-V-Modul eine Ressource namens xVMSwitch. Mit deren Hilfe können HyperV-Switches erstellt und konfiguriert werden. Für Type muss der Wert Internal definiert werden, um ein nach außen hin abgeschottetes VM-Netzwerk auf dem Host anzulegen. xVMSwitch LabSwitch { DependsOn = ‚[WindowsFeature]Hyper-V‘

22

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Name = ‚LabSwitch‘ Ensure = ‚Present‘ Type = ‚Internal‘ } Dabei sollte man auf das Attribut DependsOn achten. Dieses Attribut ist allen Ressourcen gemeinsam und ermöglicht die Festlegung der Reihenfolge, in der Ressourcen ausgeführt werden.

Eine Konfiguration ähnelt einer Funktion; sie beinhaltet ausführbaren Code, verhält sich aber ein wenig anders.

In unserem Beispiel stellen wir darüber sicher, dass das Feature Hyper-V Windows zuerst installiert wird, bevor wir einen Switch erstellen. Auf der nachfolgenden Seite können Sie sehen, wie die Konfiguration inzwischen aussehen sollte.

ALTERNATIVE HYPER-V HYPER-V UND DSC MANAGER

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

23

configuration HyperVBuild { param ( [string]$NodeName = ‚localhost‘ ) Import-DscResource -ModuleName xHyper-V node $NodeName { WindowsFeature ‚Hyper-V‘ { Ensure=‘Present‘ Name=‘Hyper-V‘ } WindowsFeature ‚Hyper-VPowershell‘ { Ensure=‘Present‘ Name=‘Hyper-VPowershell‘ } File VMsDirectory { Ensure = ‚Present‘ Type = ‚Directory‘ DestinationPath = „$($env:SystemDrive)\VMs“

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

} xVMSwitch LabSwitch { DependsOn = ‚[WindowsFeature]Hyper-V‘ Name = ‚LabSwitch‘ Ensure = ‚Present‘ Type = ‚Internal‘ } } Nachdem damit nun die Konfiguration fertiggestellt wurde, können die MOFDateien (Windows Management Object File) erstellt werden, die zum Beginn der Hyper-VKonfiguration auf das System angewendet werden sollen. Dafür wird der Konfigurationsblock einfach genauso wie eine PowerShell-Funktion ausgeführt, indem sie über ihren Namen HyperVBuild aufgerufen wird. Dadurch wird ein Ordner mit demselben Namen erzeugt, der eine MOF-Datei namens localhost.mof enthält. Abschließend muss die Konfiguration noch auf die lokale Maschine angewendet werden. Dafür wird das Cmdlet Start-DscConfiguration mit verschiedenen Parametern verwendet.

ALTERNATIVE HYPER-V HYPER-V UND DSC MANAGER

Start-DscConfiguration -Path .\ HyperVBuild -Wait -Force

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS

Der erste Parameter Path zeigt StartDscConfiguration den Speicherort der MOFDatei an. Der nachfolgende Parameter Wait sorgt dafür, dass Start-DscConfiguration die vollständige Abarbeitung abwartet, bevor die Kontrolle zurück an die Konsole gegeben wird. Der Parameter Force letztlich weist

SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

24

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Start-DscConfiguration an, die Konfiguration zu pushen, statt sie zu pullen. Das Push/PullSzenario wird in diesem englischsprachigen Artikel genauer erklärt. Nach dem Start von Start-DscConfiguration werden während der Abarbeitung der Konfiguration möglicherweise einige Meldungen in der Konsole angezeigt. Wenn alles gut gegangen ist, steht wenige Minuten später ein brandneuer Hyper-V Server für VMs zur Verfügung. – Adam Betram

ALTERNATIVE HYPER-V MANAGER

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN

Grenzen der PowerShell

Microsoft hat erhebliche Mühen in die Entwicklung der PowerShell gesteckt, mit der IT-Administratoren Informationen über die installierten Rollen und Features auf WindowsServer-Betriebssystemen erhalten. Beinahe

AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT

Das Erstellen externer virtueller Switches auf Hyper-V-Hosts gehört normalerweise zum Aufgabenkreis des Planens und Entwerfens.

HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

25

jede Rolle und jedes Feature bietet ein eigenes PowerShell-Cmdlet, mit dem sich die für die Hyper-V-Verwaltung benötigte Zeit deutlich reduzieren lässt. Entsprechend gibt es auch für die HyperV-Rolle PowerShell-Cmdlets, die für die Interaktion mit dem Hyper-V-Host und den von

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

ihm gehosteten virtuellen Maschinen genutzt werden können. So lässt sich beispielsweise der Befehl Get-VM verwenden, um die auf einem bestimmten Hyper-V-Server installierten VMs aufzulisten, oder auch die Befehle Start-VM und Stop-VM, um eine einzelne oder mehrere VMs zu starten oder zu stoppen.

POWERSHELL-CMDLETS NICHT IMMER DIE ERSTE WAHL

Auch wenn es natürlich stimmt, dass das automatisierte Abarbeiten von PowerShellBefehlen deutlich weniger Zeit in Anspruch nimmt als derselbe Vorgang von einer grafischen Benutzeroberfläche aus, eignen sich PowerShellCmdlets doch nicht für alle Aufgaben. Bevor man etwa mit Hyper-V einen externen Switch mithilfe des PowerShell-Cmdlets New-VMSwitch hinzufügt, sollte man den verfügbaren physischen Netzwerkadapter kennen, dem der neue

ALTERNATIVE HYPER-V MANAGER

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

26

externe Switch zugeordnet werden soll. Von einem PowerShell-Fenster aus lässt sich diese Information über Get-NetAdapter ermitteln, womit sämtliche physischen Netzwerkadapter angezeigt werden. Anschließend muss die Art des Switches über den Parameter -SwitchType deklariert werden, sämtliche notwendigen Optionen wie etwa -AllowManagementOS gesetzt und dann der Befehl eingegeben werden, mit dem man einen neuen externen Switch auf einem Hyper-V-Host erzeugt. In vergleichbarer Weise kann auch Connect-VMNetworkAdapter eingesetzt werden, wenn man einen oder mehrere virtuelle Netzwerkadapter mit einem virtuellen Hyper-V-Switch verbinden will. Auch wenn es also PowerShell-Cmdlets gibt, mit denen man einen externen virtuellen Switch anlegen und virtuelle Netzwerkadapter mit einem virtuellen Hyper-V-Switch verbinden kann, fragt sich doch: Wie oft am Tag erledigt man so eine Aufgabe? Das Erstellen externer virtueller Switches auf Hyper-V-Hosts gehört normalerweise zum Aufgabenkreis des Planens und Entwerfens. Dabei ist es aber deutlich einfacher, virtuelle Hyper-V-Switches

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

mit dem Hyper-V Manager zu erstellen, als mit PowerShell-Cmdlets. In den meisten IT-Abteilungen dürften virtuelle Switches wohl kaum jeden Tag entfernt oder hinzufügt werden. Die Nutzung von Connect-VMNetworkAdapter mag außerordentlich hilfreich sein, wenn man virtuelle Netzwerkadapter mehrerer VMs mit einem virtuellen Hyper-V-Switch verbinden möchte. In einer Produktivumgebung dürfte dies aber nicht allzu oft vorkommen, weshalb sich in solchen Fällen tatsächlich der Einsatz des Hyper-V Managers empfiehlt.

WANN DER POWERSHELL-EINSATZ SINNVOLL IST

Auch wenn die PowerShell sicherlich nicht für jedes Szenario das Mittel der Wahl ist, gibt es doch gleich mehrere Gründe, warum Hyper-VCmdlets in Frage kommen können. PowerShell-Skripte eignen sich zum Beispiel hervorragend für sich ständig wiederholende Aufgaben. Die meisten PowerShell-Cmdlets verfügen über einen Parameter –WhatIf. Wird dieser Parameter für ein Cmdlet angegeben, so zeigt er an, was passieren würde, wenn das

ALTERNATIVE HYPER-V MANAGER

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN

Cmdlet so ausgeführt werden würde. Diese Option steht im Hyper-V Manager nicht zur Verfügung, dort wird jede Aufgabe sofort und unmittelbar ausgeführt. Auch wenn die Benutzeroberfläche von Hyper-V Manager um Bestätigung bitten wird, lässt sich das Ergebnis der Skripte erst bewerten, wenn diese abgearbeitet sind.

AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT

Die meisten Hyper-V-Cmdlets akzeptieren mehrere Eingaben, wie etwa mehrere VMs oder Hyper-VHosts, was sehr nützlich sein kann.

HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

27

Die meisten Hyper-V-Cmdlets akzeptieren mehrere Eingaben, wie etwa mehrere VMs oder Hyper-V-Hosts, was sehr nützlich sein kann, wenn eine dringende Aufgabe auf mehreren VMs oder mehreren Hyper-V-Hosts ausgeführt werden soll, ohne dabei mit dem Hyper-V Manager jede Menge Zeit zu verlieren. Wenn beispielsweise während einer Wartung für einen Hyper-V-Host

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

alle VMs abgespeichert oder im Betrieb auf einen anderen Hyper-V-Host migriert werden sollen, dann helfen die PowerShell-Cmdlets Suspend-VM und Move-VM. Um alle VMs auf einem lokalen Hyper-V-Host anzuhalten, kann der Suspend- oder InvokeBefehl wie folgt verwendet werden: Invoke-Command {Get-VM | Where State – eq „Running“ | Suspend-VM} –ComputerName Hyper-VHost1 Schließlich können auch die meisten der für Hyper-V 2012 R2 neuen Funktionen ausschließlich über PowerShell-Cmdlets konfiguriert werden. Einschließlich etwa der Ressourcenüberwachung für die VMs oder dem Aktivieren der PortSpiegelung. Auch das Aufsetzen bestimmter Replikationsoptionen wie der Servereinstellung -BypassProxy oder dem Resynchronisieren der VMs sowie das Gewähren und Entziehen von Verbindungsrechten an einzelne oder mehrere Benutzer für den Zugang zu VMs auf Windows Server 2012 R2 und neueren Hyper-V-Hosts ist nur über die PowerShell möglich.

ALTERNATIVE HYPER-V MANAGER

EDITORIAL EINFÜHRUNG: VARIABLEN UND KONSTANTEN AUTOMATISCHE VARIABLEN AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT HYPER-V UND DSC GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

Ab Windows Server 2012 R2 kann zwar beispielsweise die Steuerung des Benutzerzugangs zu VM-Verbindungen über den Hyper-V Manager konfiguriert werden, der Zugriff auf die VMs selbst lässt sich aber ausschließlich über die Cmdlets Grant-VMConnectAccess und Revoke-VMConnectAccess steuern. Hyper-V Manager verfügt über keine Option, solche VM-Verbindungsrechte zu gewähren oder zu entziehen. Wer etwa Benutzer1 erlauben möchten, sich mit einer SQLVM auf einem 2012 R2 Hyper-V-Host zu verbinden, der müsste hierfür folgenden Befehl nutzen: Grant-VMConnectAccess –VMName SQLVM – Username Domain.com\Benutzer1 Um die Rechte wieder zu entziehen, wird folgender Befehl verwendet: Revoke-VMConnectAccess –VMName SQLVM – Username Domain.com\Benutzer1 Die PowerShell ist schon seit langer Zeit ein integraler Bestandteil von Microsofts Server- und

28

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Client-Systemen und hilft Administratoren, wiederkehrende Aufgaben zu automatisieren und damit effizienter zu erledigen. Dabei gibt es aber nach wie vor Aufgaben, die schneller über die grafische Benutzeroberfläche des Hyper-V Manager erledigt werden können.

Die PowerShell ist ein integraler Bestandteil von Microsofts Serverund Client-Systemen und hilft Administratoren, wiederkehrende Aufgaben zu automatisieren und damit effizienter zu erledigen.

Gleichzeitig gibt es aber auch immer mehr Funktionen, die sich nur noch über die PowerShell konfigurieren lassen. So dürften auch zukünftig wohl beide AdministrationsWerkzeuge Bestand haben: die PowerShell genauso wie der Hyper-V Manager. –Nirmal Sharma

ÜBER DIE AUTOREN

ADAM BERTRAM ist Consultant und Unternehmer.

EDITORIAL

Seine Passion ist das Lösen technischer Probleme durch Automatisierung sowie das Teilen seines Wissens mit der Welt. Diese Passion hat ihn zu einem Microsoft PowerShell MVP sowie zum Autor verschiedener Trainingskurse für Pluralsight und Udemy gemacht. Zudem schreibt er sowohl für Print- als auch für Online-Medien im IT-Bereich.

EINFÜHRUNG: VARIABLEN UND

AUTOMATISIERUNG MIT FOREACH-LOOPS SKRIPT ZUR RDP-ABMELDUNG DATEI-UPLOAD PER WEBCLIENT-OBJEKT

ist eine Publikation von SearchDataCenter.de Michael Eckert | Editorial Director

KONSTANTEN AUTOMATISCHE VARIABLEN

Grundlagen und erste Praxisbeispiele der Windows PowerShell

NIRMAL SHARMA ist MCSEx3 und MCITP. Ihm wurde

die Auszeichnung Microsoft MVP in den Bereichen Directory Services und Windows Networking verliehen. Seine Fachbereiche sind Directory Services, FailoverCluster, Hyper-V, System Center, Microsoft Azure und Exchange Server. Er arbeitet bereits seit 1994 mit Microsoft-Technologien.

HYPER-V UND DSC

Wolfgang Dietl | Online Editor Ulrike Riess | Online Editor Tobias Wendehost | Online Editor Becky Wrigley | Assistant Editor Bill Crowley | Herausgeber [email protected] TechTarget 275 Grove Street, Newton, MA 02466 www.techtarget.com © 2016 TechTarget Inc. Kein Teil dieser Veröffentlichung darf ohne vorherige schriftliche Genehmigung des Verlages in irgendeiner Form oder auf irgendeine Weise weitergegeben oder reproduziert werden. Nachdrucke von TechTarget-Publikationen sind verfügbar über The YGS Group.

GRENZEN DER POWERSHELL ÜBER DIE AUTOREN

Über TechTarget: TechTarget publiziert Informationen für Profis im Bereich Informationstechnologie. Mehr als 100 Themen-Websites ermöglichen schnellen Zugriff auf ein reichhaltiges Angebot an Nachrichten, Ratgebern und Analysen über die Technologien, Produkte und Prozesse, die entscheidend sind für beruflichen Erfolg. Unsere Live- und virtuellen Veranstaltungen vermitteln direkten Zugang zu den Einschätzungen und Ratschlägen unabhängiger Experten. IT Knowledge Exchange, unsere soziale Community, bietet die Möglichkeit, um Rat zu fragen und sich mit Kollegen und Experten über Lösungen auszutauschen.

29

GRUNDLAGEN UND ERSTE PRAXISBEISPIELE DER WINDOWS POWERSHELL

Suggest Documents