Connect with us

Wie man

Erfahren, wie Sie Objekte in PowerShell verwenden

Lernen von PowerShell-Variablen, Eingabe und Ausgabe

Das Verstehen von Objekten ist eines der grundlegenden Konzepte zum „Erhalten“ von PowerShell. Erforschen Sie mit uns Objekte und wie sie PowerShell besser machen als jede andere Shell, die es heute gibt.

Lesen Sie unbedingt die vorherigen Artikel in der Reihe:

Und bleiben Sie die ganze Woche für den Rest der Serie dran.

Objekte

Haben Sie sich jemals gefragt, was PowerShell von einer herkömmlichen Linux-Shell wie Bash oder sogar von der alten Eingabeaufforderung unterscheidet? Die Antwort ist ganz einfach: Herkömmliche Shells geben Text aus, was das Formatieren und Filtern erschwert. Natürlich gibt es Tools, mit denen Sie Ihre Arbeit erledigen können (sed und grep kommen in den Sinn), aber am Ende des Tages müssen Sie reguläre Ausdrücke wie die kennen, wenn Sie eine schwere Textanalyse durchführen möchten Handrücken.

PowerShell nutzt das zugrunde liegende .NET-Framework und verfolgt einen anderen Ansatz, bei dem Objekte anstelle von Text verwendet werden. Objekte sind nur eine Darstellung von etwas. Sie sind eine Sammlung von Teilen und Aktionen, um sie zu verwenden. Werfen wir einen Blick auf die Teile eines Fahrrads und wie wir sie verwenden könnten.

Objekte in .Net sind bis auf zwei kleine Unterschiede sehr ähnlich: Die „Teile“ werden aufgerufen Eigenschaften und die „Anweisungen“ werden aufgerufen Methoden. Wenn wir einen Windows-Dienst als Objekt darstellen möchten, können wir entscheiden, dass es angemessen ist, ihn mit drei Eigenschaften zu beschreiben: Dienstname, Status und Beschreibung. Wir müssen auch mit dem Dienst interagieren, damit wir dem Objekt eine Start-, eine Stopp- und eine Pause-Methode geben können.

Sie können die Eigenschaften und Methoden eines Objekts anzeigen, indem Sie es an das Cmdlet Get-Member übergeben. Die Objekte, die ein PowerShell-Cmdlet ausgibt, sind weitgehend zugrunde liegende Typen aus dem .NET-Framework. Sie können jedoch eigene Objekte erstellen, wenn Sie eine Sprache wie C # oder den PSObject-Typ verwenden müssen.

Die Pipeline

Es gibt viele Linux-Shells mit einer Pipeline, mit denen Sie den von einem Befehl ausgegebenen Text als Eingabe an den nächsten Befehl in der Pipeline senden können. PowerShell bringt dies auf die nächste Ebene, indem Sie die von einem Cmdlet ausgegebenen Objekte als Eingabe an das nächste Cmdlet in der Pipeline übergeben können. Der Trick besteht darin, zu wissen, welchen Objekttyp ein Cmdlet zurückgibt. Dies ist bei Verwendung des Cmdlets Get-Member sehr einfach.

Get-Service | Get-Member

Aus Gründen, die über den Rahmen dieses Artikels hinausgehen, werden Eigenschaften und Methoden gemeinsam als Klassenmitglieder bezeichnet. Dies erklärt, warum Sie das Cmdlet Get-Member verwenden, um eine Liste aller Methoden und Eigenschaften eines Objekts abzurufen. Das Cmdlet Get-Member gibt jedoch auch eine weitere wichtige Information zurück, den zugrunde liegenden Objekttyp. Im obigen Screenshot sehen wir, dass Get-Service Objekte des Typs zurückgibt:

System.ServiceProcess.ServiceController

Da sich PowerShell mit Objekten und nicht mit Text befasst, können nicht alle Cmdlets mithilfe der Pipeline miteinander verknüpft werden[1]. Das heißt, wir müssen ein Cmdlet finden, das ein System.ServiceProcess.ServiceController-Objekt aus der Pipeline akzeptiert.

Get-Command -ParameterType System.ServiceProcess.ServiceController

Beachten Sie, dass es ein Cmdlet namens Stop-Service gibt. Werfen wir einen Blick auf die Hilfe dafür.

Get-Help – Name Stop-Service

Es sieht so aus, als würde der Parameter InputObject ein Array von ServiceController-Objekten als Eingabe verwenden. Wenn Sie einen Parameter namens InputObject sehen, akzeptiert er normalerweise Eingaben aus der Pipeline. Schauen wir uns jedoch zur Sicherheit die vollständige Hilfe für diesen Parameter an.

Get-Help -Name Stop-Service –Voll

Unser Verdacht war richtig. An diesem Punkt wissen wir also Folgendes:

  • Get-Service gibt ServiceController-Objekte zurück
  • Stop-Service hat einen Parameter namens InputObject, der einen oder mehrere ServiceController als Eingabe akzeptiert.
  • Der Parameter InputObject akzeptiert Pipeline-Eingaben.

Mit diesen Informationen könnten wir Folgendes tun:

Get-Service -Name ‚Apple Mobile Device‘ | Dienst anhalten

Das ist alles für diese Zeit Leute. Das nächste Mal schauen wir uns an, wie wir Objekte in der Pipeline formatieren, filtern und vergleichen können.

Hausaufgaben

Wenn Sie Fragen haben, können Sie mich twittern @ Taybgibboder hinterlasse einfach einen Kommentar.

Continue Reading
Click to comment

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Tendencia