Fügt der Instanz eines Windows PowerShell-Objekts ein benutzerdefiniertes Element hinzu.

Syntax

Add-Member [-MemberType] {<AliasProperty> | <CodeProperty> | <Property> | <NoteProperty> | <ScriptProperty> | <Properties> | <PropertySet> | <Method> | <CodeMethod> | <ScriptMethod> | <Methods> | <ParameterizedProperty> | <MemberSet> | <Event> | <All>} [-Name] <string> -InputObject <psobject> [[-Wert] <Object>] [[-SecondValue] <Object>] [-Force] [-PassThru] [<CommonParameters>]

Beschreibung

Mit dem Cmdlet "Add-Member" wird der Instanz eines Windows PowerShell-Objekts ein benutzerdefiniertes Element hinzugefügt. Die folgenden Elementtypen können hinzugefügt werden: AliasProperty, CodeProperty, NoteProperty, ScriptProperty, PropertySet, CodeMethod, MemberSet und ScriptMethod. Den Anfangswert des Elements legen Sie mit dem Value-Parameter fest. Für "AliasProperty", "ScriptProperty", "CodeProperty " und "CodeMethod" können Sie mit dem SecondValue-Parameter zusätzliche Informationen angeben.

Die zusätzlichen Elemente werden der Instanz des Objekts hinzugefügt, die Sie über die Pipeline an Add-Member übergeben oder mit dem InputObject-Parameter angeben. Das zusätzliche Element ist nur solange verfügbar, wie diese Instanz vorhanden ist. Mit dem Cmdlet "Export-Clixml" können Sie die Instanz einschließlich der zusätzlichen Elemente in einer Datei speichern. Anhand der in dieser Datei gespeicherten Informationen kann die Instanz des Objekts mit dem Cmdlet "Import-Clixml" neu erstellt werden.

Parameter

-Force

Fügt ein neues Element hinzu, auch wenn ein Element mit demselben Namen bereits vorhanden ist. Kann nicht für Hauptelemente eines Typs verwendet werden.

Erforderlich?

false

Position?

named

Standardwert

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-InputObject <psobject>

Gibt das Objekt an, dem das neue Element hinzugefügt wird. Geben Sie eine Variable ein, die die Objekte enthält, oder geben Sie einen Befehl oder einen Ausdruck ein, mit dem die Objekte abgerufen werden.

Erforderlich?

true

Position?

named

Standardwert

Pipelineeingaben akzeptieren?

true (ByValue)

Platzhalterzeichen akzeptieren?

false

-MemberType <PSMemberTypes>

Gibt den Typ des hinzuzufügenden Elements an. Dieser Parameter ist erforderlich.

Die gültigen Werte für diesen Parameter lauten:

– AliasProperty: Eine Eigenschaft, die einen neuen Namen für eine vorhandene Eigenschaft definiert.

– CodeMethod: Eine Methode, die auf eine statische Methode einer Microsoft .NET Framework-Klasse verweist.

– CodeProperty: Eine Eigenschaft, die auf eine statische Eigenschaft einer .NET Framework-Klasse verweist.

– MemberSet: Eine vordefinierte Auflistung von Eigenschaften und Methoden, z. B. PSBase, PSObject und PSTypeNames.

– Method: Eine Methode des zugrunde liegenden .NET Framework-Objekts.

– NoteProperty: Eine Eigenschaft mit einem statischen Wert.

– ParameterizedProperty: Eine Eigenschaft, die Parameter und Parameterwerte akzeptiert.

– Property: Eine Eigenschaft des zugrunde liegenden .NET Framework-Objekts.

– PropertySet: Eine vordefinierte Auflistung von Objekteigenschaften.

– ScriptMethod: Eine Methode, deren Wert die Ausgabe eines Skripts ist.

– ScriptProperty: Eine Eigenschaft, deren Wert die Ausgabe eines Skripts ist.

– All: Ruft alle Elementtypen ab.

– Methods: Ruft alle Typen von Methoden des Objekts ab (z. B. method, codemethod, scriptmethod).

– Properties: Ruft alle Typen von Eigenschaften des Objekts ab (z. B. property, codeproperty, aliasproperty, scriptproperty).

Nicht alle Objekte verfügen über jeden Elementtyp. Wenn Sie einen Elementtyp angeben, über den das Objekt nicht verfügt, gibt Windows PowerShell einen Fehler zurück.

Der Elementtyp Event ist für Add-Member ungültig.

Erforderlich?

true

Position?

1

Standardwert

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

true

-Name <string>

Gibt den Namen des hinzuzufügenden Elements an.

Wenn Sie den Parameternamen "Name" auslassen, muss der Wert des -Name-Parameters der zweite unbenannte Parameterwert im Befehl sein. Wenn Sie den Parameternamen angeben, können die Parameter in beliebiger Reihenfolge angegeben werden.

Erforderlich?

true

Position?

2

Standardwert

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-PassThru

Übergibt das neu erweiterte Objekt an die Pipeline. Standardmäßig wird von diesem Cmdlet keine Ausgabe generiert.

Erforderlich?

false

Position?

named

Standardwert

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-SecondValue <Object>

Gibt optionale zusätzliche Informationen über Elemente von "AliasProperty", "ScriptProperty", "CodeProperty " oder "CodeMethod" an. Dieser Parameter muss ein Datentyp sein, wenn er beim Hinzufügen einer "AliasProperty" verwendet wird. Dem Wert der "AliasProperty" wird eine Konvertierung (Umwandlung) in den angegebenen Datentyp hinzugefügt. Wenn Sie z. B. eine "AliasProperty" hinzufügen, die einen alternativen Namen für eine Zeichenfolgeneigenschaft bereitstellt, können Sie auch einen SecondValue-Parameter mit dem Typ "System.Int32" festlegen, um anzugeben, dass der Wert der Zeichenfolgeneigenschaft beim Zugriff über die entsprechende "AliasProperty" in eine ganze Zahl konvertiert werden soll.

Mit dem SecondValue-Parameter können Sie einen zusätzlichen "ScriptBlock" angeben, wenn Sie ein ScriptProperty-Element hinzufügen. In diesem Fall wird der erste im Value-Parameter angegebene ScriptBlock verwendet, um den Wert einer Variablen abzurufen. Der zweite ScriptBlock, der im SecondValue-Parameter angegeben ist, wird verwendet, um den Wert einer Variablen festzulegen.

Erforderlich?

false

Position?

4

Standardwert

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-Wert <Object>

Gibt den Anfangswert des hinzugefügten Elements an. Wenn Sie ein Element von "AliasProperty", "CodeProperty " oder "CodeMethod" hinzufügen, können Sie mit dem SecondValue-Parameter optionale zusätzliche Informationen angeben.

Erforderlich?

false

Position?

3

Standardwert

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

<CommonParameters>

Dieses Cmdlet unterstützt die folgenden allgemeinen Parameter: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer und -OutVariable. Weitere Informationen finden Sie unter about_Commonparameters.

Eingaben und Ausgaben

Der Eingabetyp ist der Typ der Objekte, die über die Pipeline an das Cmdlet übergeben werden können. Der Rückgabetyp ist der Typ der Objekte, die das Cmdlet zurückgibt.

Eingaben

System.Management.Automation.PSObject

Sie können beliebige Objekttypen über die Pipeline an Add-Member übergeben.

Ausgaben

Keiner oder System.Object

Wenn Sie den PassThru-Parameter verwenden, wird von Add-Member das neu erweiterte Objekt zurückgegeben. Andernfalls wird von diesem Cmdlet keine Ausgabe generiert.

Hinweise

Nur "PSObject"-Objekten können Elemente hinzugefügt werden. Um zu bestimmen, ob ein Objekt ein PSObject-Objekt ist, verwenden Sie den Operator "is". Um z. B. ein in der Variablen "$obj" gespeichertes Objekt zu testen, geben Sie "$obj -is [PSObject]" ein.

Die Namen der Parameter "MemberType", "Name", "Value" und "SecondValue" sind optional. Wenn Sie die Parameternamen weglassen, müssen die unbenannten Parameterwerte folgende Reihenfolge aufweisen: "MemberType", "Name", "Value", "SecondValue". Wenn Sie die Parameternamen angeben, können die Parameter in beliebiger Reihenfolge angegeben werden.

Beispiel 1

C:\PS>$a = (get-childitem)[0]

C:\PS> $a | add-member -membertype noteproperty -name Status -value done

C:\PS> $a | get-member -type noteproperty

   TypeName: System.IO.DirectoryInfo

Name          MemberType   Definition
----          ----------   ----------
PSChildName   NoteProperty System.String PSChildName=Co
PSDrive       NoteProperty System.Management.Automation
PSIsContainer NoteProperty System.Boolean PSIsContainer
PSParentPath  NoteProperty System.String PSParentPath=M
PSPath        NoteProperty System.String PSPath=Microso
PSProvider    NoteProperty System.Management.Automation
Status        NoteProperty System.String Status=done

Beschreibung
-----------
Mit diesen Befehlen wird einem von Get-ChildItem zurückgegebenen DirectoryInfo-Objekt eine Status-Notizeigenschaft hinzugefügt und der Wert "done" zugewiesen. 

Mit dem ersten Befehl wird das erste Objekt abgerufen, das Get-Childitem zurückgibt (Index 0).

Mit dem zweiten Befehl wird die Notizeigenschaft hinzugefügt.

Mit dem dritten Befehl wird das aktualisierte Objekt mit einem Pipelineoperator (|) an das Cmdlet "Get-Member" gesendet. Aus der Ausgabe ist ersichtlich, dass die Eigenschaft hinzugefügt wurde.






Beispiel 2

C:\PS>$a = (get-childitem)[0]

C:\PS> $a | add-member -membertype aliasproperty -name FileLength -value Length 

C:\PS> $a.filelength

Beschreibung
-----------
Mit diesen Befehlen wird die FileLength Aliaseigenschaft einem von Get-ChildItem zurückgegebenen DirectoryInfo-Objekt hinzugefügt. Die neue Eigenschaft ist ein Alias für die Length-Eigenschaft. 

Mit dem ersten Befehl wird das erste Objekt abgerufen, das Get-Childitem zurückgibt (Index 0).

Mit dem zweiten Befehl wird die Aliaseigenschaft hinzugefügt.

Mit dem dritten Befehl wird der Wert der neuen FileLength-Eigenschaft zurückgegeben.






Beispiel 3

C:\PS>$a = "a string"

C:\PS> $a = $a | add-member -membertype noteproperty -name StringUse -value Display -passthru

C:\PS> $a.StringUse

Beschreibung
-----------
Mit diesen Befehlen wird die StringUse-Eigenschaft einer Zeichenfolge hinzugefügt. Da die Zeichenfolge kein PSObject-Objekt ist, müssen Sie den PassThru-Parameter in den Befehl einschließen, um die erweiterte Zeichenfolge in der Variablen zu speichern. Mit dem letzten Befehl im Beispiel wird die neue Eigenschaft angezeigt.






Beispiel 4

C:\PS>$a = "this is a string"

C:\PS> $a = add-member -inputobject $a -membertype scriptmethod -name words `
-value {$this.split()} -passthru

C:\PS> $a.words()

Beschreibung
-----------
Mit diesen Befehlen wird einem Zeichenfolgenobjekt eine Skriptmethode hinzugefügt. Die Skriptmethode macht die Split()-Methode der System.String-Klasse der .NET Framework-Klassenbibliothek verfügbar, um die einzelnen Wörter in einer Zeichenfolge durch den Aufruf der Methode mit dem Namen "Words" für das Zeichenfolgenobjekt bequem zurückgeben zu können. Beachten Sie, dass der PassThru-Parameter angegeben wurde, um die Rückgabe des erweiterten Zeichenfolgenobjekts durch "Add-Member" als Ausgabe zu erzwingen, die in der Variablen "$a" gespeichert wird.






Beispiel 5

C:\PS>$event = get-eventlog -logname system -newest 1

C:\PS> $event.TimeWritten | get-member

C:\PS> add-member -inputobject $event -membertype aliasproperty -name When `
-value TimeWritten -secondvalue System.String

C:\PS> $event.When | get-member

Beschreibung
-----------
Mit diesen Befehlen wird einem vom Cmdlet "Get-EventLog" zurückgegebenen EventLogEntry-Objekt eine AliasProperty hinzugefügt. Der Name der AliasProperty lautet "When" und ist ein Alias für die TimeWritten-Eigenschaft des Objekts. Mit dem SecondValue-Parameter wird angegeben, dass der Eigenschaftenwert in den Typ "System.String" konvertiert werden soll, wenn mit der AliasProperty auf ihn zugegriffen wird. Die TimeWritten-Eigenschaft ist ein DateTime-Objekt.

Im ersten Befehl wird das letzte Ereignis aus dem Systemereignisprotokoll mit dem Cmdlet "Get-EventLog" abgerufen und in der Variablen "$event" gespeichert. 

Der zweite Befehl greift auf die TimeWritten-Eigenschaft dieses Ereignisses zu und übergibt es über die Pipeline an das Cmdlet "Get-Member", um zu veranschaulichen, dass es sich bei der Eigenschaft um einen DateTime-Typ handelt. Anschließend wird Add-Member verwendet, um der Instanz des in der Variablen "$event" gespeicherten EventLogEntry-Objekts ein AliasProperty-Element hinzuzufügen. Mit dem Name-Parameter wird der Name das neuen Elements auf "When" festgelegt, und mit dem Value-Parameter wird angegeben, dass der Name ein Alias für die TimeWritten-Eigenschaft ist. Mit dem SecondValue-Parameter wird angegeben, dass der bei Verwendung dieses neuen Elements zurückgegebene Wert vom ursprünglichen Typ "System.DateTime" in den Typ "System.String" umgewandelt werden soll. 

Der dritte Befehl greift auf das neue Element zu und übergibt es über die Pipeline an das Cmdlet "Get-Member", um zu bestätigen, dass es vom Typ "System.String" ist.






Beispiel 6

C:\PS>function Copy-Property ($From, $To)

{
  foreach ($p in Get-Member -InputObject $From -MemberType Property)
  {
     Add-Member -InputObject $To -MemberType NoteProperty -Name $p.Name 
     -Value $From.$($p.Name) -Force

     $To.$($p.Name) = $From.$($p.Name)
   }
}

Beschreibung
-----------
Diese Funktion kopiert alle Eigenschaften eines Objekts in ein anderes Objekt.

Im ersten Befehl der Funktion wird der Funktionsname deklariert, und ihre Parameter werden aufgeführt. 

In der Foreach-Schleife werden die einzelnen Eigenschaften des From-Objekts mit dem Cmdlet "Get-Member" abgerufen. Die Befehle in der Foreach-Schleife werden der Reihe nach für jede der Eigenschaften ausgeführt.

Mit dem Befehl "Add-Member" wird dem To-Objekt die Eigenschaft des From-Objekts als NoteProperty hinzugefügt. Durch Verwendung des Force-Parameters können mit dem Befehl Elemente hinzugefügt werden, die den gleichen Elementnamen aufweisen.

Im letzten Befehl der Funktion wird der neuen Eigenschaft der Name der ursprünglichen Eigenschaft zugewiesen.






Siehe auch




Inhaltsverzeichnis