PowerShell: Unterschied zwischen den Versionen

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


== Hilfreiche Cmdlets und Befehle ==
== Hilfreiche Cmdlets ==


{| class="wikitable"
=== Grundlagen und Hilfesystem ===
|-
* '''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>).
* <syntaxhighlight lang="powershell">Update-Help</syntaxhighlight>: Lädt die neuesten Hilfedateien herunter.
* <syntaxhighlight lang="powershell">Get-Command</syntaxhighlight>: Listet alle verfügbaren Befehle auf.
** <syntaxhighlight lang="powershell">Get-Command -Name *-service*</syntaxhighlight>: Findet Cmdlets, die "-service" im Namen enthalten.


! Befehl !! Beschreibung
=== Kompatibilität mit Cmd & Linux ===
<code>$PSVersionTable</code> Zeigt die PowerShell-Version an
Die meisten klassischen Kommandozeilen-Befehle (Cmd/Bash) funktionieren in PowerShell durch integrierte '''Aliase''' oder '''Funktionen'''.
-
<code>get-command -Name -service</code> Listet alle Kommandos die "-service" enthalten
-
<code>Dir C:\Windows</code> Zeigt Verzeichnisinhalt an
-
<code>mkdir c:\Temp</code> Erstellt ein Verzeichnis
-
<code>rd c:\Temp</code> Entfernt ein Verzeichnis
-
<code>Get-Process</code> Zeigt laufende Prozesse an (äquivalent zu tasklist.exe)
-
<code>Get-Service</code> Zeigt alle installierten Dienste und ihren Status an
-
<code>Get-HotFix</code> Zeigt installierte Updates an
-
<code>Get-Printer</code> Zeigt Drucker an
-
<code>Get-NetIPAddress</code> Zeigt IP-Adressen an
-
<code>Get-AppxPackage</code> Zeigt installierte App-Pakete an
-
<code>Invoke-WebRequest</code> Führt Webrequests aus
-
<code>Get-EventLog</code> Zeigt Ereignisprotokolle an
-
<code>cls</code> Löscht Bildschirminhalte
}
=== Kompatibilität ===
Die meisten Kommandozeilen-Befehle lassen sich auch direkt in der PowerShell ausführen. Dafür sind meist '''Aliase''' (Verweise auf die entsprechenden PowerShell-Befehle) oder Funktionen implementiert, die die Kompatibilität herstellen.


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


<code>ls</code> verweist auf <code>Get-ChildItem</code>
=== Einfache Cmdlets für den Einstieg ===
Viele Cmdlets liefern mit der Eingabe des bloßen Befehls bereits nützliche Informationen.


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


<code>ipconfig /all</code> funktioniert wie in der klassischen cmd
* '''Systeminformationen:'''
** <syntaxhighlight lang="powershell">$PSVersionTable</syntaxhighlight>: Zeigt die PowerShell-Version an.
** <syntaxhighlight lang="powershell">Get-Service</syntaxhighlight>: Listet alle Dienste und ihren Status auf.
** <syntaxhighlight lang="powershell">Get-HotFix</syntaxhighlight>: Zeigt installierte Updates.
** <syntaxhighlight lang="powershell">Get-WindowsDriver -Online -All</syntaxhighlight>: Listet alle Windows-Treiber auf.
 
* '''Drucker:'''
** <syntaxhighlight lang="powershell">Get-Printer</syntaxhighlight>: Zeigt konfigurierte Drucker an.
** <syntaxhighlight lang="powershell">Get-PrintConfiguration -PrinterName "Druckername"</syntaxhighlight>: Zeigt Konfiguration eines bestimmten Druckers.
 
=== Arbeiten mit Parametern ===
Parameter werden mit <syntaxhighlight lang="powershell">-Parametername</syntaxhighlight> übergeben. Es gibt zwei Typen:
* '''Parameter mit Argument:''' <syntaxhighlight lang="powershell">-Name "wuauserv"</syntaxhighlight>
* '''Switch-Parameter (ein/aus):''' <syntaxhighlight lang="powershell">-Online</syntaxhighlight>, <syntaxhighlight lang="powershell">-All</syntaxhighlight>
 
=== Beispiele: Systemkonfiguration ===
* '''Dienste konfigurieren:'''
** <syntaxhighlight lang="powershell">Set-Service -Name wuauserv -StartupType Disabled</syntaxhighlight>
** <syntaxhighlight lang="powershell">Stop-Service -Name wuauserv</syntaxhighlight>
 
* '''Netzwerk:'''
** <syntaxhighlight lang="powershell">Get-NetIPInterface</syntaxhighlight>: Listet Netzwerkschnittstellen auf.
** <syntaxhighlight lang="powershell">Get-NetIPAddress -AddressFamily IPv4 -PrefixOrigin Dhcp</syntaxhighlight>: 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.
** <syntaxhighlight lang="powershell">Set-NetFirewallProfile -All -Enabled true</syntaxhighlight>: Aktiviert die Firewall für alle Profile.
 
* '''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.
** <syntaxhighlight lang="powershell">Get-AppxPackage | Out-GridView -PassThru</syntaxhighlight>: Zeigt Apps in einer grafischen Tabelle zur Auswahl.
 
=== Daten Im- und Export ===
PowerShell kann Daten in verschiedenen Formaten exportieren und importieren.
 
* '''Export:'''
** <syntaxhighlight lang="powershell">... | Export-Csv -Path C:\data.csv -Delimiter ";" -Encoding UTF8</syntaxhighlight>
** <syntaxhighlight lang="powershell">... | Export-Clixml -Path C:\data.xml</syntaxhighlight> (PowerShell-spezifisches Format)
** <syntaxhighlight lang="powershell">... | ConvertTo-Json | Out-File -FilePath C:\data.json</syntaxhighlight>
 
* '''Import:''' <syntaxhighlight lang="powershell">Import-Csv -Delimiter ";" -Path C:\data.csv</syntaxhighlight>
 
=== Arbeiten mit Objekten und der Pipeline (|) ===
Die Stärke von PowerShell ist die Weitergabe von Objekten (nicht nur Text) zwischen Cmdlets.
 
* '''Pipeline-Beispiele:'''
** <syntaxhighlight lang="powershell">Get-PrintConfiguration -PrinterName "Drucker" | Select-Object -Property Printername, Duplexingmode</syntaxhighlight>
** <syntaxhighlight lang="powershell">Get-PrintConfiguration -PrinterName "Drucker" | Select-Object -Property *</syntaxhighlight> (zeigt alle Eigenschaften)
 
* '''Objekteigenschaften auslesen:'''
** <syntaxhighlight lang="powershell">(Get-NetIPAddress -AddressFamily IPv4).IPAddress</syntaxhighlight>
 
=== Weitere nützliche Befehle ===
* '''Webanfragen:'''
** <syntaxhighlight lang="powershell">(Invoke-WebRequest -Uri www.google.de).Links.href</syntaxhighlight> Extrahiert alle Links von einer Webseite.
 
* '''Eventlog:'''
** <syntaxhighlight lang="powershell">Get-EventLog -LogName Application -EntryType Error -After '2020-03-30'</syntaxhighlight>
** <syntaxhighlight lang="powershell">Get-WinEvent -FilterHashtable @{Logname="*Hyper*"; Providername="Microsoft"; ID=2008; Level=4}</syntaxhighlight>
 
* '''Umgebungsvariablen:'''
** <syntaxhighlight lang="powershell">$env:COMPUTERNAME</syntaxhighlight>
 
* '''Pfade:'''
** <syntaxhighlight lang="powershell">Test-Path C:\ -PathType Container</syntaxhighlight> (Prüft, ob ein Pfad existiert)
** <syntaxhighlight lang="powershell">Split-Path -Path C:\Windows -Parent</syntaxhighlight> / <syntaxhighlight lang="powershell">-Leaf</syntaxhighlight>
** <syntaxhighlight lang="powershell">Join-Path -Path C:\Windows -ChildPath Ordner</syntaxhighlight>
 
* '''Virtuelle Festplatten:'''
** <syntaxhighlight lang="powershell">New-VHD -Path D:\test.vhdx -SizeBytes 50GB -Dynamic</syntaxhighlight>
** <syntaxhighlight lang="powershell">Mount-VHD -Path D:\test.vhdx</syntaxhighlight>


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