Microsoft PowerShell ist eine großartige Skriptplattform. Microsoft bietet PowerShell-Unterstützung für fast alle Windows Server-Rollen und -Funktionen. Sie können PowerShell verwenden, um wiederkehrende Aufgaben zu automatisieren und Aufgaben, die Sie normalerweise mit den GUI-Tools ausführen, einfach über die Befehlszeile durchzuführen. Wenn Sie beispielsweise in einer Produktionsumgebung den Patching-Status auf Windows-Servern überprüfen müssen, ist die Verwendung des PowerShell-Skriptansatzes viel einfacher, als sich mit jedem Server einzeln zu verbinden und dann den Patching-Status zu überprüfen. Ich bin ein regelmäßiger Benutzer von PowerShell und habe in meiner 18-jährigen IT-Erfahrung Tausende von PowerShell-Skripts entwickelt.
Vor PowerShell war Visual Basic Scripting die primäre Skriptsprache zur Ausführung von Windows-Betriebsaufgaben. Obwohl Visual Basic Scripting immer noch existiert und viele IT-Administratoren VB-Skripte bevorzugen, ist es erwähnenswert, dass PowerShell die Komplexität des Codes reduziert. Um beispielsweise die Dienste auf einem Windows-Computer zu überprüfen, müssen Sie den VBScript-Code in einen Notizblock schreiben, die Datei als .VBS speichern und sie dann mit der CSCript-Hostausführungsdatei ausführen. Mit PowerShell können Sie jedoch ein einfaches Cmdlet „Get-Service“ verwenden, mit dem Sie Dienste auf einem Windows-Computer schnell auflisten können. Wenn Sie die Ausgabe mithilfe von VB-Skript in einer Datei speichern möchten, müssen Sie wieder eine Menge Code in das VB-Skript schreiben, der das Öffnen der Datei und das anschließende Schreiben des Inhalts in die Datei beinhaltet. In PowerShell ist es nicht erforderlich, die Datei zu öffnen, bevor die von einem PowerShell-Cmdlet abgerufenen Inhalte in eine Datei geschrieben werden können. Sie müssen lediglich die Cmdlets „Export-CSV“ oder „Add-Content“ verwenden.
Cmdlets: Die Bausteine von PowerShell-Skripten
PowerShell bietet Cmdlets (ausgesprochen „command-lets“), manchmal auch als Befehlszeilentools bezeichnet, mit denen Sie Informationen über das Betriebssystem, auf einem Windows-Computer installierte Anwendungen, Netzwerkinformationen, den Patching-Status eines Windows-Computers und vieles mehr abrufen können. Es ist wichtig zu beachten, dass PowerShell-Cmdlets in .NET geschrieben sind und .NET-Klassen verwenden, um die erforderlichen Aufgaben auszuführen. Wenn Sie herausfinden möchten, welche PowerShell-Cmdlets auf dem lokalen Computer verfügbar sind, führen Sie diesen Befehl aus:
Get-Command
Get-Command ist ein PowerShell-Cmdlet, das Cmdlets, Funktionen, Filter und PowerShell-Skripts abruft, die auf dem lokalen Computer installiert sind. Der obige Befehl fragt alle PowerShell-Module ab, die auf dem lokalen Computer installiert sind. Wenn Sie alle auf dem lokalen Computer installierten Befehle in einer Reihenfolge anzeigen möchten, führen Sie diesen Befehl aus:
Get-Command -Type cmdlet | Sort-Object -Property Noun |FT -GroupBy Noun
Drei Arten von PowerShell-Vorgängen
Mit PowerShell können Sie drei Arten von Vorgängen ausführen. Diese sind Get, Set und Remove. Jedes PowerShell-Cmdlet, das mit „Get“ beginnt, wird normalerweise zum Abrufen von Informationen aus Windows-Komponenten verwendet. Get-ADUser führt beispielsweise einen Lesevorgang für die Active Directory-Datenbank aus, um die Benutzerinformationen abzurufen. Im Folgenden sind einige Beispiele für die Verwendung des PowerShell-Cmdlets „Get-ADUser“ aufgeführt:
Get-ADUser -Filter * -SearchBase „OU=TestUsers,DC=TechGenix,DC=Com“
Der obige Befehl ruft alle Benutzerkonten ab, die sich in einer Organisationseinheit befinden, während der folgende Befehl Eigenschaften abruft, die mit einem einzelnen Active Directory-Benutzer verbunden sind:
Get-ADUser -Identity JohnThomas -Properties *
PowerShell-Cmdlets, die mit „Set“ beginnen, werden zum Bearbeiten von Windows-Komponenteninformationen verwendet. Mit Set-ADUser können Sie beispielsweise verschiedene betriebliche Aufgaben ausführen, wie in den folgenden Befehlen gezeigt:
Set-ADUser -Identity JohnThomas -HomeFolder \\Server1\%UserName%
Die folgenden Befehle legen die E-Mail-Eigenschaft für Benutzer JohnThomas fest.
$DieserBenutzer = Get-ADUser -Identity JohnThomas -Properties Mail
$DieserBenutzer.Mail = [email protected]
Set-ADUser -Instance $DieserBenutzer
Alle PowerShell-Cmdlets, die mit „Remove“ beginnen, werden zum Ausführen von Löschvorgängen verwendet. Beispielsweise kann mit Remove-ADUser ein Active Directory-Benutzer wie folgt entfernt werden:
Remove-ADUser -Identity JohnThomas
Kombinieren von PowerShell-Cmdlets
Eines der besten Features von PowerShell ist die Möglichkeit, zwei oder mehr PowerShell-Cmdlets in einem einzigen PowerShell-Befehl zu kombinieren. Solche Befehle werden manchmal als Einzeiler-PowerShell-Befehle bezeichnet. Wenn Sie beispielsweise alle deaktivierten Benutzerkonten aus Active Directory entfernen müssen, können Sie die PowerShell-Cmdlets „Search-ADAccount“ und „Remove-ADUser“ kombinieren, wie im folgenden Befehl dargestellt:
Search-ADAccount -AccountDisabled | Where {$_.ObjectClass -eq „User“} | Remove-ADUser
Wie Sie im obigen Befehl sehen können, führt das PowerShell-Cmdlet Search-ADAccount eine Suche im gesamten Active Directory durch, um nach deaktivierten Konten zu suchen, und durch die Verwendung des Pipe-Operators (|) weisen Sie Remove-ADUser an, einen Löschvorgang nur für die Benutzer auszuführen, die von Search-ADAccount abgerufen werden.
PowerShell-Aliase
Auch wenn viele PowerShell-Cmdlets einfach zu lesen und zu verwenden sind, bietet PowerShell auch eine Funktion namens PowerShell-Alias. PowerShell ist intelligent genug, um den Namen eines PowerShell-Cmdlets mit einem Druck auf die Tabulatortaste zu vervollständigen. Falls Sie Schwierigkeiten haben, sich die Namen der PowerShell-Cmdlets zu merken, können Sie PowerShell-Aliase erstellen. Sie können beispielsweise mit dem folgenden Befehl einen Alias für das PowerShell-Cmdlet „Get-MailBoxStatistics“ erstellen:
New-Alias ShowMB Get-MailBoxStatistics
Wenn Sie „ShowMB“ in das PowerShell-Fenster eingeben, sucht PowerShell nach dem Cmdlet, das mit dem Alias „ShowMB“ verknüpft ist, und führt es dann aus.
Speichern von Informationen in einer CSV-Datei
Wenn es um das Speichern von Informationen in einer CSV-Datei geht, spart PowerShell viel Skriptarbeit. PowerShell bietet das Cmdlet „Export-CSV“, das Sie mit allen anderen PowerShell-Cmdlets verwenden können. Standardmäßig zeigt jeder PowerShell-Befehl, den Sie ausführen, die resultierenden Informationen im PowerShell-Befehlsfenster an, es sei denn, Sie fügen Export-CSV am Ende des Befehls hinzu, wie im folgenden Befehl gezeigt:
Get-ADUser -Filter * -SearchBase „OU=TestUsers,DC=TechGenix,DC=Com“ | Export-CSV C:\Temp\AllUsersInAnOU.CSV
Beachten Sie, dass Sie im obigen Befehl nur „Export-CSV“ am Ende des Befehls hinzufügen, um die Ausgabe in eine CSV-Datei zu exportieren.
Wie Sie sehen, reduzieren PowerShell-Skripte die Zeit, die für die Ausführung täglicher betrieblicher Aufgaben benötigt wird. PowerShell ist in der Lage, drei operative Aufgaben auszuführen: Get, Set und Remove, und 97 Prozent der PowerShell-Cmdlets beginnen mit diesen drei Wörtern, um die Funktion eines PowerShell-Cmdlets leicht zu identifizieren. Wir haben auch erklärt, wie einfach es ist, zwei Cmdlets in einem einzigen Befehl zu kombinieren, um Ihre PowerShell-Skripte effizienter zu machen.