PowerShell: Unterschied zwischen den Versionen

Die Seite wurde geleert.
Markierung: Geleert
Keine Bearbeitungszusammenfassung
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''PowerShell''' ist ein plattformübergreifendes Framework von Microsoft zur Automatisierung, Konfiguration und Verwaltung von Systemen. Es bietet einen [[Interpreter|Kommandozeileninterpreter]] inklusive [[Skriptsprache]]. Unter Windows ersetzt es 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, mit der Benutzer mit dem Betriebssystem (Kern) interagieren.


== Funktionen ==
PowerShell bietet insbesondere '''Cmdlets''' (Commandlets). Dies sind einfache PowerShell-Befehle. Neue Cmdlets lassen sich mit Modulen nachinstallieren. Zusätzlich bietet PowerShell '''Alias''' (Kurzbefehle) und '''Funktionen''' (PowerShell-Skripte).
=== Variablen ===
Variablen werden mit <code>$</code> 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'', 
<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 Cmdlet <code>Get-Process</code>, um ein Objekt des Prozesses abzurufen. Über den Pipelineoperator <code>|</code> wird dieses Objekt an <code>Stop-Process</code> übergeben, das den Prozess beendet.
=== Kontrollstrukturen ===
PowerShell bietet Schleifen, Bedingungen und logische Steuerungen wie:
* <code>if-else</code>
* <code>switch</code>
* <code>for</code>
== Entwicklungsumgebung ==
Microsoft stellt die '''Windows PowerShell ISE''' (Integrated Scripting Environment) bereit. 
Unten befindet sich die Konsole, oben ein Editor zum Schreiben und Speichern von Skripten als <code>.ps1</code>-Dateien. 
* Ausführen des kompletten Skripts: <kbd>F5</kbd> 
* Ausführen markierter Teile: <kbd>F8</kbd> 
* Verfügbare Befehle anzeigen: <code>get-command</code> 
* Konsole leeren: <code>cls</code>
== Skripte ausführen ==
Gespeicherte <code>.ps1</code>-Skripte lassen sich über Rechtsklick → "Mit PowerShell ausführen" starten. 
Alternativ:
<syntaxhighlight lang="powershell">
chdir H:
.\Skriptname.ps1
</syntaxhighlight>
== Befehle finden ==
Über die integrierte Hilfe oder:
<syntaxhighlight lang="powershell">
get-command
get-command -Name print
</syntaxhighlight>
== Hilfreiche Cmdlets ==
=== Grundlagen und Hilfesystem ===
* '''STRG + Mausrad''': Schriftgröße ändern
* <code>Get-Help</code> – Hilfe anzeigen
* <code>Update-Help</code> – Hilfedateien aktualisieren
* <code>Get-Command</code> – Alle Befehle auflisten
=== Kompatibilität mit Cmd & Linux ===
Viele klassische Befehle funktionieren durch Aliase:
* <code>dir</code> → Get-ChildItem
* <code>ls</code> → Get-ChildItem
* <code>ipconfig /all</code> → Direkt ausgeführt
* <code>mkdir</code> → New-Item
* <code>rd</code> → Remove-Item
* <code>man</code> → Get-Help
* <code>cls</code> → Clear-Host
Alias prüfen:
<syntaxhighlight lang="powershell">
Get-Alias ls
</syntaxhighlight>
=== Einfache Cmdlets ===
* Prozesse:
<syntaxhighlight lang="powershell">
Get-Process
Get-Process -Name notepad
Stop-Process -Name notepad
.\notepad.exe
</syntaxhighlight>
* Systeminformationen:
<syntaxhighlight lang="powershell">
$PSVersionTable
Get-Service
Get-HotFix
Get-WindowsDriver -Online -All
</syntaxhighlight>
* Drucker:
<syntaxhighlight lang="powershell">
Get-Printer
Get-PrintConfiguration -PrinterName "Druckername"
</syntaxhighlight>
=== Parameter ===
* Parameter mit Argument:
<syntaxhighlight lang="powershell">
-Name "wuauserv"
</syntaxhighlight>
* Switch-Parameter:
<syntaxhighlight lang="powershell">
-Online
-All
</syntaxhighlight>
=== Systemkonfiguration ===
* Dienste:
<syntaxhighlight lang="powershell">
Set-Service -Name wuauserv -StartupType Disabled
Stop-Service -Name wuauserv
</syntaxhighlight>
* Netzwerk:
<syntaxhighlight lang="powershell">
Get-NetIPInterface
Get-NetIPAddress -AddressFamily IPv4 -PrefixOrigin Dhcp
Test-NetConnection -ComputerName 'Nwfs'
Set-NetFirewallProfile -All -Enabled true
</syntaxhighlight>
* Apps verwalten:
<syntaxhighlight lang="powershell">
Get-AppxPackage -Name *help* | Remove-AppxPackage
Get-AppxPackage | Out-GridView -PassThru
</syntaxhighlight>
=== Daten Im- und Export ===
Export:
<syntaxhighlight lang="powershell">
... | Export-Csv -Path C:\data.csv -Delimiter ";" -Encoding UTF8
... | Export-Clixml -Path C:\data.xml
... | 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 ===
<syntaxhighlight lang="powershell">
Get-PrintConfiguration -PrinterName "Drucker" | Select-Object -Property Printername, Duplexingmode
Get-PrintConfiguration -PrinterName "Drucker" | Select-Object -Property *
(Get-NetIPAddress -AddressFamily IPv4).IPAddress
</syntaxhighlight>
=== Weitere Befehle ===
* Webanfragen:
<syntaxhighlight lang="powershell">
(Invoke-WebRequest -Uri www.google.de).Links.href
</syntaxhighlight>
* Eventlog:
<syntaxhighlight lang="powershell">
Get-EventLog -LogName Application -EntryType Error -After '2020-03-30'
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
Split-Path -Path C:\Windows -Parent
Join-Path -Path C:\Windows -ChildPath Ordner
</syntaxhighlight>
* Virtuelle Festplatten:
<syntaxhighlight lang="powershell">
New-VHD -Path D:\test.vhdx -SizeBytes 50GB -Dynamic
Mount-VHD -Path D:\test.vhdx
</syntaxhighlight>
[[Kategorie:Programmierung]]
[[Kategorie:FI_I_SDM]]