Freigeben über


Add-Member

Fügt einer Instanz eines PowerShell-Objekts benutzerdefinierte Eigenschaften und Methoden hinzu.

Syntax

Add-Member
   -InputObject <PSObject>
   -TypeName <String>
   [-PassThru]
   [<CommonParameters>]
Add-Member
   -InputObject <PSObject>
   [-TypeName <String>]
   [-Force]
   [-PassThru]
   [-NotePropertyMembers] <IDictionary>
   [<CommonParameters>]
Add-Member
   -InputObject <PSObject>
   [-TypeName <String>]
   [-Force]
   [-PassThru]
   [-NotePropertyName] <String>
   [-NotePropertyValue] <Object>
   [<CommonParameters>]
Add-Member
   -InputObject <PSObject>
   [-MemberType] <PSMemberTypes>
   [-Name] <String>
   [[-Value] <Object>]
   [[-SecondValue] <Object>]
   [-TypeName <String>]
   [-Force]
   [-PassThru]
   [<CommonParameters>]

Beschreibung

Mit dem Cmdlet Add-Member können Sie einer Instanz eines PowerShell-Objekts Member (Eigenschaften und Methoden) hinzufügen. Sie können z. B. ein NoteProperty--Element hinzufügen, das eine Beschreibung des Objekts enthält, oder ein ScriptMethod Member, das ein Skript ausführt, um das Objekt zu ändern.

Um Add-Memberzu verwenden, übergeben Sie das Objekt an Add-Member, oder verwenden Sie den parameter InputObject, um das Objekt anzugeben.

Der parameter MemberType gibt den Typ des Hinzuzufügenden Elements an. Der parameter Name weist dem neuen Element einen Namen zu, und der parameter Value legt den Wert des Elements fest.

Die Eigenschaften und Methoden, die Sie hinzufügen, werden nur der bestimmten Instanz des angegebenen Objekts hinzugefügt. Add-Member ändert den Objekttyp nicht. Verwenden Sie das Cmdlet Add-Type, um einen neuen Objekttyp zu erstellen.

Sie können auch das Cmdlet Export-Clixml verwenden, um die Instanz des Objekts, einschließlich der zusätzlichen Member, in einer Datei zu speichern. Anschließend können Sie das Cmdlet Import-Clixml verwenden, um die Instanz des Objekts aus den Informationen, die in der exportierten Datei gespeichert sind, erneut zu erstellen.

Ab Windows PowerShell 3.0 verfügt Add-Member über neue Features, die das Hinzufügen von Notizeigenschaften zu Objekten erleichtern. Sie können die parameter NotePropertyName und NotePropertyValue verwenden, um eine Notizeigenschaft zu definieren oder den NotePropertyMembers Parameter zu verwenden, der eine Hashtabelle mit Namen und Werten von Notizeigenschaften verwendet.

Ab Windows PowerShell 3.0 ist der PassThru Parameter, der ein Ausgabeobjekt generiert, weniger häufig erforderlich. Add-Member fügt jetzt die neuen Member direkt zum Eingabeobjekt weiterer Typen hinzu. Weitere Informationen finden Sie in der Beschreibung des PassThru- Parameters.

Beispiele

Beispiel 1: Hinzufügen einer Notizeigenschaft zu einem PSObject

Im folgenden Beispiel wird dem FileInfo--Objekt, das die Datei darstellt, eine Test.txt Notizeigenschaft mit dem Wert "Done" hinzugefügt.

Der erste Befehl verwendet das cmdlet Get-ChildItem, um ein FileInfo- Objekt abzurufen, das die Test.txt Datei darstellt. Sie speichert sie in der variablen $a.

Mit dem zweiten Befehl wird dem Objekt in $adie Notizeigenschaft hinzugefügt.

Der dritte Befehl verwendet die Punktnotation, um den Wert der eigenschaft Status des Objekts in $aabzurufen. Wie die Ausgabe zeigt, ist der Wert Done.

$A = Get-ChildItem C:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status

Done

Beispiel 2: Hinzufügen einer Aliaseigenschaft zu einem PSObject

Im folgenden Beispiel wird dem Objekt, das die Datei darstellt, eine Test.txt Aliaseigenschaft hinzugefügt. Die neue Eigenschaft ist ein Alias für die eigenschaft Length.

Der erste Befehl verwendet das cmdlet Get-ChildItem zum Abrufen des Test.txtFileInfo-objekts.

Der zweite Befehl fügt die aliaseigenschaft Size hinzu. Der dritte Befehl verwendet die Punktnotation, um den Wert der neuen Size-Eigenschaft abzurufen.

$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size

2394

Beispiel 3: Hinzufügen einer StringUse-Notizeigenschaft zu einer Zeichenfolge

In diesem Beispiel wird der StringUse Notizeigenschaft zu einer Zeichenfolge hinzugefügt. Da Add-MemberZeichenfolge neingabeobjekte keine Typen hinzufügen kann, können Sie den PassThru-Parameter angeben, um ein Ausgabeobjekt zu generieren. Der letzte Befehl im Beispiel zeigt die neue Eigenschaft an.

In diesem Beispiel wird der parameter NotePropertyMembers verwendet. Der Wert des NotePropertyMembers Parameter ist eine Hashtabelle. Der Schlüssel ist der Name der Notizeigenschaft, StringUse, und der Wert ist der Wert der Notizeigenschaft, Display.

$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse

Display

Beispiel 4: Hinzufügen einer Skriptmethode zu einem FileInfo-Objekt

In diesem Beispiel wird die SizeInMB Skriptmethode zu einem FileInfo--Objekt hinzugefügt, das die Dateigröße auf das nächste MegaByte berechnet. Der zweite Befehl erstellt eine ScriptBlock-, die die statische Methode Round aus dem typ [Math] verwendet, um die Dateigröße auf die zweite Dezimalstelle zu runden.

Der parameter Value verwendet auch die $this automatische Variable, die das aktuelle Objekt darstellt. Die $this Variable ist nur in Skriptblöcken gültig, die neue Eigenschaften und Methoden definieren.

Der letzte Befehl verwendet Punktnotation, um die neue SizeInMB Skriptmethode für das Objekt in der $A Variablen aufzurufen.

$A = Get-ChildItem C:\Temp\test.txt
$S = {[Math]::Round(($this.Length / 1MB), 2)}
$A | Add-Member -MemberType ScriptMethod -Name "SizeInMB" -Value $S
$A.SizeInMB()

0.43

Beispiel 5: Erstellen eines benutzerdefinierten Objekts

In diesem Beispiel wird ein Objekt benutzerdefiniertes Objekt erstellt.

Das cmdlet New-Object erstellt ein PSObject-, das in der variablen $Asset gespeichert ist. Die zugriffstaste [ordered] erstellt ein geordnetes Wörterbuch, das in der variablen $d gespeichert ist. Durch das Anfügen $Asset an Add-Member werden dem Objekt die Schlüssel-Wert-Paare als NoteProperty--Member hinzugefügt. TypeName Parameter weist dem Assetden Typ zu. Das Cmdlet Get-Member zeigt den Typ und die Eigenschaften des Objekts an. Die Eigenschaften werden jedoch in alphabetischer Reihenfolge aufgeführt, nicht in der Reihenfolge, in der sie hinzugefügt wurden.

$Asset = New-Object -TypeName psobject
$d = [ordered]@{Name="Server30"; System="Server Core"; PSVersion="4.0"}
$Asset | Add-Member -NotePropertyMembers $d -TypeName Asset
$Asset | Get-Member -MemberType Properties

TypeName: Asset

Name        MemberType   Definition
----        ----------   ----------
Name        NoteProperty string Name=Server30
PSVersion   NoteProperty string PSVersion=4.0
System      NoteProperty string System=Server Core

$Asset.psobject.Properties | Format-Table Name, MemberType, TypeNameOfValue, Value

Name        MemberType TypeNameOfValue Value
----        ---------- --------------- -----
Name      NoteProperty System.String   Server30
System    NoteProperty System.String   Server Core
PSVersion NoteProperty System.String   4.0

Beim Überprüfen der unformatierten Liste der Eigenschaften werden die Eigenschaften in der Reihenfolge angezeigt, in der sie dem Objekt hinzugefügt wurden. Format-Table wird in diesem Beispiel verwendet, um die Ausgabe ähnlich wie Get-Memberzu erstellen.

Beispiel 6: Hinzufügen einer AliasProperty zu einem Objekt

In diesem Beispiel wird ein benutzerdefiniertes Objekt erstellt, das zwei NoteProperty--Member enthält. Der Typ für eine NoteProperty den Typ des in der Eigenschaft gespeicherten Werts widerspiegelt. In diesem Fall ist die eigenschaft Age eine Zeichenfolge.

$user = [pscustomobject]@{
    Name = 'Doris'
    Age = '20'
}
$addMemberSplat = @{
    MemberType = 'AliasProperty'
    Name = 'IntAge'
    Value = 'Age'
    SecondValue = 'UInt32'
}
$user | Add-Member @addMemberSplat
$user | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name        MemberType    Definition
----        ----------    ----------
IntAge      AliasProperty IntAge = (System.UInt32)Age
Equals      Method        bool Equals(System.Object obj)
GetHashCode Method        int GetHashCode()
GetType     Method        type GetType()
ToString    Method        string ToString()
Age         NoteProperty  string Age=20
Name        NoteProperty  string Name=Doris

PS> $obj

Name  Age IntAge
----  --- ------
Doris 20      20

PS> $obj.Age + 1

201

PS> $obj.IntAge + 1

21

Die IntAge--Eigenschaft ist eine AliasProperty- für die eigenschaft Age, der Typ ist jedoch garantiert uint32.

Beispiel 7: Hinzufügen von Get- und Set-Methoden zu einem benutzerdefinierten Objekt

In diesen Beispielen wird gezeigt, wie Sie Get und Set Methoden definieren, die auf eine tief geschachtelte Eigenschaft zugreifen.

$user = [pscustomobject]@{
    Name      = 'User1'
    Age       = 29
    StartDate = [datetime]'2019-05-05'
    Position  = [pscustomobject]@{
        DepartmentName = 'IT'
        Role = 'Manager'
    }
}
$addMemberSplat = @{
    MemberType = 'ScriptProperty'
    Name = 'Title'
    Value = { $this.Position.Role }                  # getter
    SecondValue = { $this.Position.Role = $args[0] } # setter
}
$user | Add-Member @addMemberSplat
$user | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name        MemberType     Definition
----        ----------     ----------
Equals      Method         bool Equals(System.Object obj)
GetHashCode Method         int GetHashCode()
GetType     Method         type GetType()
ToString    Method         string ToString()
Age         NoteProperty   int Age=29
Name        NoteProperty   string Name=User1
Position    NoteProperty   System.Management.Automation.PSCustomObject Position=@{DepartmentName=IT; Role=Manager}
StartDate   NoteProperty   datetime StartDate=5/5/2019 12:00:00 AM
Title       ScriptProperty System.Object Title {get= $this.Position.Role ;set= $this.Position.Role = $args[0] ;}

$user.Title = 'Dev Manager'

Name      : User1
Age       : 29
StartDate : 5/5/2019 12:00:00 AM
Position  : @{DepartmentName=IT; Role=Dev Manager}
Title     : Dev Manager

Beachten Sie, dass die eigenschaft Title ein ScriptProperty- ist, das über eine Get und Set-Methode verfügt. Wenn wir der Eigenschaft Title einen neuen Wert zuweisen, wird die Set-Methode aufgerufen und ändert den Wert der eigenschaft Role in der eigenschaft Position.

Parameter

-Force

Standardmäßig kann Add-Member kein neues Element hinzufügen, wenn das Objekt bereits über ein Element mit demselben verfügt. Wenn Sie den Parameter Force verwenden, ersetzt Add-Member das vorhandene Element durch das neue Element. Sie können den Parameter "Force" nicht verwenden, um ein Standardelement eines Typs zu ersetzen.

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-InputObject

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 Ausdruck ein, der die Objekte abruft.

Typ:PSObject
Position:Named
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-MemberType

Gibt den Typ des hinzuzufügenden Elements an. Dieser Parameter ist erforderlich. Die zulässigen Werte für diesen Parameter sind:

  • AliasProperty
  • CodeMethod
  • CodeProperty
  • NoteProperty
  • ScriptMethod
  • ScriptProperty

Informationen zu diesen Werten finden Sie unter PSMemberTypes Enumeration im PowerShell SDK.

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

Typ:PSMemberTypes
Aliase:Type
Zulässige Werte:AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Name

Gibt den Namen des Elements an, das dieses Cmdlet hinzufügt.

Typ:String
Position:1
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-NotePropertyMembers

Gibt ein Hashtable- oder geordnetes Wörterbuch an, das Schlüsselwertpaar enthält, das NoteProperty- Namen und deren Werte darstellt. Weitere Informationen zu Hashtabellen und geordneten Wörterbüchern in PowerShell finden Sie unter about_Hash_Tables.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

Typ:IDictionary
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-NotePropertyName

Gibt den Namen der Notizeigenschaft an.

Verwenden Sie diesen Parameter mit dem parameter NotePropertyValue. Dieser Parameter ist optional.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

Typ:String
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-NotePropertyValue

Gibt den Wert der Notizeigenschaft an.

Verwenden Sie diesen Parameter mit dem parameter NotePropertyName. Dieser Parameter ist optional.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

Typ:Object
Position:1
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-PassThru

Gibt ein Objekt zurück, das das Element darstellt, mit dem Sie arbeiten. Standardmäßig generiert dieses Cmdlet keine Ausgabe.

Für die meisten Objekte fügt Add-Member dem Eingabeobjekt die neuen Elemente hinzu. Wenn das Eingabeobjekt jedoch eine Zeichenfolge ist, kann Add-Member das Element nicht dem Eingabeobjekt hinzufügen. Verwenden Sie für diese Objekte den PassThru--Parameter, um ein Ausgabeobjekt zu erstellen.

In Windows PowerShell 2.0 Add-Member member nur dem PSObject Wrapper von Objekten und nicht dem Objekt hinzugefügt. Verwenden Sie den PassThru--Parameter, um ein Ausgabeobjekt für jedes Objekt zu erstellen, das über einen PSObject- Wrapper verfügt.

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-SecondValue

Gibt optionale zusätzliche Informationen zu AliasProperty-, ScriptProperty-oder CodeProperty- Membern an.

Wenn sie beim Hinzufügen eines AliasProperty-verwendet wird, muss dieser Parameter ein Datentyp sein. Eine Konvertierung in den angegebenen Datentyp wird dem Wert des AliasProperty-hinzugefügt. Wenn Sie beispielsweise eine AliasProperty- hinzufügen, die einen alternativen Namen für eine Zeichenfolgeneigenschaft bereitstellt, können Sie auch einen SecondValue Parameter von System.Int32 angeben, um anzugeben, dass der Wert dieser Zeichenfolgeneigenschaft bei Verwendung der entsprechenden AliasProperty-in eine ganze Zahl konvertiert werden soll.

Bei einem CodeProperty-muss der Wert ein Verweis auf eine Methode sein, die einen Set Accessor implementiert. Verwenden Sie die GetMethod() Methode eines Typverweises, um einen Verweis auf eine Methode abzurufen. Die Methode muss einen einzelnen Parameter verwenden, der ein PSObject-ist. Der Get Accessor wird mithilfe des Value-Parameters zugewiesen.

Bei einem ScriptProperty-muss der Wert ein Skriptblock sein, der einen Set Accessor implementiert. Der Get Accessor wird mithilfe des Value-Parameters zugewiesen.

Typ:Object
Position:3
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-TypeName

Gibt einen Namen für den Typ an.

Wenn es sich bei dem Typ um eine Klasse im System Namespace oder einen Typ handelt, der über eine Typbeschleuniger verfügt, können Sie den kurzen Namen des Typs eingeben. Andernfalls ist der vollständige Typname erforderlich. Dieser Parameter ist nur wirksam, wenn das InputObject- ein PSObject-ist.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Value

Gibt den Anfangswert des hinzugefügten Elements an. Wenn Sie ein AliasProperty-, CodeProperty-oder ScriptProperty- Element hinzufügen, können Sie zusätzliche Informationen mithilfe des SecondValue--Parameters bereitstellen.

  • Bei einem AliasProperty-muss der Wert der Name der Eigenschaft sein, die aliast wird.
  • Bei einem CodeMethod-muss der Wert ein Verweis auf eine Methode sein. Verwenden Sie die GetMethod() Methode eines Typverweises, um einen Verweis auf eine Methode abzurufen.
  • Bei einem CodeProperty-muss der Wert ein Verweis auf eine Methode sein, die einen Get Accessor implementiert. Verwenden Sie die GetMethod() Methode eines Typverweises, um einen Verweis auf eine Methode abzurufen. Referenz. Die Methode muss einen einzelnen Parameter verwenden, der ein PSObject-ist. Der Set Accessor wird mit dem parameter SecondValue zugewiesen.
  • Bei einem ScriptMethod-muss der Wert ein Skriptblock sein.
  • Bei einem ScriptProperty-muss der Wert ein Skriptblock sein, der einen Get Accessor implementiert. Der Set Accessor wird mit dem parameter SecondValue zugewiesen.
Typ:Object
Position:2
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

Eingaben

PSObject

Sie können jedes Objekt an dieses Cmdlet weiterleiten.

Ausgaben

None

Standardmäßig gibt dieses Cmdlet keine Ausgabe zurück.

Object

Wenn Sie den parameter PassThru verwenden, gibt dieses Cmdlet das neu erweiterte Objekt zurück.

Hinweise

Sie können Elemente nur zu PSObject- Typobjekten hinzufügen. Um zu bestimmen, ob ein Objekt ein PSObject--Objekt ist, verwenden Sie den -is-Operator. Um beispielsweise ein Objekt zu testen, das in der $obj Variablen gespeichert ist, geben Sie $obj -is [psobject]ein.

PSObject- Typobjekte verwalten ihre Mitgliederliste in der Reihenfolge, in der die Member dem Objekt hinzugefügt wurden.

Die Namen der MemberType, Name, Valueund SecondValue Parameter sind optional. Wenn Sie die Parameternamen weglassen, müssen die werte für nicht benannte Parameter in dieser Reihenfolge angezeigt werden: MemberType, Name, Valueund SecondValue.

Wenn Sie die Parameternamen einschließen, können die Parameter in beliebiger Reihenfolge angezeigt werden.

Sie können die $this automatische Variable in Skriptblöcken verwenden, die die Werte neuer Eigenschaften und Methoden definieren. Die $this Variable bezieht sich auf die Instanz des Objekts, der die Eigenschaften und Methoden hinzugefügt werden. Weitere Informationen zur $this Variablen finden Sie unter about_Automatic_Variables.