Zum Hauptinhalt springen

Statische Eigenschaften und Methoden

Objektmethoden können nur mit den Objekten verwendet werden, zui denen sie gehören. Nehmen Sie als Beispiel einen String. Die Stringmethode Split() teilt einen String in Substrings auf.

$Env:PSModulePath.Split(';')

> C:\Users\Admin\Documents\WindowsPowerShell\Modules 
> C:\Program Files\WindowsPowerShell\Modules 
> C:\Windows\system32\WindowsPowerShell\v1.0\Modules

Split() verarbeitet den Inhalt des Strings, der in der Umgebungsvariablen $Env:PSModulePath gespeichert ist, kann aber ausschließlich auf die String-Instanz von $Env:PSModulePath angewendet werden – es ist nicht möglich, mit $Env:PSModulePath.Split() einen anderen String zu bearbeiten als den, der in $Env:PSModulePath gespeichert ist.

Oder nehmen Sie einen Datumstyp:

$Datum = Get-Date
$Datum.AddHours(10)

Die Methode AddHours() des Objekts $Datum kann immer nur Stunden zu dem DateTime addieren, dass in $Datum gespeichert ist.

Es gibt aber auch .NET-Methoden, die beliebige Objekte verarbeiten können. Da in der Objektorientierten Programmierung alles in Klassen verpackt werden muss, werden solche universellen Methoden in Klassen gespeichert und als statische Methoden bezeichnet. Anders gesagt sind statische Methoden Programme, die in Objektortientierten Sprachen wie c# aber immer in einer Klasse gespeichert werden. Zusätzlich zu statischen Methoden gibt es auch statische Eigenschaften. Statische Eigenschaften werden oft dazu verwendet, um Konstante Werte zur Verfügung zu stellen.

Einige sehr praktische Beispiele befinden sich in der [System.Math]-Klasse:

[System.math]::Pi               # die Zahl Pi
> 3,14159265358979
[System.math]::Round(10.22456)  # Runden
> 10
[System.math]::SQRT(441)        # Quadratwurzel (Square-root)
> 21

Die Math-Klasse stellt eine ganze Reihe von mathematischen Methoden und zwei Konstanten (Pi und die Eulersche Zahl e) (im Powershell 7 zusätzlich tau) zur Verfügung. Im Gegensatz zu Objekten kann man die Methoden verwenden, um beliebige Werte zu berechnen. Um Powershell zu sagen, dass man auf Methoden in der Klasse zugreifen möchte, nicht auf die Methoden der Klasse, wird die etwas eigenwillige Syntax :: verwendet. 

Der Zugriff auf statische Eigenschaften und Methoden findet mit zwei Doppelpunkten statt, weil jede einzelne Klassen ebenfalls als Objekte repräsentiert ist. Mit einem Punkt greift man auf die Meta-Informationen der jeweiligen Klasse zu. Wenn Sie z.B. wissen wollen, in welcher Datei der Code für die Math-Klasse versteckt ist, können Sie die Eigenschaft Assembly von [System.math] abfragen:

[System.math].assembly

> GAC   Version     Location
> ---   -------     --------
> True  v4.0.30319  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorl...

Um alle statischen Methoden eines Typs anzuzeigen, können Sie Get-Member mit dem Parameter static verwenden:

[System.math] | get-member -Static

>   TypeName: System.Math

> Name   MemberType   Definition
> ----   ----------   ----------
> Abs    Method       static sbyte Abs(sbyte value), static int16 Abs(int16 value), static... 
> Acos   Method       static double Acos(double d)
> Asin   Method       static double Asin(double d)
> Atan   Method       static double Atan(double d)
[…]