PowerShell: Unterschied zwischen den Versionen

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 ==