PowerShell: Unterschied zwischen den Versionen

Aus FLBK-Wiki
Zur Navigation springen Zur Suche springen
Zeile 54: Zeile 54:
=== Grundlagen und Hilfesystem ===
=== Grundlagen und Hilfesystem ===
* '''STRG + Mausrad''': Ändert die Schriftgröße in der Konsole.
* '''STRG + Mausrad''': Ändert die Schriftgröße in der Konsole.
* <syntaxhighlight lang="powershell">Get-Help</syntaxhighlight>: Zeigt die Hilfeseite zu einem Cmdlet an (z.B. <syntaxhighlight lang="powershell">Get-Help Get-Process</syntaxhighlight>).
* '''<code>Get-Help</code>''': Zeigt die Hilfeseite zu einem Cmdlet an (z.B. <code>Get-Help Get-Process</code>).
* <syntaxhighlight lang="powershell">Update-Help</syntaxhighlight>: Lädt die neuesten Hilfedateien herunter.
* '''<code>Update-Help</code>''': Lädt die neuesten Hilfedateien herunter.
* <syntaxhighlight lang="powershell">Get-Command</syntaxhighlight>: Listet alle verfügbaren Befehle auf.
* '''<code>Get-Command</code>''': Listet alle verfügbaren Befehle auf.
** <syntaxhighlight lang="powershell">Get-Command -Name *-service*</syntaxhighlight>: Findet Cmdlets, die "-service" im Namen enthalten.
** <code>Get-Command -Name *-service*</code>: Findet Cmdlets, die "-service" im Namen enthalten.


=== Kompatibilität mit Cmd & Linux ===
=== Kompatibilität mit Cmd & Linux ===
Zeile 63: Zeile 63:


* '''Typische Aliase:'''
* '''Typische Aliase:'''
** <syntaxhighlight lang="powershell">dir</syntaxhighlight> → Get-ChildItem
** <code>dir</code> → Get-ChildItem
** <syntaxhighlight lang="powershell">ls</syntaxhighlight> → Get-ChildItem
** <code>ls</code> → Get-ChildItem
** <syntaxhighlight lang="powershell">ipconfig /all</syntaxhighlight> → Wird direkt ausgeführt
** <code>ipconfig /all</code> → Wird direkt ausgeführt
** <syntaxhighlight lang="powershell">mkdir</syntaxhighlight> → New-Item
** <code>mkdir</code> → New-Item
** <syntaxhighlight lang="powershell">rd</syntaxhighlight> → Remove-Item
** <code>rd</code> → Remove-Item
** <syntaxhighlight lang="powershell">man</syntaxhighlight> → Get-Help
** <code>man</code> → Get-Help
** <syntaxhighlight lang="powershell">cls</syntaxhighlight> → Clear-Host
** <code>cls</code> → Clear-Host
* '''Alias abfragen:''' <syntaxhighlight lang="powershell">Get-Alias ls</syntaxhighlight> zeigt, welches Cmdlet sich hinter <syntaxhighlight lang="powershell">ls</syntaxhighlight> verbirgt.
* '''Alias abfragen:''' <code>Get-Alias ls</code> zeigt, welches Cmdlet sich hinter <code>ls</code> verbirgt.


=== Einfache Cmdlets für den Einstieg ===
=== Einfache Cmdlets für den Einstieg ===
Zeile 76: Zeile 76:


* '''Prozesse:'''
* '''Prozesse:'''
** <syntaxhighlight lang="powershell">Get-Process</syntaxhighlight>: Zeigt alle laufenden Prozesse an (wie <syntaxhighlight lang="powershell">tasklist.exe</syntaxhighlight>).
** <code>Get-Process</code>: Zeigt alle laufenden Prozesse an (wie <code>tasklist.exe</code>).
** <syntaxhighlight lang="powershell">Get-Process -Name notepad</syntaxhighlight>: Zeigt alle Notepad-Prozesse.
** <code>Get-Process -Name notepad</code>: Zeigt alle Notepad-Prozesse.
** <syntaxhighlight lang="powershell">Stop-Process -Name notepad</syntaxhighlight>: Beendet alle Notepad-Prozesse.
** <code>Stop-Process -Name notepad</code>: Beendet alle Notepad-Prozesse.
** Prozess starten: <syntaxhighlight lang="powershell">.\notepad.exe</syntaxhighlight> (relativer Pfad)
** Prozess starten: <code>.\notepad.exe</code> (relativer Pfad)


* '''Systeminformationen:'''
* '''Systeminformationen:'''
** <syntaxhighlight lang="powershell">$PSVersionTable</syntaxhighlight>: Zeigt die PowerShell-Version an.
** <code>$PSVersionTable</code>: Zeigt die PowerShell-Version an.
** <syntaxhighlight lang="powershell">Get-Service</syntaxhighlight>: Listet alle Dienste und ihren Status auf.
** <code>Get-Service</code>: Listet alle Dienste und ihren Status auf.
** <syntaxhighlight lang="powershell">Get-HotFix</syntaxhighlight>: Zeigt installierte Updates.
** <code>Get-HotFix</code>: Zeigt installierte Updates.
** <syntaxhighlight lang="powershell">Get-WindowsDriver -Online -All</syntaxhighlight>: Listet alle Windows-Treiber auf.
** <code>Get-WindowsDriver -Online -All</code>: Listet alle Windows-Treiber auf.


* '''Drucker:'''
* '''Drucker:'''
** <syntaxhighlight lang="powershell">Get-Printer</syntaxhighlight>: Zeigt konfigurierte Drucker an.
** <code>Get-Printer</code>: Zeigt konfigurierte Drucker an.
** <syntaxhighlight lang="powershell">Get-PrintConfiguration -PrinterName "Druckername"</syntaxhighlight>: Zeigt Konfiguration eines bestimmten Druckers.
** <code>Get-PrintConfiguration -PrinterName "Druckername"</code>: Zeigt Konfiguration eines bestimmten Druckers.


=== Arbeiten mit Parametern ===
=== Arbeiten mit Parametern ===
Parameter werden mit <syntaxhighlight lang="powershell">-Parametername</syntaxhighlight> übergeben. Es gibt zwei Typen:
Parameter werden mit <code>-Parametername</code> übergeben. Es gibt zwei Typen:
* '''Parameter mit Argument:''' <syntaxhighlight lang="powershell">-Name "wuauserv"</syntaxhighlight>
* '''Parameter mit Argument:''' <code>-Name "wuauserv"</code>
* '''Switch-Parameter (ein/aus):''' <syntaxhighlight lang="powershell">-Online</syntaxhighlight>, <syntaxhighlight lang="powershell">-All</syntaxhighlight>
* '''Switch-Parameter (ein/aus):''' <code>-Online</code>, <code>-All</code>


=== Beispiele: Systemkonfiguration ===
=== Beispiele: Systemkonfiguration ===
* '''Dienste konfigurieren:'''
* '''Dienste konfigurieren:'''
** <syntaxhighlight lang="powershell">Set-Service -Name wuauserv -StartupType Disabled</syntaxhighlight>
** <code>Set-Service -Name wuauserv -StartupType Disabled</code>
** <syntaxhighlight lang="powershell">Stop-Service -Name wuauserv</syntaxhighlight>
** <code>Stop-Service -Name wuauserv</code>


* '''Netzwerk:'''
* '''Netzwerk:'''
** <syntaxhighlight lang="powershell">Get-NetIPInterface</syntaxhighlight>: Listet Netzwerkschnittstellen auf.
** <code>Get-NetIPInterface</code>: Listet Netzwerkschnittstellen auf.
** <syntaxhighlight lang="powershell">Get-NetIPAddress -AddressFamily IPv4 -PrefixOrigin Dhcp</syntaxhighlight>: Zeigt IPv4-Adressen, die von DHCP bezogen wurden.
** <code>Get-NetIPAddress -AddressFamily IPv4 -PrefixOrigin Dhcp</code>: Zeigt IPv4-Adressen, die von DHCP bezogen wurden.
** <syntaxhighlight lang="powershell">Test-NetConnection -ComputerName 'Nwfs'</syntaxhighlight>: Ähnlich wie <syntaxhighlight lang="powershell">ping</syntaxhighlight>, aber leistungsstärker.
** <code>Test-NetConnection -ComputerName 'Nwfs'</code>: Ähnlich wie <code>ping</code>, aber leistungsstärker.
** <syntaxhighlight lang="powershell">Set-NetFirewallProfile -All -Enabled true</syntaxhighlight>: Aktiviert die Firewall für alle Profile.
** <code>Set-NetFirewallProfile -All -Enabled true</code>: Aktiviert die Firewall für alle Profile.


* '''Apps verwalten (Windows 10/11):'''
* '''Apps verwalten (Windows 10/11):'''
** <syntaxhighlight lang="powershell">Get-AppxPackage -Name *help* | Remove-AppxPackage</syntaxhighlight>: Entfernt Apps mit "help" im Namen für den aktuellen Benutzer.
** <code>Get-AppxPackage -Name *help* | Remove-AppxPackage</code>: Entfernt Apps mit "help" im Namen für den aktuellen Benutzer.
** <syntaxhighlight lang="powershell">Get-AppxPackage | Out-GridView -PassThru</syntaxhighlight>: Zeigt Apps in einer grafischen Tabelle zur Auswahl.
** <code>Get-AppxPackage | Out-GridView -PassThru</code>: Zeigt Apps in einer grafischen Tabelle zur Auswahl.


=== Daten Im- und Export ===
=== Daten Im- und Export ===
Zeile 115: Zeile 115:


* '''Export:'''
* '''Export:'''
** <syntaxhighlight lang="powershell">... | Export-Csv -Path C:\data.csv -Delimiter ";" -Encoding UTF8</syntaxhighlight>
** <code>... | Export-Csv -Path C:\data.csv -Delimiter ";" -Encoding UTF8</code>
** <syntaxhighlight lang="powershell">... | Export-Clixml -Path C:\data.xml</syntaxhighlight> (PowerShell-spezifisches Format)
** <code>... | Export-Clixml -Path C:\data.xml</code> (PowerShell-spezifisches Format)
** <syntaxhighlight lang="powershell">... | ConvertTo-Json | Out-File -FilePath C:\data.json</syntaxhighlight>
** <code>... | ConvertTo-Json | Out-File -FilePath C:\data.json</code>


* '''Import:''' <syntaxhighlight lang="powershell">Import-Csv -Delimiter ";" -Path C:\data.csv</syntaxhighlight>
* '''Import:''' <code>Import-Csv -Delimiter ";" -Path C:\data.csv</code>


=== Arbeiten mit Objekten und der Pipeline (|) ===
=== Arbeiten mit Objekten und der Pipeline (|) ===
Zeile 125: Zeile 125:


* '''Pipeline-Beispiele:'''
* '''Pipeline-Beispiele:'''
** <syntaxhighlight lang="powershell">Get-PrintConfiguration -PrinterName "Drucker" | Select-Object -Property Printername, Duplexingmode</syntaxhighlight>
** <code>Get-PrintConfiguration -PrinterName "Drucker" | Select-Object -Property Printername, Duplexingmode</code>
** <syntaxhighlight lang="powershell">Get-PrintConfiguration -PrinterName "Drucker" | Select-Object -Property *</syntaxhighlight> (zeigt alle Eigenschaften)
** <code>Get-PrintConfiguration -PrinterName "Drucker" | Select-Object -Property *</code> (zeigt alle Eigenschaften)


* '''Objekteigenschaften auslesen:'''
* '''Objekteigenschaften auslesen:'''
** <syntaxhighlight lang="powershell">(Get-NetIPAddress -AddressFamily IPv4).IPAddress</syntaxhighlight>
** <code>(Get-NetIPAddress -AddressFamily IPv4).IPAddress</code>


=== Weitere nützliche Befehle ===
=== Weitere nützliche Befehle ===
* '''Webanfragen:'''
* '''Webanfragen:'''
** <syntaxhighlight lang="powershell">(Invoke-WebRequest -Uri www.google.de).Links.href</syntaxhighlight> Extrahiert alle Links von einer Webseite.
** <code>(Invoke-WebRequest -Uri www.google.de).Links.href</code> Extrahiert alle Links von einer Webseite.


* '''Eventlog:'''
* '''Eventlog:'''
** <syntaxhighlight lang="powershell">Get-EventLog -LogName Application -EntryType Error -After '2020-03-30'</syntaxhighlight>
** <code>Get-EventLog -LogName Application -EntryType Error -After '2020-03-30'</code>
** <syntaxhighlight lang="powershell">Get-WinEvent -FilterHashtable @{Logname="*Hyper*"; Providername="Microsoft"; ID=2008; Level=4}</syntaxhighlight>
** <code>Get-WinEvent -FilterHashtable @{Logname="*Hyper*"; Providername="Microsoft"; ID=2008; Level=4}</code>


* '''Umgebungsvariablen:'''
* '''Umgebungsvariablen:'''
** <syntaxhighlight lang="powershell">$env:COMPUTERNAME</syntaxhighlight>
** <code>$env:COMPUTERNAME</code>


* '''Pfade:'''
* '''Pfade:'''
** <syntaxhighlight lang="powershell">Test-Path C:\ -PathType Container</syntaxhighlight> (Prüft, ob ein Pfad existiert)
** <code>Test-Path C:\ -PathType Container</code> (Prüft, ob ein Pfad existiert)
** <syntaxhighlight lang="powershell">Split-Path -Path C:\Windows -Parent</syntaxhighlight> / <syntaxhighlight lang="powershell">-Leaf</syntaxhighlight>
** <code>Split-Path -Path C:\Windows -Parent</code> / <code>-Leaf</code>
** <syntaxhighlight lang="powershell">Join-Path -Path C:\Windows -ChildPath Ordner</syntaxhighlight>
** <code>Join-Path -Path C:\Windows -ChildPath Ordner</code>


* '''Virtuelle Festplatten:'''
* '''Virtuelle Festplatten:'''
** <syntaxhighlight lang="powershell">New-VHD -Path D:\test.vhdx -SizeBytes 50GB -Dynamic</syntaxhighlight>
** <code>New-VHD -Path D:\test.vhdx -SizeBytes 50GB -Dynamic</code>
** <syntaxhighlight lang="powershell">Mount-VHD -Path D:\test.vhdx</syntaxhighlight>
** <code>Mount-VHD -Path D:\test.vhdx</code>


== Datenimport und -export ==
== Datenimport und -export ==

Version vom 3. September 2025, 11:13 Uhr

PowerShell ist ein plattformübergreifendes Framework von Microsoft, zur Automatisierung, Konfiguration und Verwaltung von Systemen, das einen Kommandozeileninterpreter inklusive Skriptsprache bietet. Es ersetzt unter Windows die klassische Kommandzeile (cmd) und ist seit Windows 7 sowie Windows Server 2008 R2 verfügbar. PowerShell ist eine Shell (Hülle), also eine Software mittels derer ein Benutzer mit dem Betriebssystem (Kern) interagiert.

Funktionen

PowerShell bietet insbesondere Cmdlets (Commandlets). Dies sind einfache PowerShell-Befehle. Neue Cmdlets lassen sich mit Modulen nachinstallieren. Zusätzlich bietet PowerShell Alias, welches Befehle sind, die auf Cmdlets verweisen und Funktionen, welche PowerShell-Skripte sind.

Variablen

Variablen werden mit $ gekennzeichnet.

Beispiel:

$MeinName = "Hans"

Eingabe von $MeinName in die Konsole liefert Hans. "Mein Name ist $MeinName" liefert Mein Name ist Hans und 'Mein Name ist $MeinName' liefert Mein Name ist $MeinName.

Pipelineoperator

Befehle können über den Pipelineoperator | verbunden werden. Jeder Pipelineoperator sendet die Ergebnisse des vorherigen Befehls an den nächsten Befehl.

Beispiel:

Get-Process notepad | Stop-Process

Der erste Befehl verwendet das Get-Process-Cmdlet, um ein Objekt abzurufen, das den Editorprozess darstellt. Es verwendet einen Pipelineoperator (|), um das Prozessobjekt an das Stop-Process-Cmdlet zu senden, das den Editorprozess beendet.

Kontrollstrukturen

PowerShell bietet Methoden zum Erstellen von Schleifen, zum Treffen von Entscheidungen und zur logischen Steuerung des Codeflusses. Beispielsweise können switch-case, if-else oder for-Schleifen verwendet werden.

Entwicklungsumgebung

Microsoft bietet Windows PowerShell ISE (Integrated Scripting Environment) als Entwicklungsumgebung an. Im unteren Bereich ist die PowerShell-Konsole, die sich auch separat unter Windows öffnen lässt. Hier können Cmdlets oder Alias direkt eingegeben und ausgeführt werden. Der obere Teil bietet einen Texteditor mit dem Skripte geschrieben und als .ps1-Datei abgespeichert werden können.

Das komplette Skript kann mit dem grünen Pfeil (F5) ausgeführt werden.

Teile des Skriptes können markiert und mit F8 ausgeführt werden.

Auf der rechten Seite ist eine Auflistung aller verfügbaren Befehle mit integrierter Hilfe.

Die verfügbaren Befehle lassen sich auch durch die Eingabe von get-command in der Kommandozeile aufrufen.

Die Eingabe von cls löscht die Inhalte der Konsole.

Skripte ausführen

Abgespeicherte .ps1-Skripte lassen sich mittels Rechtsklick und "Mit PowerShell ausführen" aufrufen. Alternativ kann über die Kommandozeile mit dem Befehl chdir Pfad (z. B. chdir H:) in das Verzeichnis navigiert werden, in dem das Skript abgelegt wurde und it durch Eingabe von .\Skriptname.ps1 ausgeführt werden.

Befehle finden

Befehle können über die integrierte Hilfe in Windows PowerShell ISE oder mit Hilfe der Eingabe von get-command in die Kommandozeile gefunden werden. Durch Eingabe von get-command -Name print in die Kommandozeile werden alle Befehle aufgerufen, die im Namen "print" enthalten. -Name ist dabei ein Positionsparameter und print ist das dazugehörige Argument.

Hilfreiche Cmdlets

Grundlagen und Hilfesystem

  • STRG + Mausrad: Ändert die Schriftgröße in der Konsole.
  • Get-Help: Zeigt die Hilfeseite zu einem Cmdlet an (z.B. Get-Help Get-Process).
  • Update-Help: Lädt die neuesten Hilfedateien herunter.
  • Get-Command: Listet alle verfügbaren Befehle auf.
    • Get-Command -Name *-service*: Findet Cmdlets, die "-service" im Namen enthalten.

Kompatibilität mit Cmd & Linux

Die meisten klassischen Kommandozeilen-Befehle (Cmd/Bash) funktionieren in PowerShell durch integrierte Aliase oder Funktionen.

  • Typische Aliase:
    • dir → Get-ChildItem
    • ls → Get-ChildItem
    • ipconfig /all → Wird direkt ausgeführt
    • mkdir → New-Item
    • rd → Remove-Item
    • man → Get-Help
    • cls → Clear-Host
  • Alias abfragen: Get-Alias ls zeigt, welches Cmdlet sich hinter ls verbirgt.

Einfache Cmdlets für den Einstieg

Viele Cmdlets liefern mit der Eingabe des bloßen Befehls bereits nützliche Informationen.

  • Prozesse:
    • Get-Process: Zeigt alle laufenden Prozesse an (wie tasklist.exe).
    • Get-Process -Name notepad: Zeigt alle Notepad-Prozesse.
    • Stop-Process -Name notepad: Beendet alle Notepad-Prozesse.
    • Prozess starten: .\notepad.exe (relativer Pfad)
  • Systeminformationen:
    • $PSVersionTable: Zeigt die PowerShell-Version an.
    • Get-Service: Listet alle Dienste und ihren Status auf.
    • Get-HotFix: Zeigt installierte Updates.
    • Get-WindowsDriver -Online -All: Listet alle Windows-Treiber auf.
  • Drucker:
    • Get-Printer: Zeigt konfigurierte Drucker an.
    • Get-PrintConfiguration -PrinterName "Druckername": Zeigt Konfiguration eines bestimmten Druckers.

Arbeiten mit Parametern

Parameter werden mit -Parametername übergeben. Es gibt zwei Typen:

  • Parameter mit Argument: -Name "wuauserv"
  • Switch-Parameter (ein/aus): -Online, -All

Beispiele: Systemkonfiguration

  • Dienste konfigurieren:
    • Set-Service -Name wuauserv -StartupType Disabled
    • Stop-Service -Name wuauserv
  • Netzwerk:
    • Get-NetIPInterface: Listet Netzwerkschnittstellen auf.
    • Get-NetIPAddress -AddressFamily IPv4 -PrefixOrigin Dhcp: Zeigt IPv4-Adressen, die von DHCP bezogen wurden.
    • Test-NetConnection -ComputerName 'Nwfs': Ähnlich wie ping, aber leistungsstärker.
    • Set-NetFirewallProfile -All -Enabled true: Aktiviert die Firewall für alle Profile.
  • Apps verwalten (Windows 10/11):
    • Get-AppxPackage -Name *help* | Remove-AppxPackage: Entfernt Apps mit "help" im Namen für den aktuellen Benutzer.
    • Get-AppxPackage | Out-GridView -PassThru: Zeigt Apps in einer grafischen Tabelle zur Auswahl.

Daten Im- und Export

PowerShell kann Daten in verschiedenen Formaten exportieren und importieren.

  • Export:
    • ... | Export-Csv -Path C:\data.csv -Delimiter ";" -Encoding UTF8
    • ... | Export-Clixml -Path C:\data.xml (PowerShell-spezifisches Format)
    • ... | ConvertTo-Json | Out-File -FilePath C:\data.json
  • Import: Import-Csv -Delimiter ";" -Path C:\data.csv

Arbeiten mit Objekten und der Pipeline (|)

Die Stärke von PowerShell ist die Weitergabe von Objekten (nicht nur Text) zwischen Cmdlets.

  • Pipeline-Beispiele:
    • Get-PrintConfiguration -PrinterName "Drucker" | Select-Object -Property Printername, Duplexingmode
    • Get-PrintConfiguration -PrinterName "Drucker" | Select-Object -Property * (zeigt alle Eigenschaften)
  • Objekteigenschaften auslesen:
    • (Get-NetIPAddress -AddressFamily IPv4).IPAddress

Weitere nützliche Befehle

  • Webanfragen:
    • (Invoke-WebRequest -Uri www.google.de).Links.href Extrahiert alle Links von einer Webseite.
  • Eventlog:
    • Get-EventLog -LogName Application -EntryType Error -After '2020-03-30'
    • Get-WinEvent -FilterHashtable @{Logname="*Hyper*"; Providername="Microsoft"; ID=2008; Level=4}
  • Umgebungsvariablen:
    • $env:COMPUTERNAME
  • Pfade:
    • Test-Path C:\ -PathType Container (Prüft, ob ein Pfad existiert)
    • Split-Path -Path C:\Windows -Parent / -Leaf
    • Join-Path -Path C:\Windows -ChildPath Ordner
  • Virtuelle Festplatten:
    • New-VHD -Path D:\test.vhdx -SizeBytes 50GB -Dynamic
    • Mount-VHD -Path D:\test.vhdx

Datenimport und -export

PowerShell unterstützt verschiedene Datenformaten für Import und Export:

 Get-AppxPackage | Export-Csv -Path C:\apps.csv -Delimiter ";" -Encoding UTF8 Import-Csv -Delimiter ";" -Path C:\apps.csv Export-Clixml -Path C:\apps.xml # PowerShell-spezifisches Format ConvertTo-Json | Out-File -FilePath C:\apps.json

Dokumentation

Eine Dokumentation ist über Microsofts Webseite einsehbar.

Weblinks

Vorlage:Offizielle Website – Offizielle Dokumentation

PowerShell auf GitHub

Einzelnachweise

<references />