Add-Member
Voegt aangepaste eigenschappen en methoden toe aan een exemplaar van een PowerShell-object.
Syntaxis
Add-Member
-InputObject <PSObject>
-TypeName <String>
[-PassThru]
[<CommonParameters>]
Add-Member
[-NotePropertyMembers] <IDictionary>
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[<CommonParameters>]
Add-Member
[-NotePropertyName] <String>
[-NotePropertyValue] <Object>
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[<CommonParameters>]
Add-Member
[-MemberType] <PSMemberTypes>
[-Name] <String>
[[-Value] <Object>]
[[-SecondValue] <Object>]
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[<CommonParameters>]
Description
Met de cmdlet Add-Member
kunt u leden (eigenschappen en methoden) toevoegen aan een exemplaar van een PowerShell-object. U kunt bijvoorbeeld een NoteProperty-lid toevoegen dat een beschrijving van het object of een ScriptMethod-lid dat een script uitvoert om het object te wijzigen.
Als u Add-Member
wilt gebruiken, sluist u het object door naar Add-Member
of gebruikt u de parameter InputObject om het object op te geven.
De parameter MemberType geeft het type lid aan dat u wilt toevoegen. De parameter Name wijst een naam toe aan het nieuwe lid en de parameter Waarde stelt de waarde van het lid in.
De eigenschappen en methoden die u toevoegt, worden alleen toegevoegd aan het specifieke exemplaar van het object dat u opgeeft.
Add-Member
wijzigt het objecttype niet. Gebruik de cmdlet Add-Type
om een nieuw objecttype te maken.
U kunt ook de Export-Clixml
cmdlet gebruiken om het exemplaar van het object, inclusief de extra leden, op te slaan in een bestand. Vervolgens kunt u de cmdlet Import-Clixml
gebruiken om het exemplaar van het object opnieuw te maken op basis van de gegevens die zijn opgeslagen in het geëxporteerde bestand.
Vanaf Windows PowerShell 3.0 beschikt Add-Member
over nieuwe functies waarmee u gemakkelijker notitie-eigenschappen aan objecten kunt toevoegen.
U kunt de parameters NotePropertyName en NotePropertyValue parameters gebruiken om een notitieeigenschap te definiëren of de parameter NotePropertyMembers te gebruiken. Hierbij wordt een hashtabel met namen en waarden van notitieeigenschappen gebruikt.
Vanaf Windows PowerShell 3.0 is ook de parameter PassThru, die een uitvoerobject genereert, minder vaak nodig.
Add-Member
voegt de nieuwe leden nu rechtstreeks toe aan het invoerobject van meer typen. Zie de beschrijving van de parameter PassThru voor meer informatie.
Voorbeelden
Voorbeeld 1: Een notitieeigenschap toevoegen aan een PSObject
In het volgende voorbeeld wordt een eigenschap Status notitie met de waarde Gereed toegevoegd aan het FileInfo-object dat het Test.txt
-bestand vertegenwoordigt.
De eerste opdracht gebruikt de Get-ChildItem
-cmdlet om een FileInfo--object op te halen dat het Test.txt
-bestand vertegenwoordigt. De variabele wordt opgeslagen in de $a
variabele.
Met de tweede opdracht wordt de notitieeigenschap toegevoegd aan het object in $a
.
De derde opdracht maakt gebruik van punt notatie om de waarde op te halen van de eigenschap Status van het object in $a
. Zoals in de uitvoer wordt weergegeven, is de waarde 'Gereed'.
$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status
Done
Voorbeeld 2: Een aliaseigenschap toevoegen aan een PSObject
In het volgende voorbeeld wordt een eigenschap Size alias toegevoegd aan het object dat het Test.txt
-bestand vertegenwoordigt. De nieuwe eigenschap is een alias voor de eigenschap Length.
De eerste opdracht maakt gebruik van de cmdlet Get-ChildItem
om het Test.txt
FileInfo--object op te halen.
Met de tweede opdracht wordt de eigenschap Size alias toegevoegd. De derde opdracht maakt gebruik van punt notatie om de waarde van de nieuwe eigenschap Grootte op te halen.
$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size
2394
Voorbeeld 3: een eigenschap StringUse-notitie toevoegen aan een tekenreeks
In dit voorbeeld wordt de eigenschap StringUse notitie toegevoegd aan een tekenreeks.
Omdat Add-Member
geen typen kunt toevoegen aan tekenreeks invoerobjecten, kunt u de parameter PassThru opgeven om een uitvoerobject te genereren. Met de laatste opdracht in het voorbeeld wordt de nieuwe eigenschap weergegeven.
In dit voorbeeld wordt de parameter NotePropertyMembers gebruikt. De waarde van de parameter NotePropertyMembers is een hash-tabel. De sleutel is de naam van de notitieeigenschap, StringUseen de waarde is de waarde van de notitieeigenschap, Weergave-.
$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse
Display
Voorbeeld 4: Een scriptmethode toevoegen aan een FileInfo-object
In dit voorbeeld wordt de scriptmethode SizeInMB toegevoegd aan een FileInfo--object waarmee de bestandsgrootte wordt berekend op de dichtstbijzijnde MegaByte. Met de tweede opdracht maakt u een ScriptBlock- die gebruikmaakt van de statische methode Round van het type [math]
om de bestandsgrootte af te ronden op de tweede decimale plaats.
De parameter Waarde maakt ook gebruik van de $This
automatische variabele, die het huidige object vertegenwoordigt. De $This
variabele is alleen geldig in scriptblokken waarmee nieuwe eigenschappen en methoden worden gedefinieerd.
De laatste opdracht maakt gebruik van punt notatie om de nieuwe SizeInMB scriptmethode op het object in de $A
variabele aan te roepen.
$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
Voorbeeld 5: Alle eigenschappen van een object naar een ander object kopiëren
Met deze functie worden alle eigenschappen van het ene object gekopieerd naar een ander object.
De foreach
-lus maakt gebruik van de Get-Member
-cmdlet om elk van de eigenschappen van het van object op te halen. De opdrachten in de foreach
lus worden uitgevoerd in reeksen op elk van de eigenschappen.
Met de opdracht Add-Member
wordt de eigenschap van het Van-object toegevoegd aan het Aan-object als een NoteProperty-. De waarde wordt gekopieerd met behulp van de parameter Value. Hierbij wordt de parameter Force gebruikt om leden met dezelfde lidnaam toe te voegen.
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
}
}
Voorbeeld 6: Een aangepast object maken
In dit voorbeeld wordt een Asset aangepast object gemaakt.
Met de cmdlet New-Object
wordt een PSObject-gemaakt. In het voorbeeld wordt de PSObject- opgeslagen in de variabele $Asset
.
De tweede opdracht maakt gebruik van de [ordered]
typeversneller om een geordende woordenlijst met namen en waarden te maken. Met de opdracht wordt het resultaat opgeslagen in de $D
variabele.
De derde opdracht maakt gebruik van de parameter NotePropertyMembers van de cmdlet Add-Member
om de woordenlijst in de variabele $D
toe te voegen aan de PSObject-.
De eigenschap TypeName wijst een nieuwe naam, Asset, toe aan de PSObject-.
Met de laatste opdracht wordt het nieuwe Asset-object naar de Get-Member
-cmdlet uitgevoerd. In de uitvoer ziet u dat het object een typenaam heeft van Asset en de notitie-eigenschappen die we hebben gedefinieerd in de geordende woordenlijst.
$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
Parameters
-Force
Geeft aan dat deze cmdlet een nieuw lid toevoegt, zelfs als het object een aangepast lid met dezelfde naam heeft. U kunt de parameter Forceren niet gebruiken om een standaardlid van een type te vervangen.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-InputObject
Hiermee geeft u het object waaraan het nieuwe lid wordt toegevoegd. Voer een variabele in die de objecten bevat of typ een opdracht of expressie waarmee de objecten worden opgehaald.
Type: | PSObject |
Position: | Named |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-MemberType
Hiermee geeft u het type lid dat moet worden toegevoegd. Deze parameter is vereist. De acceptabele waarden voor deze parameter zijn:
- NoteProperty
- AliasProperty
- ScriptProperty
- CodeProperty
- ScriptMethod
- CodeMethod
Zie opsomming PSMemberTypes Enumeration in de MSDN-bibliotheek voor meer informatie over deze waarden.
Niet alle objecten hebben elk type lid. Als u een lidtype opgeeft dat het object niet heeft, retourneert PowerShell een fout.
Type: | PSMemberTypes |
Aliassen: | Type |
Geaccepteerde waarden: | AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Name
Hiermee geeft u de naam op van het lid dat door deze cmdlet wordt toegevoegd.
Type: | String |
Position: | 1 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-NotePropertyMembers
Hiermee geeft u een hash-tabel of geordende woordenlijst met namen en waarden van notitie-eigenschappen op. Typ een hash-tabel of woordenlijst waarin de sleutels eigenschapsnamen noteren en de waarden eigenschapswaarden zijn.
Zie about_Hash_Tablesvoor meer informatie over hashtabellen en geordende woordenlijsten in PowerShell.
Deze parameter is geïntroduceerd in Windows PowerShell 3.0.
Type: | IDictionary |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-NotePropertyName
Hiermee geeft u de naam van de notitie-eigenschap.
Gebruik deze parameter met de parameter NotePropertyValue. Deze parameter is optioneel.
Deze parameter is geïntroduceerd in Windows PowerShell 3.0.
Type: | String |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-NotePropertyValue
Hiermee geeft u de waarde van de notitie-eigenschap.
Gebruik deze parameter met de parameter NotePropertyName. Deze parameter is optioneel.
Deze parameter is geïntroduceerd in Windows PowerShell 3.0.
Type: | Object |
Position: | 1 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-PassThru
Retourneert een object dat het item aangeeft waarmee u werkt. Deze cmdlet genereert standaard geen uitvoer.
Voor de meeste objecten voegt Add-Member
de nieuwe leden toe aan het invoerobject.
Wanneer het invoerobject echter een tekenreeks is, kan Add-Member
het lid niet toevoegen aan het invoerobject.
Gebruik voor deze objecten de parameter PassThru om een uitvoerobject te maken.
In Windows PowerShell 2.0 Add-Member
alleen leden toegevoegd aan de PSObject wrapper van objecten, niet aan het object.
Gebruik de parameter PassThru om een uitvoerobject te maken voor elk object met een PSObject wrapper.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-SecondValue
Hiermee geeft u optionele aanvullende informatie op over AliasProperty, ScriptProperty, CodePropertyof CodeMethod leden.
Als u een AliasProperty-toevoegt, moet deze parameter een gegevenstype zijn. Een conversie naar het opgegeven gegevenstype wordt toegevoegd aan de waarde van de AliasProperty-.
Als u bijvoorbeeld een AliasProperty- met een alternatieve naam voor een tekenreekseigenschap toevoegt, kunt u ook een SecondValue-parameter opgeven parameter van System.Int32 om aan te geven dat de waarde van die tekenreekseigenschap moet worden geconverteerd naar een geheel getal wanneer deze wordt geopend met behulp van de bijbehorende AliasProperty-.
U kunt de parameter SecondValue gebruiken om een extra ScriptBlock- op te geven bij het toevoegen van een ScriptProperty- lid. De eerste ScriptBlock, die is opgegeven in de parameter Waarde, wordt gebruikt om de waarde van een variabele op te halen. De tweede ScriptBlock, opgegeven in de parameter SecondValue, wordt gebruikt om de waarde van een variabele in te stellen.
Type: | Object |
Position: | 3 |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-TypeName
Hiermee geeft u een naam voor het type.
Wanneer het type een klasse is in de System-naamruimte of een type met een typeversneller, kunt u de korte naam van het type invoeren. Anders is de volledige typenaam vereist. Deze parameter is alleen van kracht wanneer de InputObject- een PSObject-is.
Deze parameter is geïntroduceerd in Windows PowerShell 3.0.
Type: | String |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Value
Hiermee geeft u de initiële waarde van het toegevoegde lid. Als u een AliasProperty-, CodeProperty, ScriptProperty of CodeMethod lid toevoegt, kunt u optioneel aanvullende informatie opgeven met behulp van de parameter SecondValue.
Type: | Object |
Position: | 2 |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
Invoerwaarden
U kunt elk objecttype doorsluisen naar deze cmdlet.
Uitvoerwaarden
None or System.Object
Wanneer u de parameter PassThru gebruikt, retourneert deze cmdlet het zojuist uitgebreide object. Anders genereert deze cmdlet geen uitvoer.
Notities
U kunt alleen leden toevoegen aan PSObject-objecten. Als u wilt bepalen of een object een PSObject-object is, gebruikt u de operator -is
.
Als u bijvoorbeeld een object wilt testen dat is opgeslagen in de variabele $obj
, typt u $obj -is [PSObject]
.
De namen van de MemberType, Name, Valueen SecondValue parameters zijn optioneel. Als u de parameternamen weglaat, moeten de niet-benoemde parameterwaarden in deze volgorde worden weergegeven: MemberType, Naam, Waardeen SecondValue.
Als u de parameternamen opneemt, kunnen de parameters in elke volgorde worden weergegeven.
U kunt de $this
automatische variabele gebruiken in scriptblokken waarmee de waarden van nieuwe eigenschappen en methoden worden gedefinieerd.
De $this
variabele verwijst naar het exemplaar van het object waaraan de eigenschappen en methoden worden toegevoegd. Zie $this
voor meer informatie over de variabele .