PowerShell: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
'''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: | |||
<syntaxhighlight lang="powershell"> | |||
$MeinName = "Hans" | |||
</syntaxhighlight> | |||
Eingabe von <code>$MeinName</code> in die Konsole liefert ''Hans''. <code>"Mein Name ist $MeinName"</code> liefert ''Mein Name ist Hans'' und <code>'Mein Name ist $MeinName'</code> liefert ''Mein Name ist $MeinName''. | |||
=== Pipelineoperator === | |||
Befehle können über den Pipelineoperator <code>|</code> verbunden werden. Jeder Pipelineoperator sendet die Ergebnisse des vorherigen Befehls an den nächsten Befehl. | |||
Beispiel: | |||
<syntaxhighlight lang="powershell"> | |||
Get-Process notepad | Stop-Process | |||
</syntaxhighlight> | |||
Der erste Befehl verwendet das <code>Get-Process</code>-Cmdlet, um ein Objekt abzurufen, das den Editorprozess darstellt. Es verwendet einen Pipelineoperator (<code>|</code>), um das Prozessobjekt an das <code>Stop-Process</code>-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 <code>.ps1</code>-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 <code>get-command</code> in der Kommandozeile aufrufen. | |||
Die Eingabe von <code>cls</code> löscht die Inhalte der Konsole. | |||
== Skripte ausführen == | |||
Abgespeicherte <code>.ps1</code>-Skripte lassen sich mittels Rechtsklick und "Mit PowerShell ausführen" aufrufen. Alternativ kann über die Kommandozeile mit dem Befehl <code>chdir Pfad</code> (z. B. <code>chdir H:</code>) in das Verzeichnis navigiert werden, in dem das Skript abgelegt wurde und it durch Eingabe von <code>.\Skriptname.ps1</code> ausgeführt werden. | |||
== Befehle finden == | |||
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 == | |||
=== Grundlagen und Hilfesystem === | |||
* '''STRG + Mausrad''': Ändert die Schriftgröße in der Konsole. | |||
* <code>Get-Help</code>: Zeigt die Hilfeseite zu einem Cmdlet an (z.B. <code>Get-Help Get-Process</code>). | |||
* <code>Update-Help</code>: Lädt die neuesten Hilfedateien herunter. | |||
* <code>Get-Command</code>: Listet alle verfügbaren Befehle auf. | |||
** <code>Get-Command -Name *-service*</code>: 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:''' | |||
** <code>dir</code> → Get-ChildItem | |||
** <code>ls</code> → Get-ChildItem | |||
** <code>ipconfig /all</code> → Wird direkt ausgeführt | |||
** <code>mkdir</code> → New-Item | |||
** <code>rd</code> → Remove-Item | |||
** <code>man</code> → Get-Help | |||
** <code>cls</code> → Clear-Host | |||
* '''Alias abfragen:''' <code>Get-Alias ls</code> zeigt, welches Cmdlet sich hinter <code>ls</code> verbirgt. | |||
=== Einfache Cmdlets für den Einstieg === | |||
Viele Cmdlets liefern mit der Eingabe des bloßen Befehls bereits nützliche Informationen. | |||
* '''Prozesse:''' | |||
** <code>Get-Process</code>: Zeigt alle laufenden Prozesse an (wie <code>tasklist.exe</code>). | |||
** <code>Get-Process -Name notepad</code>: Zeigt alle Notepad-Prozesse. | |||
** <code>Stop-Process -Name notepad</code>: Beendet alle Notepad-Prozesse. | |||
** Prozess starten: <code>.\notepad.exe</code> (relativer Pfad) | |||
* '''Systeminformationen:''' | |||
** <code>$PSVersionTable</code>: Zeigt die PowerShell-Version an. | |||
** <code>Get-Service</code>: Listet alle Dienste und ihren Status auf. | |||
** <code>Get-HotFix</code>: Zeigt installierte Updates. | |||
** <code>Get-WindowsDriver -Online -All</code>: Listet alle Windows-Treiber auf. | |||
* '''Drucker:''' | |||
** <code>Get-Printer</code>: Zeigt konfigurierte Drucker an. | |||
** <code>Get-PrintConfiguration -PrinterName "Druckername"</code>: Zeigt Konfiguration eines bestimmten Druckers. | |||
=== Arbeiten mit Parametern === | |||
Parameter werden mit <code>-Parametername</code> übergeben. Es gibt zwei Typen: | |||
* '''Parameter mit Argument:''' <code>-Name "wuauserv"</code> | |||
* '''Switch-Parameter (ein/aus):''' <code>-Online</code>, <code>-All</code> | |||
=== Beispiele: Systemkonfiguration === | |||
* '''Dienste konfigurieren:''' | |||
** <code>Set-Service -Name wuauserv -StartupType Disabled</code> | |||
** <code>Stop-Service -Name wuauserv</code> | |||
* '''Netzwerk:''' | |||
** <code>Get-NetIPInterface</code>: Listet Netzwerkschnittstellen auf. | |||
** <code>Get-NetIPAddress -AddressFamily IPv4 -PrefixOrigin Dhcp</code>: Zeigt IPv4-Adressen, die von DHCP bezogen wurden. | |||
** <code>Test-NetConnection -ComputerName 'Nwfs'</code>: Ähnlich wie <code>ping</code>, aber leistungsstärker. | |||
** <code>Set-NetFirewallProfile -All -Enabled true</code>: Aktiviert die Firewall für alle Profile. | |||
* '''Apps verwalten (Windows 10/11):''' | |||
** <code>Get-AppxPackage -Name *help* | Remove-AppxPackage</code>: Entfernt Apps mit "help" im Namen für den aktuellen Benutzer. | |||
** <code>Get-AppxPackage | Out-GridView -PassThru</code>: Zeigt Apps in einer grafischen Tabelle zur Auswahl. | |||
=== Daten Im- und Export === | |||
PowerShell kann Daten in verschiedenen Formaten exportieren und importieren. | |||
* '''Export:''' | |||
** <code>... | Export-Csv -Path C:\data.csv -Delimiter ";" -Encoding UTF8</code> | |||
** <code>... | Export-Clixml -Path C:\data.xml</code> (PowerShell-spezifisches Format) | |||
** <code>... | ConvertTo-Json | Out-File -FilePath C:\data.json</code> | |||
* '''Import:''' <code>Import-Csv -Delimiter ";" -Path C:\data.csv</code> | |||
=== Arbeiten mit Objekten und der Pipeline (|) === | |||
Die Stärke von PowerShell ist die Weitergabe von Objekten (nicht nur Text) zwischen Cmdlets. | |||
* '''Pipeline-Beispiele:''' | |||
** <code>Get-PrintConfiguration -PrinterName "Drucker" | Select-Object -Property Printername, Duplexingmode</code> | |||
** <code>Get-PrintConfiguration -PrinterName "Drucker" | Select-Object -Property *</code> (zeigt alle Eigenschaften) | |||
* '''Objekteigenschaften auslesen:''' | |||
** <code>(Get-NetIPAddress -AddressFamily IPv4).IPAddress</code> | |||
=== Weitere nützliche Befehle === | |||
* '''Webanfragen:''' | |||
** <code>(Invoke-WebRequest -Uri www.google.de).Links.href</code> Extrahiert alle Links von einer Webseite. | |||
* '''Eventlog:''' | |||
** <code>Get-EventLog -LogName Application -EntryType Error -After '2020-03-30'</code> | |||
** <code>Get-WinEvent -FilterHashtable @{Logname="*Hyper*"; Providername="Microsoft"; ID=2008; Level=4}</code> | |||
* '''Umgebungsvariablen:''' | |||
** <code>$env:COMPUTERNAME</code> | |||
* '''Pfade:''' | |||
** <code>Test-Path C:\ -PathType Container</code> (Prüft, ob ein Pfad existiert) | |||
** <code>Split-Path -Path C:\Windows -Parent</code> / <code>-Leaf</code> | |||
** <code>Join-Path -Path C:\Windows -ChildPath Ordner</code> | |||
* '''Virtuelle Festplatten:''' | |||
** <code>New-VHD -Path D:\test.vhdx -SizeBytes 50GB -Dynamic</code> | |||
** <code>Mount-VHD -Path D:\test.vhdx</code> | |||
[[Kategorie:Skriptsprache]] | [[Kategorie:Skriptsprache]] | ||
[[Kategorie:FI_I_SDM]] | [[Kategorie:FI_I_SDM]] |
Version vom 3. September 2025, 11:31 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-ChildItemls
→ Get-ChildItemipconfig /all
→ Wird direkt ausgeführtmkdir
→ New-Itemrd
→ Remove-Itemman
→ Get-Helpcls
→ Clear-Host
- Alias abfragen:
Get-Alias ls
zeigt, welches Cmdlet sich hinterls
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 (wietasklist.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 wieping
, 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