Add-Member
Fügt einer Instanz eines PowerShell-Objekts benutzerdefinierte Eigenschaften und Methoden hinzu.
Syntax
TypeNameSet (Standard)
Add-Member
-InputObject <PSObject>
-TypeName <String>
[-PassThru]
[<CommonParameters>]
NotePropertyMultiMemberSet
Add-Member
[-NotePropertyMembers] <IDictionary>
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[<CommonParameters>]
NotePropertySingleMemberSet
Add-Member
[-NotePropertyName] <String>
[-NotePropertyValue] <Object>
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[<CommonParameters>]
MemberSet
Add-Member
[-MemberType] <PSMemberTypes>
[-Name] <String>
[[-Value] <Object>]
[[-SecondValue] <Object>]
-InputObject <PSObject>
[-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. einen NoteProperty-Member hinzufügen, der eine Beschreibung des Objekts enthält, oder einen ScriptMethod-Member , der ein Skript zum Ändern des Objekts ausführt.
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 Import-Clixml Cmdlet verwenden, um die Instanz des Objekts aus den Informationen neu zu erstellen, die in der exportierten Datei gespeichert sind.
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, lautet der Wert "Fertig".
$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-Member String-Eingabeobjekten keine Typen hinzugefügt werden können, 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 einem FileInfo-Objekt die SizeInMB-Skriptmethode hinzugefügt, die die Dateigröße auf das nächste Megabyte genau 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: Kopieren aller Eigenschaften eines Objekts in eine andere
Diese Funktion kopiert alle Eigenschaften eines Objekts in ein anderes Objekt.
In der foreach Schleife wird das Get-Member Cmdlet verwendet, um die einzelnen Eigenschaften des From-Objekts abzurufen. Die Befehle innerhalb der foreach Schleife werden nacheinander für jede der Eigenschaften ausgeführt.
Der Add-Member Befehl fügt die Eigenschaft des From-Objekts dem To-Objekt als NoteProperty hinzu. Der Wert wird mit dem Parameter Wert kopiert. Er verwendet den Force-Parameter , um Member mit demselben Elementnamen hinzuzufügen.
function Copy-Property ($From, $To)
{
$properties = Get-Member -InputObject $From -MemberType Property
foreach ($p in $properties)
{
$To | Add-Member -MemberType NoteProperty -Name $p.Name -Value $From.$($p.Name) -Force
}
}
Beispiel 6: Erstellen eines benutzerdefinierten Objekts
In diesem Beispiel wird ein Objekt benutzerdefiniertes Objekt erstellt.
Das New-Object Cmdlet erstellt ein PSObject. Im Beispiel wird das PSObject in der $Asset Variablen gespeichert.
Der zweite Befehl verwendet die [ordered] Typzugriffstaste, um ein geordnetes Wörterbuch mit Namen und Werten zu erstellen. Der Befehl speichert das Ergebnis in der $D Variablen.
Der dritte Befehl verwendet den NotePropertyMembers-Parameter des Add-Member Cmdlets, um das Wörterbuch in der $D Variablen dem PSObject hinzuzufügen.
Die TypeName-Eigenschaft weist dem PSObject den neuen Namen Asset zu.
Mit dem letzten Befehl wird das neue Asset-Objekt über die Pipeline an das Get-Member Cmdlet übergeben. Die Ausgabe zeigt, dass das Objekt den Typnamen Asset und die Notizeigenschaften hat, die wir im geordneten Wörterbuch definiert haben.
$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
TypeName: Asset
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Name NoteProperty System.String Name=Server30
PSVersion NoteProperty System.String PSVersion=4.0
System NoteProperty System.String System=Server Core
Parameter
-Force
Gibt an, dass dieses Cmdlet ein neues Element hinzufügt, selbst wenn das Objekt über ein benutzerdefiniertes Element mit demselben Namen verfügt. Sie können den Parameter Force nicht verwenden, um ein Standardelement eines Typs zu ersetzen.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
NotePropertyMultiMemberSet
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
NotePropertySingleMemberSet
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
MemberSet
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | 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 ermittelt.
Parametereigenschaften
| Typ: | PSObject |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch: | True |
| Wert aus Pipeline: | True |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-MemberType
Gibt den Typ des hinzuzufügenden Elements an. Dieser Parameter ist erforderlich. Die zulässigen Werte für diesen Parameter sind:
- NoteProperty
- AliasProperty
- ScriptProperty
- CodeProperty
- ScriptMethod
- CodeMethod
Informationen zu diesen Werten finden Sie unter PSMemberTypes-Enumeration in der MSDN Library.
Nicht alle Objekte weisen jeden Elementtyp auf. Wenn Sie einen Membertyp angeben, über den das Objekt nicht verfügt, gibt PowerShell einen Fehler zurück.
Parametereigenschaften
| Typ: | PSMemberTypes |
| Standardwert: | None |
| Zulässige Werte: | AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
| Aliase: | Typ |
Parametersätze
MemberSet
| Position: | 0 |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-Name
Gibt den Namen des Elements an, das dieses Cmdlet hinzufügt.
Parametereigenschaften
| Typ: | String |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
MemberSet
| Position: | 1 |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-NotePropertyMembers
Gibt eine Hashtabelle oder ein sortiertes Wörterbuch von Notizeigenschaftennamen und -werten an. Geben Sie eine Hashtabelle oder ein Wörterbuch ein, in der die Schlüssel Notizeigenschaftennamen sind und die Werte Notizeigenschaftswerte sind.
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.
Parametereigenschaften
| Typ: | IDictionary |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
NotePropertyMultiMemberSet
| Position: | 0 |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | 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.
Parametereigenschaften
| Typ: | String |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
NotePropertySingleMemberSet
| Position: | 0 |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | 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.
Parametereigenschaften
| Typ: | Object |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
NotePropertySingleMemberSet
| Position: | 1 |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | 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 es sich bei dem Eingabeobjekt jedoch um eine Zeichenfolge handelt, Add-Member kann der Member dem Eingabeobjekt nicht hinzugefügt werden.
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.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-SecondValue
Gibt optionale zusätzliche Informationen zu AliasProperty-, ScriptProperty-, CodeProperty- oder CodeMethod-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 z. B. eine AliasProperty hinzufügen, die einen alternativen Namen für eine Zeichenfolgeneigenschaft bereitstellt, können Sie auch den SecondValue-ParameterSystem.Int32 angeben, um anzugeben, dass der Wert dieser Zeichenfolgeneigenschaft in eine ganze Zahl konvertiert werden soll, wenn der Zugriff mithilfe der entsprechenden AliasProperty erfolgt.
Sie können den SecondValue-Parameter verwenden, um einen zusätzlichen ScriptBlock anzugeben, wenn Sie einen ScriptProperty-Member hinzufügen. Der erste ScriptBlock, der im Parameter Value angegeben ist, wird verwendet, um den Wert einer Variablen abzurufen. Der zweite ScriptBlock, der im Parameter SecondValue angegeben wird, wird verwendet, um den Wert einer Variablen festzulegen.
Parametereigenschaften
| Typ: | Object |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
MemberSet
| Position: | 3 |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | 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.
Parametereigenschaften
| Typ: | String |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
TypeNameSet
| Position: | Named |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
NotePropertyMultiMemberSet
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
NotePropertySingleMemberSet
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
MemberSet
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-Value
Gibt den Anfangswert des hinzugefügten Elements an. Wenn Sie einen AliasProperty-, CodeProperty-, ScriptProperty- oder CodeMethod-Member hinzufügen, können Sie mithilfe des SecondValue-Parameters optionale, zusätzliche Informationen bereitstellen.
Parametereigenschaften
| Typ: | Object |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
MemberSet
| Position: | 2 |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
CommonParameters
Dieses Cmdlet unterstützt die allgemeinen Parameter -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction und -WarningVariable. Weitere Informationen findest du unter about_CommonParameters.
Eingaben
PSObject
Sie können jeden Objekttyp an dieses Cmdlet weiterleiten.
Ausgaben
None or System.Object
Wenn Sie den PassThru-Parameter verwenden, gibt dieses Cmdlet das neu erweiterte Objekt zurück. Andernfalls generiert dieses Cmdlet keine Ausgabe.
Hinweise
Sie können Member nur zu PSObject-Objekten 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.
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.