PowerShell Cheatsheet¶
Überblick¶
PowerShell ist eine plattformübergreifende Aufgabenautomatisierungslösung, die aus einer Kommandozeilenhülle, einer Skriptsprache und einem Konfigurationsmanagement-Rahmen besteht.
Grundlegende Befehle¶
Hilfe bekommen¶
```powershell
Get help for a command¶
Get-Help Get-Process Get-Help Get-Process -Examples Get-Help Get-Process -Full
Update help files¶
Update-Help
Get command syntax¶
Get-Command Get-Process -Syntax ```_
Navigation¶
```powershell
Current location¶
Get-Location pwd
Change directory¶
Set-Location C:\Windows cd C:\Windows
List directory contents¶
Get-ChildItem ls dir
Go back to previous directory¶
cd .. ```_
Dateioperationen¶
```powershell
Create new file¶
New-Item -ItemType File -Name "test.txt" ni test.txt -ItemType File
Create new directory¶
New-Item -ItemType Directory -Name "TestFolder" mkdir TestFolder
Copy files¶
Copy-Item source.txt destination.txt cp source.txt destination.txt
Move files¶
Move-Item oldname.txt newname.txt mv oldname.txt newname.txt
Remove files¶
Remove-Item test.txt rm test.txt
Get file content¶
Get-Content file.txt cat file.txt
Set file content¶
Set-Content -Path file.txt -Value "Hello World" "Hello World"|Out-File file.txt ```_
Variablen und Datentypen¶
Variablen¶
```powershell
Declare variables¶
$name = "John" $age = 30 $isActive = $true
Array¶
$colors = @("red", "green", "blue") $numbers = 1,2,3,4,5
Hash table¶
$person = @\\{ Name = "John" Age = 30 City = "New York" \\}
Access hash table values¶
$person.Name $person["Age"] ```_
Datentypen¶
```powershell
String¶
$text = "Hello World" $multiline = @" This is a multi-line string "@
Numbers¶
$integer = 42 $decimal = 3.14
Boolean¶
$isTrue = $true $isFalse = $false
Date¶
$today = Get-Date $specificDate = [DateTime]"2023-12-25" ```_
Kontrollstrukturen¶
Bedingte Aussagen¶
```powershell
If statement¶
if (\(age -gt 18) \\\\{ Write-Host "Adult" \\\\} elseif (\)age -eq 18) \\{ Write-Host "Just turned adult" \\} else \\{ Write-Host "Minor" \\}
Switch statement¶
switch ($day) \\{ "Monday" \\{ "Start of work week" \\} "Friday" \\{ "TGIF!" \\} "Saturday" \\{ "Weekend!" \\} "Sunday" \\{ "Weekend!" \\} default \\{ "Regular day" \\} \\} ```_
Loops¶
```powershell
For loop¶
for ($i = 1; $i -le 10; $i++) \\{ Write-Host $i \\}
ForEach loop¶
\(colors = @("red", "green", "blue") foreach (\)color in $colors) \\{ Write-Host $color \\}
While loop¶
\(i = 1 while (\)i -le 5) \\{ Write-Host $i $i++ \\}
Do-While loop¶
do \\{ \(input = Read-Host "Enter 'quit' to exit" \\\\} while (\)input -ne "quit") ```_
Funktionen¶
Grundlegende Funktionen¶
```powershell
Simple function¶
function Say-Hello \\{ Write-Host "Hello World!" \\}
Function with parameters¶
function Say-HelloTo \\{ param( [string]$Name ) Write-Host "Hello, $Name!" \\}
Function with return value¶
function Add-Numbers \\{ param( [int]\(a, [int]\)b ) return $a + $b \\}
Call functions¶
Say-Hello Say-HelloTo -Name "John" $result = Add-Numbers -a 5 -b 3 ```_
Erweiterte Funktionen¶
```powershell function Get-SystemInfo \\{ [CmdletBinding()] param( [Parameter(Mandatory=\(true)] [string]\)ComputerName,
[Parameter()]
[switch]$IncludeServices
)
$info = Get-ComputerInfo -ComputerName $ComputerName
if ($IncludeServices) \\\\{
$services = Get-Service -ComputerName $ComputerName
$info|Add-Member -NotePropertyName Services -NotePropertyValue $services
\\\\}
return $info
\\} ```_
Pipeline und Objekte¶
Pipeline Basics¶
```powershell
Basic pipeline¶
Get-Process|Where-Object \\{$_.CPU -gt 100\\}|Sort-Object CPU -Descending
Select specific properties¶
Get-Process|Select-Object Name, CPU, WorkingSet
Format output¶
Get-Process|Format-Table Name, CPU, WorkingSet Get-Process|Format-List Name, CPU, WorkingSet ```_
Objektbearbeitung¶
```powershell
Create custom objects¶
$person = [PSCustomObject]@\\{ Name = "John" Age = 30 City = "New York" \\}
Add properties¶
$person|Add-Member -NotePropertyName Email -NotePropertyValue "john@email.com"
Filter objects¶
Get-Process|Where-Object \\{$_.ProcessName -like "chrome*"\\}
Group objects¶
Get-Process|Group-Object ProcessName
Measure objects¶
Get-Process|Measure-Object WorkingSet -Sum -Average -Maximum ```_
Datei- und Textverarbeitung¶
Dateioperationen¶
```powershell
Read file line by line¶
Get-Content file.txt|ForEach-Object \\{ Write-Host "Line: $_" \\}
Search in files¶
Select-String -Path "*.txt" -Pattern "error"
Replace text in files¶
(Get-Content file.txt) -replace "old", "new"|Set-Content file.txt
Get file information¶
Get-ItemProperty file.txt Get-ChildItem *.txt|Select-Object Name, Length, LastWriteTime ```_
Textverarbeitung¶
```powershell
String operations¶
$text = "Hello World" $text.ToUpper() $text.ToLower() $text.Replace("World", "PowerShell") $text.Split(" ") $text.Substring(0, 5)
Regular expressions¶
\(text = "Phone: 123-456-7890" if (\)text -match "\d\\{3\\}-\d\\{3\\}-\d\\{4\\}") \\{ Write-Host "Phone number found: \((\)matches[0])" \\} ```_
Systemverwaltung¶
Prozessmanagement¶
```powershell
Get processes¶
Get-Process Get-Process -Name "notepad" Get-Process|Where-Object \\{$_.CPU -gt 100\\}
Start process¶
Start-Process notepad Start-Process -FilePath "C:\Program Files\App\app.exe" -ArgumentList "/silent"
Stop process¶
Stop-Process -Name "notepad" Stop-Process -Id 1234 ```_
Service Management¶
```powershell
Get services¶
Get-Service Get-Service -Name "Spooler" Get-Service|Where-Object \\{$_.Status -eq "Running"\\}
Start/Stop services¶
Start-Service -Name "Spooler" Stop-Service -Name "Spooler" Restart-Service -Name "Spooler"
Set service startup type¶
Set-Service -Name "Spooler" -StartupType Automatic ```_
Register Operationen¶
```powershell
Navigate registry¶
Set-Location HKLM:\SOFTWARE
Get registry values¶
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"
Set registry values¶
Set-ItemProperty -Path "HKCU:\Software\MyApp" -Name "Setting" -Value "Value"
Create registry keys¶
New-Item -Path "HKCU:\Software\MyApp" ```_
Netzwerkaktivitäten¶
Netzwerkkommandos¶
```powershell
Test network connectivity¶
Test-Connection google.com Test-NetConnection google.com -Port 80
Get network configuration¶
Get-NetIPConfiguration Get-NetAdapter
DNS operations¶
Resolve-DnsName google.com Clear-DnsClientCache ```_
Web-Anfragen¶
```powershell
Simple web request¶
Invoke-WebRequest -Uri "https://api.github.com/users/octocat"
REST API calls¶
$response = Invoke-RestMethod -Uri "https://api.github.com/users/octocat" $response.name
Download files¶
Invoke-WebRequest -Uri "https://example.com/file.zip" -OutFile "file.zip" ```_
Fehlerbehebung¶
Test-Katch-Finally¶
powershell
try \\\\{
$result = 10 / 0
\\\\} catch [System.DivideByZeroException] \\\\{
Write-Host "Cannot divide by zero!"
\\\\} catch \\\\{
Write-Host "An error occurred: $($_.Exception.Message)"
\\\\} finally \\\\{
Write-Host "Cleanup code here"
\\\\}
_
Fehlervariablen¶
```powershell
Check last error¶
$Error[0]
Clear errors¶
$Error.Clear()
Error action preference¶
$ErrorActionPreference = "Stop" # Stop, Continue, SilentlyContinue ```_
Module und Snap-Ins¶
Modulmanagement¶
```powershell
List available modules¶
Get-Module -ListAvailable
Import module¶
Import-Module ActiveDirectory
Get module commands¶
Get-Command -Module ActiveDirectory
Install module from PowerShell Gallery¶
Install-Module -Name Az ```_
Module erstellen¶
```powershell
Create module file (MyModule.psm1)¶
function Get-Greeting \\{ param([string]$Name) return "Hello, $Name!" \\}
Export-ModuleMember -Function Get-Greeting
Import custom module¶
Import-Module .\MyModule.psm1 ```_
Best Practices Scripting¶
Schriftstruktur¶
```powershell
Requires -Version 5.1¶
Requires -Modules ActiveDirectory¶
<# .SYNOPSIS Brief description of script .DESCRIPTION Detailed description .PARAMETER Name Description of parameter .EXAMPLE Example usage
>¶
[CmdletBinding()] param( [Parameter(Mandatory=\(true)] [string]\)Name )
Script logic here¶
Write-Verbose "Processing $Name" ```_
Parametervalidierung¶
```powershell param( [Parameter(Mandatory=\(true)] [ValidateNotNullOrEmpty()] [string]\)Name,
[Parameter()]
[ValidateRange(1,100)]
[int]$Age,
[Parameter()]
[ValidateSet("Red","Green","Blue")]
[string]$Color
) ```_
Erweiterte Funktionen¶
Jobs¶
```powershell
Start background job¶
$job = Start-Job -ScriptBlock \\{ Get-Process \\}
Get job status¶
Get-Job
Receive job results¶
Receive-Job $job
Remove job¶
Remove-Job $job ```_
Entfernen¶
```powershell
Enable remoting¶
Enable-PSRemoting -Force
Create session¶
$session = New-PSSession -ComputerName "Server01"
Run commands remotely¶
Invoke-Command -Session $session -ScriptBlock \\{ Get-Process \\}
Enter interactive session¶
Enter-PSSession -Session $session
Close session¶
Remove-PSSession $session ```_
Desired State Configuration (DSC)¶
```powershell Configuration WebServer \\{ Node "WebServer01" \\{ WindowsFeature IIS \\{ Ensure = "Present" Name = "Web-Server" \\}
File WebContent \\\\{
Ensure = "Present"
DestinationPath = "C:\inetpub\wwwroot\index.html"
Contents = "<html><body>Hello World</body></html>"
\\\\}
\\\\}
\\}
Compile configuration¶
WebServer -OutputPath "C:\DSC"
Apply configuration¶
Start-DscConfiguration -Path "C:\DSC" -Wait -Verbose ```_
Gemeinsame Betreiber¶
Vergleich Betreiber¶
powershell
-eq # Equal
-ne # Not equal
-gt # Greater than
-ge # Greater than or equal
-lt # Less than
-le # Less than or equal
-like # Wildcard comparison
-match # Regular expression match
-contains # Collection contains value
-in # Value in collection
_
Logische Operatoren¶
powershell
-and # Logical AND
-or # Logical OR
-not # Logical NOT
! # Logical NOT (alternative)
_
Nützliche Cmdlets¶
Informationen sammeln¶
powershell
Get-ComputerInfo
Get-HotFix
Get-EventLog -LogName System -Newest 10
Get-WmiObject -Class Win32_OperatingSystem
Get-CimInstance -ClassName Win32_ComputerSystem
_
Leistungsüberwachung¶
powershell
Get-Counter "\Processor(_Total)\% Processor Time"
Get-Process|Sort-Object CPU -Descending|Select-Object -First 10
Measure-Command \\\\{ Get-Process \\\\}
_
Ressourcen¶
- **offizielle Dokumentation*: Microsoft PowerShell Docs
- **PowerShell Gallery*: [PowerShell Gallery](LINK_3
- Gemeinschaft: [PowerShell Community](LINK_3_