about_Methods

Letzte Aktualisierung: Mai 2014

Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

THEMA

about_methods

KURZE BESCHREIBUNG

Beschreibt die Verwendung von Methoden zum Ausführen von Aktionen für Objekte in Windows PowerShell.

LANGE BESCHREIBUNG

Windows PowerShell verwendet Objekte, um die Elemente in Datenspeichern oder den Status des Computers zu repräsentieren. Beispielsweise repräsentieren FileInfo-Objekte die Dateien in Dateisystemlaufwerken, und ProcessInfo Objekte repräsentieren die Prozesse auf dem Computer.

Objekte verfügen über Eigenschaften, in denen Daten zu dem Objekt gespeichert sind, und über Methoden, mit denen Sie das Objekt ändern können.

Eine „Methode“ ist ein Satz von Anweisungen, die eine Aktion angeben, die Sie für das Objekt ausführen können. Beispielsweise enthält das FileInfo-Objekt CopyTo-Methode, welche die Datei kopiert, die das FileInfo-Objekt repräsentiert.

Um die Methoden eines Objekts abzurufen, verwenden Sie das Get-Member-Cmdlet. Verwenden Sie dessen MemberType-Eigenschaft mit dem Wert „Method“. Der folgende Befehl ruft die Methoden der Prozessobjekte auf.

        PS C:\>Get-Process | Get-Member -MemberType Method
       
           TypeName: System.Diagnostics.Process

         Name                      MemberType Definition
         ----                      ---------- ----------
         BeginErrorReadLine        Method     System.Void BeginErrorReadLine()
         BeginOutputReadLine       Method     System.Void BeginOutputReadLine()
         ...
         Kill                      Method     System.Void Kill()
         Refresh                   Method     System.Void Refresh()
         Start                     Method     bool Start()
         ToString                  Method     string ToString()
         WaitForExit               Method     bool WaitForExit(int milliseconds), System.Void WaitForExit()
         WaitForInputIdle          Method     bool WaitForInputIdle(int milliseconds), bool WaitForInputIdle()

Zum Ausführen oder Aufrufen (English: „invoke“) einer Methode eines Objekts geben Sie einen Punkt (.), den Namen der Methode sowie einen Satz von Klammern „()“ ein. Wenn die Methode Argumente aufweist, platzieren Sie die Argumentwerte in Klammern. Die Klammern sind für jeden Methodenaufruf erforderlich, selbst wenn keine Argumente vorhanden sind.

Der folgende Befehl ruft beispielsweise die Kill-Methode der Prozesse auf, um den Notepad-Prozess auf dem Computer zu beenden. Im Ergebnis wird die Instanz von Notepad geschlossen. (Der Get-Process-Befehl wird in Klammern eingeschlossen, um sicherzustellen, dass er ausgeführt wird, bevor die Kill-Methode aufgerufen wird.

        (Get-Process Notepad).Kill()

Ein anderer sehr nützlicher Prozess ist die Split-Methode von Zeichenfolgen. Die Split-Methode verwendet ein Trennzeichenargument, das der Methode mitteilt, wo die Zeichenfolge zu teilen ist.

        PS C:\>$a = "Try-Catch-Finally"
        PS C:\>$a.Split("-")
        Try
        Catch
        Finally

Wie in den vorherigen Beispielen gezeigt wird, können Sie eine Methode für ein Objekt aufrufen, die Sie abrufen, indem Sie einen Befehl oder ein Objekt in einer Variablen verwenden.

Ab Windows PowerShell 4.0 wird der Methodenaufruf durch die Verwendung von dynamischen Methodennamen unterstützt.

INFORMATIONEN ZU METHODEN

Um die Definitionen der Methoden eines Objekts zu finden, wechseln Sie zum Thema für den Objekttyp in der MSDN-Hilfe, und suchen Sie nach der Seite zu den Methoden. Die folgende Seite beschreibt z. B. die Methoden von Process-Objekten (System.Diagnostics.Process).

         https://msdn.microsoft.com/library/system.diagnostics.process_methods

Um die Argumente einer Methode zu ermitteln, überprüfen Sie die Definition der Methode, die dem Syntaxdiagramm eines Windows PowerShell-Cmdlets ähnelt.

Eine Methodendefinition kann eine oder mehrere Methodensignaturen aufweisen, die den Parametersätzen von Windows PowerShell-Cmdlets ähneln. Die Signaturen zeigen alle gültigen Formate von Befehlen zum Aufrufen der Methode.

Beispielsweise enthält die CopyTo-Methode der FileInfo-Klasse die folgenden beiden Methodensignaturen:

        1. CopyTo(String destFileName)
        2. CopyTo(String destFileName, Boolean overwrite)

Die erste Methodensignatur verwendet den Namen der Zieldatei (und einen Pfad). Im folgende Beispiel wird die erste CopyTo-Methode zum Kopieren der Final.txt-Datei in das Verzeichnis C:\Bin verwendet.

        (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")

Die zweite Methodensignatur verwendet einen Zieldateinamen und einen Booleschen Wert, der bestimmt, ob die Zieldatei überschrieben werden soll, wenn sie bereits vorhanden ist.

Im folgenden Beispiel wird die zweite CopyTo-Methode verwendet, um die Final.txt-Datei in das Verzeichnis C:\Bin zu kopieren und um vorhandene Dateien zu überschreiben.

        (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)

METHODEN VON SKALAREN OBJEKTE UND SAMMLUNGEN

Die Methoden von nur einem („skalaren“) Objekt eines bestimmten Typs unterscheiden sich oft von den Methoden einer Sammlung von Objekten des gleichen Typs.

So verfügt z. B. jeder Prozess über eine Kill-Methode, wogegen eine Sammlung von Prozessen nicht über eine Kill-Methode verfügt.

Ab Windows PowerShell 3.0 versucht Windows PowerShell, Skriptfehler zu verhindern, die sich aus unterschiedlichen Methoden skalarer Objekte und Sammlungen ergeben.

Ab Windows PowerShell 4.0 wird das Filtern von Sammlungen mithilfe einer Methodensyntax unterstützt.

Wenn Sie eine Sammlung übermitteln, aber eine Methode anfordern, die nur in einzelnen („skalaren“) Objekten vorhanden ist, ruft Windows die Methode für jedes Objekt in der Sammlung auf.

Wenn die Methode für die einzelnen Objekte und in der Sammlung vorhanden ist, wird das Ergebnis von Windows PowerShell nicht geändert.

Dieses Feature funktioniert auch für Eigenschaften von skalaren Objekte und Sammlungen. Weitere Informationen finden Sie unter „about_Properties“.

BEISPIELE

Im folgenden Beispiel wird die Kill-Methode der einzelnen Prozessobjekte für eine Sammlung von Prozessobjekten ausgeführt. Dieses Beispiel funktioniert nur in Windows PowerShell 3.0 und späteren Versionen von Windows PowerShell.

Der erste Befehl startet drei Instanzen des Notepad-Prozesses. Der zweite Befehl verwendet den Get-Process-Befehl, um alle drei Instanzen des Notepad-Prozesses abzurufen und um diese in der $p-Variablen zu speichern.

        PS C:\>Notepad; Notepad; Notepad
        PS C:\>$p = Get-Process Notepad
        

Der dritte Befehl verwendet die Count-Eigenschaft aller Sammlungen, um sicherzustellen, dass es drei Prozesse in der $p-Variablen gibt.

        PS C:\>$p.Count
        3

Der vierte Befehl führt Kill-Methode für alle drei Prozesse in der $p-Variablen aus.

Dieser Befehl funktioniert, obwohl eine Sammlung von Prozesse nicht über eine Kill-Methode verfügt.

        PS C:\>$p.Kill()

Der fünfte Befehl verwendet den Get-Process-Befehl, um zu bestätigen, dass der Kill-Befehl funktioniert hat.

        PS C:\>Get-Process Notepad
        Get-Process : Cannot find a process with the name "notepad". Verify the process name and call the cmdlet again.
        At line:1 char:12
        + get-process <<<<  notepad
            + CategoryInfo          : ObjectNotFound: (notepad:String) [Get-Process], ProcessCommandException
            + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

Für die gleiche Aufgabe in Windows PowerShell 2.0 müssen Sie das Foreach-Object-Cmdlet verwenden, um die Methode für jedes Objekt in der Sammlung auszuführen.

        PS C:\>$p | Foreach-Object {$_.Kill()}

SIEHE AUCH

about_Objects

about_Properties

Get-Member