Dmitry Nikolaev - stock.adobe.co

Eingabeaufforderung oder PowerShell: was verwenden Sie wann?

Die Eingabeaufforderung und PowerShell sind textbasierte Verwaltungs-Tools für Windows-Umgebungen. Administratoren sollten sich mit beiden auskennen, um sie kompetent zu nutzen.

Es gibt verschiedene Möglichkeiten, ein Windows-Client- oder -Serverbetriebssystem über die Befehlszeile zu verwalten.

Am gebräuchlichsten und auch unter Endanwendern bekannt ist die Eingabeaufforderung. Cmd.exe ist seit Windows NT Teil von Windows. Jeder Windows-Profi sollte damit vertraut sein. Wenn Sie komplexere Aufgaben und auch Automatisierungsfunktionen nutzen möchten, sollten Sie jedoch auf PowerShell zurückgreifen. Es ist das neuere und leistungsfähigere Tool zum programmgesteuerten Verwalten aller modernen Windows-Versionen sowie einer Vielzahl anderer Plattformen.

Lassen Sie uns einige Beispiele für Aufgaben behandeln, die Administratoren mit diesen beiden Tools jeweils erledigen können, und wie sie im Vergleich gegeneinander abschneiden.

Aufgaben für die Eingabeaufforderung

Für die altehrwürdige Eingabeaufforderung sind Befehle wie dir oder cd äußerst nützlich. In einigen Situationen ist jedoch Powershell der beste Befehl, den Sie in die Eingabeaufforderung eingeben können. Doch das heißt nicht, dass die Eingabeaufforderung überflüssig ist.

Wenn Sie beispielsweise Windows Server Core ausführen, nutzen Sie das SConfig-Tool. Dabei handelt es sich um eine von Microsoft geschriebene VMscript-Datei, die grundlegende Serverkonfigurationsbefehle ausführt. Dazu gehören Netzwerkeinstellungen oder die Verwaltung von Serverfunktionen. Sie können dasselbe mit etwas Wissen auch in PowerShell erreichen, aber es ist einfacher, mit Server Core zu beginnen.

Ein weiteres typisches Einsatzgebiet für die Eingabeaufforderung ist die Windows Preinstallation Environment (WinPE) und die Windows Recovery Environment (WinRE). Beide lassen sich so konfigurieren, dass sie in eine Eingabeaufforderung booten und enthalten viele nützliche Tools, um ein Gerät für das Erstellen eines Images vorzubereiten, oder Startprobleme zu beheben. Beim Konfigurieren von WinPE ist es oft eine gute Idee, Windows PowerShell parallel zu benutzen – außer, wenn Sie die Größe des Images um jeden Preis gering halten müssen.

Für PowerShell geeignete Aufgaben

Bei den meisten anderen Aufgaben kommen Sie mit PowerShell weiter.

Der bemerkenswerteste Vorteil von PowerShell gegenüber der Eingabeaufforderung ist ihre Erweiterbarkeit. Sie können sowohl in der Eingabeaufforderung als auch für PowerShell Skripte schreiben, aber die Fähigkeiten ersterer als Interpreter sind stark eingeschränkt. Sie können VBScript sowie den cscript-Interpreter verwenden; es ist aber einfacher, direkt in PowerShell zu schreiben und die Vorteile der Module, der nativen .NET-Integration und der Pipeline zu nutzen.

Mit dieser Erweiterbarkeit und einem objektorientierten Ansatz bietet sich die Möglichkeit, eine Reihe von Plattformen zu verwalten. PowerShell-Module können die meisten, wenn nicht sogar alle Produkte von Microsoft wie Exchange, SQL Server und Cloud-Angebote wie Office 365 und Azure Active Directory verwalten.

PowerShell wird mit einer Vielzahl von vorinstallierten Funktionen geliefert, die in der Eingabeaufforderung nicht verfügbar sind. Mit allen *-Object-Cmdlets können Sie Objekte sortieren, gruppieren, auswählen, vergleichen, messen und testen – alles ohne spezielle Codierung zur Unterstützung dieser Funktionen.

Eingabeaufforderung versus PowerShell: Beispiele

Vergleichen wir, wie Administratoren bestimmte Aufgaben über die Befehlszeile mit PowerShell auf einem Windows-System ausführen können.

Nehmen wir zunächst an, wir schreiben ein Skript, um ein Backup-Administratorenkonto auf allen unseren Endbenutzergeräten zu erstellen. Wir möchten überprüfen, ob es existiert, und veranlassen, dass ein neues erstellt wird, wenn es keines gibt. In einer Batchdatei könnte dies wie folgt aussehen:

set user=NewAdmin

net user %user%

if %ERRORLEVEL% EQU 0 (

    echo %user% already exists

) else (

    net user %user% /ADD

    echo %user% was created

)

Wir werden ziemlich viel Ausgabe sehen, da wir die Rückgabe nicht mit dem Befehl @echo off ausgeschaltet haben (Abbildung 1).

Beispiel für die Verwendung der Eingabeaufforderung
Abbildung 1: Die Eingabeaufforderung gibt die Information aus, dass sie das Konto NewAdmin erstellt hat.

In unserem Beispiel nennen wir das Konto 'NewAdmin'. Um zu überprüfen, ob es existiert, führen wir den Befehl net user aus, um den Benutzer zurückzugeben. Wenn der Benutzer nicht vorhanden ist, gibt die Konsole einen Fehler aus. Suchen Sie nach der Variable ERRORLEVEL.

Wenn wir nun das Äquivalent in PowerShell geschrieben haben, sieht das ungefähr folgendermaßen aus:

$user = 'NewAdmin'

if ((Get-LocalUser).Name -contains $user) {

    Write-Host "$user already exists"

} else {

    New-LocalUser -Name $user

    Write-Host "$user was created"

}

Dies führt standardmäßig zu einer viel schnelleren Ausgabe, wie in Abbildung 2.

Beispiel für die Verwendung von PowerShell
Abbildung 2: Die PowerShell gibt eine Bestätigung aus, dass sie einen neuen Nutzer erstellt hat.

Während die Anzahl der Zeilen zwischen den einzelnen Skripten ähnlich ist, ist das PowerShell-Skript aufgrund der Verb-Substantiv-Kombinationen einfacher zu lesen und zu verstehen.

In diesem nächsten Beispiel lassen wir uns wir alle kritischen Ereignisse aus dem Systemereignisprotokoll mit der ID 41 zurückgeben. An der Eingabeaufforderung würden wir wevtutil (eine separate, kompilierte ausführbare Datei) verwenden:

wevtutil qe System /q:"*[System[(Level=1) and (EventID=41)]]" /f:text

Ausgabe eines Ereignisprotokolls mit der ID 41
Abbildung 3: Mit dem Befehl lassen wir uns das Ereignisprotokoll mit der ID 41 ausgeben

Ereignis-ID 41 steht für die Wiederherstellung nach einem Absturz.

In PowerShell würden wir Get-WinEvent verwenden:

Get-WinEvent -FilterHashtable @{

    LogName = 'System'

    Id = '41'

    Level = 1

}

In Abbildung 4 sehen wir die Ausgabe hierfür.

Output für das Get-WinEvent-Kommando
Abbildung 4: Die Ausgabe für den Get-WinEvent-Befehl in PowerShell.

Für die Eingabeaufforderung müssen Sie zum Durchführen dieser Aufgabe mit dem XPath-Filter vertraut sein, der bei der Suche nach Ereignissen über die Ereignisanzeige hilfreich ist.

Was aber, wenn Sie diese Daten exportieren möchten? Im Fall von wevtutil geben wir den /f-Parameter an, der es uns ermöglicht, das Format auf XML oder RenderedXML festzulegen – beides können wir aber im Moment nicht gebrauchen.

Da PowerShell eine objektorientierte Programmiersprache ist, erhalten wir die Berichte als EventLogRecord-Objekte und können die Pipeline verwenden, um diese Objekte weiter zu bearbeiten. Zum Beispiel ist es möglich, sie mit Sort-Object in eine bestimmte Reihenfolge zu bringen oder mit Export-Excel in eine Excel-Tabelle exportieren.

Spezialwissen zu Eingabeaufforderung ist für jeden Administrator nützlich – insbesondere in Situationen, die WinRE oder WinPE involvieren – PowerShell ist trotzdem das weitaus wichtigere Werkzeug und vor allem das flexiblere. Administratoren können PowerShell verwenden, um alles zu verwalten, was mit automatisch erstellten oder benutzerdefinierten Objekten zusammenhängt. Während in unserem Beispiel für das Durchsuchen von Ereignisprotokollen beide Konsolen die Informationen extrahieren konnten, formatiert PowerShell die Daten sinnvoller.

Erfahren Sie mehr über Server- und Desktop-Virtualisierung

ComputerWeekly.de
Close