5 PowerShell-Tricks, die Bash unter Windows schlagen

/de/images/windows-powershell-vs-powershell.jpg

Bash ist unbestreitbar die Shell der Wahl für viele Entwickler, insbesondere für diejenigen, die hauptsächlich mit Linux arbeiten. Es ist leistungsstark, flexibel und wurde bereits seit Jahren umfassend getestet. Unter Windows erfreut sich PowerShell jedoch aufgrund seiner modernen Funktionen, Benutzerfreundlichkeit und engen Integration mit dem Betriebssystem immer größerer Beliebtheit.

Um es klar zu sagen: Ich sage nicht, dass PowerShell in jeder Situation besser ist als Bash, aber man kann durchaus sagen, dass PowerShell speziell für Windows entwickelt wurde und daher die Sprache des Windows-Betriebssystems besser spricht als jede andere Shell, nicht nur Bash.

Ich verwende beide Shells schon seit geraumer Zeit und habe ein paar PowerShell-Tricks gefunden, die Bash bei der Windows-Systemverwaltung und -Automatisierung durchweg übertreffen.

Arbeiten mit Objekten statt reinem Text

PowerShells größte Supermacht

Einer der Hauptunterschiede zwischen Bash und PowerShell besteht darin, wie sie mit der Ausgabe umgehen. In Bash ist die Ausgabe jedes Befehls nur Text. Wenn Sie hilfreiche Informationen extrahieren möchten, müssen Sie die Ausgabe normalerweise mit Tools wie grep, awk oder cut analysieren. Das bedeutet, sich die Muster und Saitenmanipulationen zu merken. Natürlich ist es machbar, aber es kann schnell chaotisch und schwierig in der Wartung werden.

PowerShell behandelt im Gegensatz zu Bash alles als Objekt und nicht als Text. Das heißt, wenn Sie darauf Befehle ausführen, beispielsweise „Get-Process“, erhalten Sie strukturierte Daten, die Sie weiter sortieren, filtern und formatieren können, ohne Zeichenfolgen analysieren zu müssen.

Schauen Sie sich zum Beispiel diesen Befehl an: Get-Process | Where-Object CPU-gt 100 | Select-Object-Name, CPU

Wenn Sie diesen Befehl in PowerShell ausführen, werden die Prozesse auf Ihrem System, die mehr als 100 CPU-Einheiten verwenden, zusammen mit ihren Namen und ihrer Nutzung aufgelistet. Grundsätzlich geht es darum, Prozesse mit hoher CPU-Auslastung schnell zu finden. Wenn die Befehle separat ausgeführt werden, bleiben die Daten in der gesamten Pipeline strukturiert. Dies ist ein großer Vorteil, wenn Sie komplexe Aufgaben skripten müssen. Bash kann dies nicht nativ tun.

Zugriff auf das gesamte Windows-Ökosystem

Von Registry-Optimierungen bis hin zur Systemverwaltung

/de/images/reading-windows-startup-registry-entry-using-powershell.jpg

Wie ich bereits erwähnt habe, spricht PowerShell am effektivsten die Muttersprache des Windows-Betriebssystems. Damit meinte ich, dass es Komponenten auf Systemebene wie die Registrierung, den Taskplaner, WMI (Windows Management Instrumentation), laufende Prozesse und Dienste erreichen kann. Bash hat unter Windows keinen integrierten Zugriff auf diese Dinge.

Angenommen, Sie möchten sehen, welche Apps beim Systemstart ausgeführt werden. In PowerShell können Sie das erkennen, indem Sie einfach diesen Befehl ausführen: Get-ItemProperty-Path “HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"Sie fragen die Registrierung direkt über diesen Befehl ab. Mit der gleichen Einfachheit können Sie außerdem Skripts schreiben, um Registrierungsschlüssel zu deaktivieren, zu entfernen oder zu ändern. Darüber hinaus können Sie unter Windows ausgeführte Dienste mit einfachen Befehlen wie „Start-Service-Name wuauserv“ starten oder stoppen

Eine solche Integration ist für Systemadministratoren sehr wertvoll, da sie die Notwendigkeit separater GUI-Tools oder benutzerdefinierter C#-Skripte überflüssig macht.

Aufgaben mit Cmdlets und Modulen automatisieren

Wiederverwendbare Befehle für Windows

/de/images/installing-module-to-manage-windows-updates-from-powershell.jpg

Ein weiterer Bereich, in dem PowerShell Bash übertrifft, und einer meiner Lieblingsaspekte an PowerShell, ist die Verwendung von Cmdlets. Hierbei handelt es sich um kleine, speziell entwickelte Befehle, die dem leicht verständlichen Verb-Nomen-Muster folgen, z. B. Get-Process, Start-Service und Remove-Item. Diese sind beschreibend und leicht vorhersehbar, wofür sie gedacht sind.

In Bash müssen Sie sich für jedes Tool eine völlig andere Syntax merken. Darüber hinaus unterstützt PowerShell auch ein umfangreiches Ökosystem von Modulen, die noch mehr Funktionalität bieten. Wenn Sie beispielsweise Windows-Updates über die Befehlszeile verwalten möchten, installieren Sie einfach das PSWindowsUpdate-Modul.

Nach der Installation verwenden Sie einfach den folgenden Befehl, um das neueste Windows Update zu installieren: Install-WindowsUpdate-AcceptAll-AutoReboot

Dadurch wird Windows aktualisiert, ohne dass die Einstellungen geöffnet werden müssen. Neben Windows-Updates gibt es weitere nützliche Module, etwa zur Verwaltung von Active Directory, Microsoft 365, Azure und sogar AWS. Bash eignet sich auch für etwas Ähnliches, aber PowerShell ist besser in das Windows-Ökosystem integriert.

Dateien und Ordner mit intelligenten Befehlen verwalten

Dateiverwaltung auf einfache Weise

/de/images/using-a-powershell-command-to-find-files-larger-than-100mb-in-a-folder.jpg

Wenn man es sich anschaut, verarbeiten sowohl Bash als auch PowerShell Dateien ziemlich gut. Unter Windows ist der Ansatz von PowerShell jedoch konsistenter und flexibler. Ich finde es einfacher, meine Dateien unter Windows mit einfachen PowerShell-Befehlen zu verwalten.

Um beispielsweise alle PDF-Dateien eines Ordners in einen Sicherungsordner zu kopieren, starten Sie einfach PowerShell in dem Ordner, in dem sich die PDF-Dateien befinden, und verwenden Sie diesen Befehl: *.pdf C:\Backup

Um alle Dateien in einem bestimmten Ordner zu finden, die größer als 100 MB sind, starten Sie PowerShell in diesem Ordner und verwenden Sie den folgenden Befehl: Get-ChildItem-Recurse | Where-Object {$_.Length-gt 100MB}

Dank der Verb-Noun-Syntax von PowerShell folgen alle diese Befehle derselben Struktur. In Bash benötigen Sie verschiedene Tools und Flags, um Dateien ordnungsgemäß zu verwalten.

Remoting und Automatisierung leicht gemacht

Reibungsloses Arbeiten über mehrere Systeme hinweg

/de/images/enabling-psremoting-on-powershell.jpg

Eine stark unterschätzte Stärke von PowerShell ist die Unterstützung für Remoting. Mit PowerShell Remoting (PSRemoting) können Sie Befehle auf Remotecomputern über WinRM (Windows Remote Management) ausführen. Es ist in das System integriert und erfordert keine SSH-Server von Drittanbietern.

Angenommen, Sie möchten einen Dienst auf 5 PCs neu starten. In Bash benötigen Sie SSH-Zugriff, einen gemeinsamen Schlüssel und eine Schleife. Verwenden Sie in PowerShell einfach diesen Befehl: Invoke-Command-ComputerName PC1, PC2, PC3, PC4, PC5-ScriptBlock { Restart-Service spooler }

Es ist prägnant, skalierbar und sicher. Sie können Anmeldeinformationen übergeben, Skripts remote ausführen oder geplante Jobs verwenden. Dies ist in Unternehmens- oder IT-Umgebungen, in denen Sie mehrere Maschinen verwalten müssen, sehr hilfreich. Es ist, als hätte man ein einziges Bedienfeld für alle Maschinen, aber über eine Befehlszeile per Skript.

PowerShell bietet Ihnen bessere Skripterstellung und Benutzerfreundlichkeit

Wie gesagt, es besteht kein Zweifel daran, wie unglaublich Bash ist, insbesondere für Linux-Rechner. Wenn Sie jedoch hauptsächlich unter Windows arbeiten, erhalten Sie durch den Wechsel zu PowerShell eine bessere Kontrolle über das Betriebssystem als mit jeder anderen Shell. Es bietet weit mehr Funktionen und Tools als Bash.

Unter Linux mag Bash immer noch meine erste Wahl sein, aber unter Windows ist PowerShell ein klarer Gewinner.

*️⃣ Quelllink:

PowerShell, hohe CPU-Auslastung, welche Apps beim Systemstart ausgeführt werden, Wechsel zu PowerShell,