PowerShell
PowerShell Windows PowerShell topic - Beschreibung
Beschreibung
Installation
Aufruf
Optionen
Unix | GNU | Parameter | Beschreibung |
---|---|---|---|
Parameter
Umgebungsvariablen
Exit-Status
Wert | Beschreibung |
---|---|
0 | Erfolg |
>0 | Fehler |
Anwendung
Problembehebung
Konfiguration
Dateien
Datei | Beschreibung |
---|---|
Anhang
Siehe auch
Dokumentation
- Man-Page
- Info-Pages
Links
Projekt
Weblinks
TMP
| Beschreibung = Screenshot der powershell.exe 5.0 innerhalb conhost.exe
unter Windows 8.1
| Hersteller = Microsoft
| AktuelleVersion =
| AktuelleVersionFreigabeDatum =
| AktuelleVorabVersion =
| AktuelleVorabVersionFreigabeDatum =
| Betriebssystem = Microsoft Windows, ab Version 6 auch Linux und macOS
| Kategorie = Kommandozeileninterpreter
| Lizenz = Proprietär, MIT-Lizenz[1]
| Deutsch = ja
| Website = PowerShell
PowerShell (auch Windows PowerShell und PowerShell Core) ist ein plattformübergreifendes Framework von Microsoft zur Automatisierung, Konfiguration und Verwaltung von Systemen, das einen Kommandozeileninterpreter inklusive Skriptsprache bietet.[2]
Windows PowerShell basiert auf der Common Language Runtime (CLR) des .NET Frameworks und wird mit Windows als Teil des Windows Management Frameworks (WMF) unter einer proprietären Lizenz ausgeliefert.[3][4] Seit 2016 gibt es Windows PowerShell auch als Core Edition, welche wie PowerShell Core auf .NET Core basiert und als Teil von Windows Nano Server und Windows IoT ausgeliefert wird.[5]
Seit Version 6 basiert PowerShell auf der Core Common Language Runtime (CoreCLR) und ist als plattformübergreifendes Open-Source-Projekt[6] unter der MIT-Lizenz[1] für Linux, macOS und Windows verfügbar.[3]
Aufbau
PowerShell wurde speziell für die Systemverwaltung und -automatisierung entworfen.[7]
Sie verbindet die aus Unix-Shells bekannte Philosophie von Pipes und Filtern mit dem Paradigma der objektorientierten Programmierung. Der Benutzer kann wie bisher einfache Befehle an einer Kommandozeile ausführen und miteinander verknüpfen oder aber auch komplexe Skript-Programme mit der eigens dafür entwickelten PowerShell Scripting Language schreiben.
Die PowerShell erlaubt Zugriff auf WMI-Klassen, COM-Objekte sowie auf das gesamte .NET Framework.
PowerShell Engine
Die PowerShell Engine (auch Shell, PowerShell Class oder PowerShell Runtime) ist der Kommandozeileninterpreter, der die Eingaben verarbeitet und damit das Herz der PowerShell. Die Engine ist eine Sammlung von .NET-Klassen, die in einer DLL (System.Management.Automation.dll
) gespeichert sind.
PowerShell Host
Der PowerShell Host ist die Benutzerschnittstelle zur PowerShell Engine. In Windows steht standardmäßig die Windows PowerShell (auch Konsole) (powershell.exe
, bereitgestellt durch conhost.exe
) und Windows PowerShell ISE (Integrated Scripting Environment, kurz ISE) (powershell_ise.exe
) zur Verfügung. Die ISE ist ein modernes Eingabefenster mit unter anderem integriertem Skripteditor, Debugger und IntelliSense. Beide Hosts erlauben es auch, herkömmliche Kommandozeilenanwendungen auszuführen, wie beispielsweise ipconfig.exe
. Jedoch erlaubt die ISE keine Interaktion, wie zum Beispiel bei nslookup.exe
. Die ISE kann durch Add-ons erweitert werden; eine bekannte Erweiterung ist ISESteroids.
Auch Verwaltungskonsolen, wie etwa die Exchange Management Console (EMC) seit Exchange Server 2007, sind ein Host. Darüber hinaus gibt es auf dem Markt weitere Hosts, wie PowerShell Plus von Idera.
Zwar nutzen alle Hosts dieselbe Engine, doch da die Implementierung unterschiedlich sein kann, ist es auch möglich, dass sich die Hosts untereinander unterschiedlich verhalten.
PowerShell Scripting Language (PSL)
Die PowerShell Scripting Language (PSL) ist die Sprache um Skripte für die PowerShell Engine zu entwickeln. Ab Version 2.0 kann die Skriptsprache auch verwendet werden, um eigene Cmdlets zu erstellen.
Die PowerShell-Sprache basiert auf dem IEEE 1003.2 POSIX Shell Standard und die Syntax ist an der Programmiersprache C# angelehnt.[8] Mit Version 5 wurde die Skriptsprache um Klassen erweitert.[9]
Anders als bei bisher existierenden objektorientierten Skript-Interpretern (BeanShell, Smalltalk, Python Shell) ist die Syntax der PowerShell-Skriptsprache, welche sich unter anderem Anleihen bei Perl, Unix-Shells, SQL und C nimmt, darauf ausgelegt, auch für den täglichen interaktiven Gebrauch als Shell für administrative Aufgaben wie etwa Dateiverwaltung geeignet zu sein.
Cmdlets
Cmdlets (gesprochen Commandlets) werden die Befehle in einer PowerShell-Umgebung genannt. Der Begriff soll verdeutlichen, dass es sich um sehr kleine, spezielle Befehle handelt, etwa wie in Befehlchen. Im Gegensatz zu herkömmlichen Befehlen sind Cmdlets keine Standalone-Anwendungen, das heißt, sie können nicht ohne die PowerShell ausgeführt werden. Cmdlets können .NET-Klassen oder PowerShell-Skripte sein und mit wenigen Zeilen Programmcode geschrieben werden. Cmdlets parsen Eingaben in der Regel nicht selber, stellen Fehler nicht selbst dar und geben Ergebnisse unformatiert als Objekt wieder.[10] Die PowerShell-Engine bzw. Standard-Cmdlets nehmen Cmdlet-Entwicklern Arbeit von Standardaufgaben ab und vereinfachen und beschleunigen die Entwicklung. Gleichzeitig wird die Nutzbarkeit und Lesbarkeit von Skripten und Befehlen durch sehr strikte und ausführliche Namenskonventionen gewährleistet.
Die Anzahl der vorinstallierten Cmdlets steigt mit jeder Version. Sie liegt in der Version 5.1 der Legacy-PowerShell bei 489 Cmdlets und 766 mitgelieferten Funktionen und in der Core-Version 6.1 bei 287 Cmdlets und 145 mitgelieferten Funktionen im Kernpaket und 1900 Cmdlets mit zusätzlichen Modulen.[11][12]
Cmdlets folgen dem Namensschema Verb-Substantiv, also beispielsweise Get-Help
oder Set-Location
. Cmdlets sind durch das vorangestellte Verb aufgabenorientiert, sollen genau eine spezifische Aufgabe erfüllen und nur einen Objekttyp ausgeben, wie zum Beispiel Get-Process
, das alle laufenden Prozesse auflistet und als Objekt vom Typ System.Diagnostics.Process
ausgibt. Das Beenden von Prozessen ist eine eigene Aufgabe und ist daher ein eigenes Cmdlet (Stop-Process
). Das Auflisten von Diensten gibt andere Eigenschaften als bei Prozessen aus und hat daher ein anderes Substantiv (Get-Service
). Die resultierenden Objekte können über die Pipe (|
) von anderen Cmdlets weiterverarbeitet werden. So ist es möglich, übergebene Objekte zu filtern (z. B. Select-Object -Property Name,Status
, Where-Object -Property Status -EQ -Value Stopped
), zu konvertieren (z. B. Converto-Json
) oder auszugeben (z. B. Out-File
, Out-GridView
) (siehe auch Objekte und die Pipe).
Microsoft hat eine Liste mit erlaubten Verben veröffentlicht. Die Einhaltung der Verben wird nicht technisch erzwungen. Sie wird jedoch empfohlen, um die Bedienung zu vereinheitlichen.[13] Die Liste der freigegebenen Verben kann mit Get-Verb
abgerufen werden.
Für Cmdlets können Aliase hinterlegt werden, etwa um Kompatibilität zu alten Skripten herzustellen, das Umsteigen von anderen Systemen zu erleichtern oder einfach Befehle mit weniger Buchstaben ausführen zu können. Einige dieser Aliase werden bereits durch Module vordefiniert. So wird beispielsweise das Cmdlet Set-Location
verwendet, um das aktuelle Verzeichnis des Hosts zu definieren, es sind jedoch auch die Aliase sl
, cd
und chdir
verwendbar.
Die folgende Tabelle stellt eine Auswahl von Standard-Cmdlets mit Aliasen und vergleichbaren Befehlen anderer Kommandozeileninterpreter gegenüber.
PowerShell Cmdlet |
PowerShell Version |
PowerShell Alias |
cmd.exe |
Unix-Shell | Beschreibung |
---|---|---|---|---|---|
Get-Help | 1.0[14] | help, man | help | man | Hilfe zu Befehlen |
Get-Command | 1.0[14] | gcm | Listet alle im derzeitigen Kontext verfügbaren Befehle und Aliase auf. | ||
Get-Alias | 1.0[14] | gal | alias | Listet Aliase für Befehle auf. | |
Get-Location | 1.0[14] | gl, pwd | cd | pwd | Ausgabe des aktuellen Verzeichnisses |
Set-Location | 1.0[14] | sl, cd, chdir | cd, chdir | cd | Wechseln des aktuellen Verzeichnisses |
Clear-Host | 3.0[15] | cls, clear | cls | clear | Löschen der Ausgabe |
Copy-Item | 1.0[14] | cpi, copy, cp | copy | cp | Kopieren einer oder mehrerer Dateien / eines ganzen Verzeichnisbaums |
Remove-Item | 1.0[14] | ri, del, erase, rmdir, rd, rm | del, rmdir, rd | rm, rmdir | Löschen einer Datei / eines Verzeichnisses |
Rename-Item | 1.0[14] | rni, ren | ren | mv | Umbenennen einer Datei / eines Verzeichnisses |
Move-Item | 1.0[14] | mi, move, mv | move | mv | Verschieben einer Datei / eines Verzeichnisses |
Get-ChildItem | 1.0[14] | gci, dir, ls | dir | ls | Liste aller Dateien / Verzeichnisse im (aktuellen) Verzeichnis |
Write-Host | 1.0[14] | echo, write | echo | echo | Ausgabe von Zeichenketten, Variablen etc. in der Konsole |
Pop-Location | 1.0[14] | popd | popd | popd | In Verzeichnis wechseln, das zuletzt auf dem Stack abgelegt wurde |
Push-Location | 1.0[14] | pushd | pushd | pushd | Verzeichnis auf dem Stack ablegen |
Set-Variable | 1.0[14] | sv, set | set | set | Wert einer Variable setzen / Variable anlegen |
Start-Process | 2.0[16] | saps | start | Startet ein Programm im eigenen Fenster | |
Get-Content | 1.0[14] | gc, type, cat | type | cat | Ausgabe einer Datei |
Select-String | 1.0[14] | sls | find, findstr | grep | Suche und Filterung definierter Zeichenketten |
Get-Process | 1.0[14] | gps, ps | tlist,[17][18] tasklist[19] | ps | Liste aller momentan laufenden Prozesse |
Stop-Process | 1.0[14] | spps, kill | kill,[17][20] taskkill[21] | kill | Beenden eines laufenden Prozesses |
Stop-Computer | 2.0[16] | shutdown | shutdown, poweroff | Herunterfahren des Rechners | |
Restart-Computer | 2.0[16] | shutdown -r | reboot, shutdown -r | Neustart des Rechners | |
Tee-Object | 1.0[14] | tee | tee | Standardeingabe in eine Datei oder Variable umleiten und entlang der Pipeline weiterreichen (Standardausgabe) | |
Get-NetIPAddress | 3.0[22] | gip | ipconfig | ifconfig | Listet die Netzwerkschnittstellen mit Konfigurationsinformationen auf |
Get-Acl | 1.0[14] | acl | Listet die Zugriffsberechtigungen eines Ordners oder Dokuments auf. | ||
Get-Member | 1.0[14] | gm | Listet die Mitglieder (Member-Variablen) eines Objektes auf. | ||
Get-PSSnapin | 1.0[14] | gsnp | Listet die aktiven PowerShell-Erweiterungen auf. | ||
Export-Console | 1.0[14] | export | Exportiert die aktive Konfiguration der Konsole in eine Datei. Eine neue PowerShell-Instanz kann diese Konfiguration über den Parameter -psconsolefile <String> beim Start laden.
|
Parameter werden nach dem Cmdlet mit -Parametername [Wert]
angegeben. Ein Parameter kann unterschiedliche Eigenschaften besitzen, so kann er beispielsweise einen Standardwert haben, erforderlich oder positionsbezogen sein oder Werte aus der Pipe akzeptieren. Welche Parameter für ein Cmdlet verfügbar sind und welche Eigenschaften sie besitzen, kann mit Get-Help
geprüft werden (z. B. Get-Help -Name Get-NetIPAddress -Parameter *
).
Zusätzlich zu Cmdlet-spezifischen Parametern gibt es auch sogenannte Common Parameter, also allgemein verfügbare Parameter. Dazu zählt -Verbose
zur Ausgabe von Detailinformationen, -ErrorAction
, um festzulegen, wie bei einem Fehler verfahren werden soll oder -WhatIf
, um sich ausgeben zu lassen, was passieren würde, wenn man den Befehl ausführt, ohne dass tatsächlich Änderungen gemacht werden.
Module sind die bevorzugte Art, um Cmdlets zu veröffentlichen und in PowerShell zu laden. Module bestehen aus dem Cmdlet-Programmcode (als PowerShell-Skript oder .NET-Klasse) und einem Manifest, das den Inhalt des Moduls beschreibt.[23] In PowerShell 1.0 war es ausschließlich über PSSnapins (Snap-ins) möglich, Cmdlets zu laden. Dies wurde jedoch durch die Funktion der Module ersetzt.[24]
PowerShell Provider
PowerShell Provider (auch PSProvider) bieten den Zugriff auf Daten und Komponenten (Namensräume), die sonst nicht einfach über den Host abrufbar wären, und präsentieren die Daten in einem konsistenten Format als Laufwerke. Das bekannteste Beispiel dafür ist das Dateisystem, welches eine Partition als Laufwerk C darstellt. Es sind jedoch auch weitere Provider möglich, wie etwa Variablen, die Registry, Active Directory und der Zertifikatsspeicher. In allen Laufwerken (zum Beispiel C:
, D:
, Env:
, HKLM:
oder Cert:
) kann gleichermaßen navigiert oder Elemente verarbeitet werden (Set-Location
, Get-ChildItem
, Remove-Item
, …).
Liste von Providern
Folgende Liste zeigt einige der Standardprovider in PowerShell.
Name | Typ | Aufgabe |
---|---|---|
Alias | Container | Bindet ein logisches Laufwerk mit dem Namen „Alias:“ ein. Über dieses Laufwerk lassen sich als Schlüssel-Wert Paare definierte Alias (etwa mit Get-ChildItem Alias: ) abrufen.
|
Environment | Container | Bindet ein logisches Laufwerk mit dem Namen „env:“ ein. Über dieses Laufwerk lassen sich die Umgebungsvariablen abfragen. |
FileSystem | Navigation | Über den FileSystem Provider wird der Zugriff auf das Dateisystem ermöglicht. Über den FileSystem-Provider können Laufwerke, Wechseldatenträger, Netzlaufwerke, u. ä., sowie die darauf befindlichen Dateien und Ordner zugegriffen werden. Laufwerke werden dabei jedoch nicht als logisches Laufwerk in PowerShell integriert, sondern als Referenz im Function-Provider hinterlegt. |
Function | Container | Verwaltet Funktionen, welche mit New-Item erstellt oder in einem PowerShell-Skript deklariert wurden.
|
Registry | Navigation | Ermöglicht unter Windows den Zugriff auf die Registrierungsdatenbank. Standardmäßig werden die Laufwerke „HKLM:“ (für HKEY_LOCAL_MACHINE ) und „HKLU:“ (für HKEY_LOCAL_USER ) erstellt. Weitere Laufwerke lassen sich bei Bedarf mit New-PSDrive (z. B. New-PSDrive -name HKU -psprovider Registry -root HKEY_USERS ) anlegen.
|
Variable | Container | Verwaltet die im PowerShell-Host erstellten Variablen und deren Werte und bindet diese als logisches Laufwerk „Variable:“ ein. |
Certificate | Navigation | Verwaltet die Sicherheitszertifikate des Systems und bindet sich als logisches Laufwerk „Cert:“ ein. Der Certificate-Provider wird von Get-PSProvider nicht aufgelistet.
|
Objekte und die Pipe
Andere Kommandozeileninterpreter wie Cmd.exe, Bash oder DCL sind textbasiert, wohingegen PowerShell mit Objekten arbeitet. Objekte können Eigenschaften (Properties), Methoden (Methods) und Ereignisse (Events) enthalten.
Get-Member
zeigt den Typ sowie die Eigenschaften und Methoden von Objekten.
Für die Systemverwaltung/Administration bedeutet dies, dass Ergebnisse von Befehlen nicht mehr als Text (unstrukturierte Daten), sondern Objekte (strukturierte Daten) vorliegen. Dies wirkt sich auch auf die Pipe aus.
Die Pipe (|
) in textbasierten Kommandozeileninterpretern verbindet die Standardausgabe stdout
mit der Standardeingabe stdin
des darauffolgenden Befehls. In PowerShell werden Daten in der Pipe abgelegt und die Pipe muss die Daten an das darauffolgende Cmdlet binden. Ob und wie Eingaben von einer Pipe erlaubt sind, entscheidet jedes Cmdlet für jeden Parameter selbst. Das heißt, die Pipe muss prüfen, ob der Folgebefehl das Binden an einen Parameter erlaubt. Dabei wird zwischen zwei Arten von Bindungen unterschieden: ByValue
oder ByPropertyName
. Bei ByValue
muss der Objekttyp in der Pipe mit dem geforderten Objekttyp übereinstimmen. Bei ByPropertyName
muss der Name einer Eigenschaft des Objekts mit dem Namen des Parameters des Folgebefehls übereinstimmen. ByValue
wird ByPropertyName
gegenüber bevorzugt.
Arbeitet man mit herkömmlichen Konsolenanwendungen in einem PowerShell Host wird der Standardoutput stdout
in ein Objekt des Typs String
umgewandelt.
Dieses Modell ist anfangs komplex, jedoch ergeben sich dadurch in der Praxis auch Vorteile beim Filtern und Verarbeiten von Informationen, wie folgende Beispiele verdeutlichen sollen.
Beispiel 1: Es sollen alle gestoppten Dienste eines entfernten Computers gestartet werden, mit einer Ausgabe, welche Dienste gestartet wurden.
# Listet alle Dienste auf einem entfernten Computer auf
# Filtert die zurückgegebene Dienste nach denen, die gestoppt sind
# Startet all diese Dienste und gibt die verarbeiteten Objekte an die Pipeline weiter (-PassThru)
# Gibt die Eigenschaften MachineName, DisplayName und Status der gestarteten Dienste aus
Get-Service -ComputerName Server01 | Where-Object -Property Status -EQ -Value Stopped | Start-Service -PassThru | Select-Object -Property MachineName, DisplayName, Status
Beispiel 2: Auf dem lokalen Computer sollen die 10 Prozesse von Microsoft mit der höchsten Arbeitsspeichernutzung (in Megabyte) in absteigender Reihenfolge in einer CSV-Datei abgespeichert werden.
# Listet alle gestarteten Prozesse auf dem lokalen Computer auf
# Filtert nach Prozessen der Firma Microsoft
# Sortiert nach Arbeitsspeichernutzung (WorkingSet64) absteigend (-Descending)
# Filtert auf die Eigenschaften ProcessName und MemoryUsageMB, wobei MemoryUsageMB ein ''Custom Property'' ist, das zur Laufzeit die bestehende Eigenschaft WorkingSet64 in MB und auf ganze Zahlen gerundet darstellt
# Filtert auf die ersten 10 Objekte
# Das Objekt wird in ein CSV-Format umgewandelt
# und in einer Datei gespeichert
Get-Process | Where-Object -Property Company -EQ -Value 'Microsoft Corporation' | Sort-Object -Property WorkingSet64 -Descending | Select-Object ProcessName,@{Name='MemoryUsageMB';Expression={[math]::round($PSItem.WorkingSet64/1MB,0)}} | Select-Object -First 10 | ConvertTo-Csv | Out-File -FilePath $env:TEMP\TopProcesses.csv
PowerShell arbeitet bei Objekten mit einer dynamischen Typisierung. Dabei kommt ein erweitertes Typsystem (englisch: Vorlage:Lang, ETS) zum Einsatz, bei dem .NET-Objekte in der Klasse PSObject
gekapselt werden. PSObject
stellt hierbei die Basisklasse für PowerShell-Objekte dar. PSObject
entspricht damit einer Monade.
In C#:
using System;
using System.Management.Automation;
namespace PowerShell
{
public class PSObjectExample
{
public void Main()
{
var time = DateTime.UtcNow;
var powerTime = new PSObject(time);
}
}
}
|
In PowerShell:
# Aufruf einer statischen Methode mit [ClassName]::Method
# Variable $time ist explizit typisiert
[System.DateTime]$time = [System.DateTime]::UtcNow
# explizites Typecasting nach PSObject
# Variable $powerTime ist implizit typisiert
$powerTime = [System.Management.Automation.PSObject]$time
# Aufruf eines Konstruktors
$powerTime = New-Object System.Management.Automation.PSObject($time)
|
PowerShell bietet implizite Typkonvertierung. Dabei kommen Typkonverter zum Einsatz, von denen einige vorgegeben sind:
Typ | Konvertiert nach | Methode |
---|---|---|
null | String | gibt String.Empty zurück
|
null | Char | gibt '\0' zurück
|
null | Numeric | gibt 0 zurück
|
null | Boolean | gibt false zurück
|
null | Nullable<T> | gibt null zurück
|
null | Objektreferenz | gibt null zurück
|
Klasse | Basisklasse | Boxing der Klasse auf die Basisklasse |
object | void | gibt AutomationNull.Value zurück
|
object | String | gibt value.ToString() zurück
|
object | Boolean | gibt das Ergebnis von LanguagePrimitives.IsTrue(value) zurück
|
object | PSObject | gibt PSObject.AsPSObject(value) zurück
|
object | XMLDocument | ruft die value.ToString() -Methode auf und übergibt das Ergebnis dem XMLDocument Konstruktor
|
object | Nullable<T> | das Objekt wird mit (T)value konvertiert und als Nullable-Monade zurückgegeben
|
Array | Array | Konvertierung der einzelnen Array-Elemente |
IDictionary | Hashtable | gibt new Hashtable(value) zurück
|
String | Char[] | gibt value.ToCharArray() zurück
|
String | RegEx | gibt new RegEx(value) zurück
|
String | Type | Deserialisierung über RunSpaceConfiguration.Assemblies
|
String | Numeric | 0 für String.Empty . Versucht den Wert mit Culture.InvariantCulture zu parsen.
|
Integer | System.Enum | Liefert den Enum-Wert zurück, der dem Integer zugewiesen ist. throw new PSInvalidCastException() falls das nicht möglich ist.
|
Skripte
PowerShell-Skripte können in einer Skript-Datei zusammengefasst werden. Skript-Dateien enthalten Funktionen mit zugehöriger Beschreibung in einem Kommentarblock sowie Variablen und Befehle. Skript-Dateien haben die Endung .ps1
und werden mit dem Befehl .
, gefolgt vom vollständigen Namen der Datei geladen und verarbeitet.
- Beispiel
<#
.SYNOPSIS
Hello World Application.
.DESCRIPTION
This script is a more complex Hello World function that intends to show some of the syntax of PowerShell.
To use it, write ". ./Write-Hello.ps1" (dot, space, filename) into your PowerShell first, so that the script gets loaded.
.NOTES
File Name: Write-Hello.ps1
.EXAMPLE
Write-Hello
Hello World!
.EXAMPLE
Write-Hello "World"
Hello World!
.EXAMPLE
greet "World"
Hello World!
.EXAMPLE
Write-Hello -Name "World"
Hello World!
.EXAMPLE
"World" | Write-Hello
Hello World!
.EXAMPLE
@("Jack", "Jill") | Write-Hello
Hello Jack!
Hello Jill!
.ALIAS
greet
.LINK
http://de.wikipedia.org/wiki/PowerShell
.INPUTTYPE
Takes a name of type [string].
.RETURNVALUE
Output a greeting of type [string].
.PARAMETER Name
A list of names of the persons to greet. Greets the world by default.
#>
function Write-Hello
{
[CmdletBinding()]
param(
# get name parameter from the pipeline or as a parameter
[Parameter(Mandatory = $False, Position = 0, ValueFromPipeline = $True, HelpMessage = "The name to greet.")]
[string]$Name = "World"
)
begin {
# load assemblies from Global Assembly Cache (deprecated method)
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Exception")
# cancel the execution if an error occurs
$ErrorActionPreference = "Stop"
}
# process once for every input that was given
process {
try {
if($Name -eq "Error") {
throw New-Object System.Exception("The name must not be 'Error'.")
}
}
catch [System.Exception] {
Write-Error $_
}
# process the request
[string]$Greeting = [string]::Format("Hello {0}!", $Name)
# outputs a string object to the PowerShell pipeline
# note: using write-host calls .ToString() method on the returned object
Write-Output $Greeting
}
end {
}
}
# setting an alias
Set-Alias greet Write-Hello
Beispiele
Gib die Zeichenfolge "Hallo Welt!" auf der Konsole aus:
Write-Host "Hallo Welt!"
Write-Host
erzwingt dabei die Ausgabe auf der Konsole. Die Ausgabe wird nicht an die Pipeline weitergegeben und kann nicht weiterverarbeitet werden. Write-Output
würde die Ausgabe sowohl an die Konsole, als auch die Pipeline weitergeben.
Hole alle Prozesse, deren Namen mit dem Buchstaben „p“ beginnen:
Get-Process p*
Hole alle Prozesse, die mehr als 10 MB Hauptspeicher verwenden:
Get-Process | where { $_.WS -gt 10MB }
where
ist ein Alias für Where-Object
und filtert das ausgegebene Objekt von Get-Process
auf alle Elemente die als Eigenschaft WS ($_.WS
) einen Wert größer 10 MB haben. PowerShell kennt die Maßeinheit Byte und rechnet 10 MB in 10485760 um.
Berechne die Gesamtanzahl der Bytes aller Dateien in einem Verzeichnis:
Get-ChildItem | Measure-Object -Property Length -Sum
Warte, bis ein bestimmter Prozess beendet wurde:
$processToWatch = Get-Process notepad
$processToWatch.WaitForExit()
Ändere eine Zeichenkette von Kleinbuchstaben in Großbuchstaben:
"hallo welt!".ToUpper()
Füge die Zeichenfolge „ABC“ nach dem ersten Buchstaben des Wortes „string“ ein, um als Ergebnis „sABCtring“ zu erhalten:
"string".Insert(1, "ABC")
Lade einen bestimmten RSS-Web-Feed herunter und zeige die Überschriften der acht neuesten Einträge:
$rssUrl = "https://devblogs.microsoft.com/powershell/feed/"
$blog = [xml] (New-Object System.Net.WebClient).DownloadString($rssUrl)
$blog.rss.channel.item | select title -First 8
Lösche die komplette Festplatte ohne Rückfrage, Äquivalent zu rm -rf / unter Unix:
Get-PSDrive -p "FileSystem" | % { ls -Recurse $_.Root | rm –Force }
Dateiendungen
- .ps1 – Windows PowerShell Shellskript
- .ps1xml – Windows PowerShell Format- und Typdefinitionen
- .psc1 – Windows PowerShell Konsolendatei (exportierte Shell-Konfiguration)
- .psd1 – Windows PowerShell Datendatei
- .psm1 – Windows PowerShell Moduldatei
Software-Unterstützung
Unterstützt werden unter anderem folgende Systeme:
Literatur
- Deutsch
- Ulrich Cuber: Windows PowerShell. Mitp-Verlag 2007, ISBN 978-3-8266-1673-0.
- Vorlage:Literatur
- Peter Monadjemi: Windows PowerShell – Crashkurs. Microsoft Press Deutschland 2007, ISBN 978-3-86645-617-4.
- Andy Oakley: Schnelleinstieg in die Windows PowerShell. O’Reilly Verlag 2007, ISBN 978-3-89721-487-3.
- Bruce Payette: Windows PowerShell im Einsatz. Hanser Fachbuchverlag 2007, ISBN 978-3-446-41239-2.
- Holger Schwichtenberg: Windows PowerShell. Addison-Wesley 2007, ISBN 978-3-8273-2533-4.
- Holger Schwichtenberg: Windows Scripting. Automatisierte Systemadministration mit dem Windows Script Host und der Windows PowerShell. Addison-Wesley 2007, ISBN 978-3-8273-2423-8.
- Helma Spona: Windows PowerShell. Sprachgrundlagen, Dateisystem, Datenbankzugriffe, WMI-Steuerung. Galileo Press 2007, ISBN 978-3-89842-880-4.
- Tobias Weltner: Scripting mit Windows PowerShell – Einsteiger-Workshop. Microsoft Press Deutschland 2007, ISBN 978-3-86645-620-4.
- Tobias Weltner: PowerShell Scripting für Administratoren. Microsoft Press Deutschland 2008, ISBN 978-3-86645-635-8.
- Englisch
- Jerry Lee Ford Jr.: Microsoft Windows Powershell Programming for the Absolute Beginner. Course Technology Ptr 2007, ISBN 1-59863-354-6.
- Lee Holmes: Windows PowerShell Quick Reference. O’Reilly 2006, ISBN 0-596-52813-2.
- Don Jones: An Introduction to Microsoft® PowerShell™. Realtimepublishers.com 2006.
- Don Jones, Jeffery Hicks: Windows PowerShell™: TFM®. SAPIEN Press 2006, ISBN 0-9776597-1-2.
- Tyson Kopczynski: Microsoft Powershell Unleashed. Sams Publishing 2007, ISBN 0-672-32953-0.
- Andy Oakley: Monad – Introducing the MSH Command Shell and Language. O’Reilly 2006, ISBN 0-596-10009-4.
- Bruce Payette: Windows PowerShell in Action. Manning Publications, ISBN 1-932394-90-7.
- Andrew Watt: Professional Windows PowerShell. Wrox Press 2007, ISBN 0-471-94693-1.
- Ed Wilson: Microsoft® Windows PowerShell™ Step By Step. Microsoft Press 2007, ISBN 0-7356-2395-3.
- Steve Seguis: Windows PowerShell 2 for Dummies, ISBN 978-0-470-37198-5
- Vorlage:Literatur
Weblinks
- PowerShell 7.0 freigegeben: Eine Shell für (fast) alle und (fast) alles März 2020, heise online
- Schnellreferenzen
- Einführung
- Microsoft TechnNet: Skripterstellung mit Windows PowerShell – Microsofts Einstiegs-Seite zur Windows PowerShell
- Die Neuerungen von PowerShell 3.0 im Überblick
- Muschelzucht im Ausland – PowerShell-Artikel erschienen im Linux-Magazin 2006/12
- PowerShell für Exchange und Sharepoint – ADMIN-Magazin 01/2011
- Blogs
- Weblog des PowerShell-Entwicklerteams (en) – Informationen und Neuigkeiten zur PowerShell aus erster Hand
- Cmdlets und Module
- Portierungen
- BDD und Unit Testing Frameworks
- Automation, Delegation & Management mit PowerShell Skripten
- ScriptRunner: Automation & Collaboration Plattform für PowerShell – ScriptRunner ermöglicht eine schnelle, einfache und sichere Automatisierung und Delegation von Skripten sowie das Erstellen, Verwalten und Überwachen von Skripten und Ausführungsrichtlinien.
- Sonstiges
Einzelnachweise
- ↑ Hochspringen nach: 1,0 1,1 PowerShell Lizenz auf Github
- ↑ PowerShell Readme-Datei auf Github
- ↑ Hochspringen nach: 3,0 3,1 blogs.msdn.microsoft.com: PowerShell on Linux and Open Source
- ↑ msdn.microsoft.com: Windows Management Framework (WMF) 5.0 RTM – Anmerkungen zu dieser Version – Übersicht
- ↑ technet.microsoft.com: PowerShell unter Nano Server
- ↑ PowerShell auf Github
- ↑
- ↑ Bruce Payette, Richard Siddaway: Windows PowerShell in Action. 3. Ausgabe. Manning, Shelter Island 2018, ISBN 978-1-63343-029-7, S. 17–18.
- ↑ Bruce Payette, Richard Siddaway: Windows PowerShell in Action. Shelter Island 2018, S. 762.
- ↑ msdn.microsoft.com: Cmdlet Overview
- ↑
- ↑ Referenzfehler: Es ist ein ungültiger
<ref>
-Tag vorhanden: Für die Referenz namens:0
wurde kein Text angegeben. - ↑
- ↑ Hochspringen nach: 14,00 14,01 14,02 14,03 14,04 14,05 14,06 14,07 14,08 14,09 14,10 14,11 14,12 14,13 14,14 14,15 14,16 14,17 14,18 14,19 14,20 14,21 14,22
- ↑
- ↑ Hochspringen nach: 16,0 16,1 16,2
- ↑ Hochspringen nach: 17,0 17,1
- ↑
- ↑
- ↑
- ↑
- ↑
- ↑ msdn.microsoft.com: Understanding a Windows PowerShell Module
- ↑ msdn.microsoft.com PowerShell Referenz: about_PSSnapins
- ↑
- ↑
- ↑
- ↑
- ↑
- ↑
- ↑