Delen via


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
   -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>]

Description

Met de Add-Member cmdlet 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 bevat waarmee een script wordt uitgevoerd om het object te wijzigen.

Als u het object wilt gebruiken Add-Member, doorsluist u het object naar Add-Memberof 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 Add-Type cmdlet om een nieuw objecttype te maken.

U kunt de Export-Clixml cmdlet ook gebruiken om het exemplaar van het object, inclusief de extra leden, op te slaan in een bestand. Vervolgens kunt u de Import-Clixml cmdlet gebruiken om het exemplaar van het object opnieuw te maken op basis van de informatie die is opgeslagen in het geëxporteerde bestand.

Vanaf Windows PowerShell 3.0 Add-Member beschikt u over nieuwe functies waarmee u gemakkelijker notitie-eigenschappen aan objecten kunt toevoegen. U kunt de parameters NotePropertyName en NotePropertyValue gebruiken om een notitie-eigenschap te definiëren of de parameter NotePropertyMembers te gebruiken, die een hash-tabel met eigenschapsnamen en -waarden gebruikt.

Vanaf Windows PowerShell 3.0 is ook de PassThru-parameter , die een uitvoerobject genereert, minder vaak nodig. Add-Member voegt nu de nieuwe leden rechtstreeks toe aan het invoerobject van meer typen. Zie de beschrijving van de PassThru-parameter voor meer informatie.

Voorbeelden

Voorbeeld 1: Een notitieeigenschap toevoegen aan een PSObject

In het volgende voorbeeld wordt een eigenschap Statusnotitie toegevoegd met de waarde 'Gereed' 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. Deze 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 van de eigenschap Status van het object in $aop te halen. Zoals in de uitvoer wordt weergegeven, is Donede waarde .

$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 aliaseigenschap Size toegevoegd aan het object dat het Test.txt bestand vertegenwoordigt. De nieuwe eigenschap is een alias voor de eigenschap Length .

De eerste opdracht gebruikt de Get-ChildItem cmdlet om het Test.txt FileInfo-object op te halen.

Met de tweede opdracht wordt de aliaseigenschap Grootte 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 u geen typen kunt toevoegen aan tekenreeksinvoerobjecten , 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, StringUse en 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 SizeInMB-scriptmethode 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 [math] type om de bestandsgrootte af te ronden naar 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 aan te roepen voor het object in de $A variabele.

$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: Een aangepast object maken

In dit voorbeeld wordt een aangepast assetobject gemaakt.

De New-Object cmdlet maakt een PSObject dat wordt opgeslagen in de $Asset variabele. De [ordered] typeversneller maakt een geordende woordenlijst die is opgeslagen in de $d variabele. Piping $Asset om Add-Member de sleutel-waardeparen in de woordenlijst toe te wijzen aan het object als NoteProperty-leden . De parameter TypeName wijst het type Asset toe aan het PSObject. De Get-Member cmdlet toont het type en de eigenschappen van het object. De eigenschappen worden echter in alfabetische volgorde weergegeven, niet in de volgorde waarin ze zijn toegevoegd.

$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

Als u de onbewerkte lijst met eigenschappen inspecteert, worden de eigenschappen weergegeven in de volgorde waarin ze aan het object zijn toegevoegd. Format-Table wordt in dit voorbeeld gebruikt om uitvoer te maken die vergelijkbaar is met Get-Member.

Voorbeeld 6: Een AliasProperty toevoegen aan een object

In dit voorbeeld maken we een aangepast object met twee NoteProperty-leden . Het type voor een NoteProperty weerspiegelt het type van de waarde die is opgeslagen in de eigenschap. In dit geval is de eigenschap Leeftijd een tekenreeks.

PS> $obj = [pscustomobject]@{
      Name = 'Doris'
      Age = '20'
}
PS> $obj | Add-Member -MemberType AliasProperty -Name 'intAge' -Value age -SecondValue uint32
PS> $obj | 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

De eigenschap intAge is een AliasProperty voor de eigenschap Age , maar het type is gegarandeerd uint32.

Voorbeeld 7: Get- en set-methoden toevoegen aan een aangepast object

In deze voorbeelden ziet u hoe u get- en setmethoden definieert die toegang hebben tot een diep geneste eigenschap.

$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

U ziet dat de eigenschap Title een ScriptProperty is die een Get and Set-methode heeft. Wanneer we een nieuwe waarde toewijzen aan de eigenschap Titel , wordt de methode Set aangeroepen en wordt de waarde van de eigenschap Rol in de eigenschap Position gewijzigd.

Parameters

-Force

Het is standaard Add-Member niet mogelijk om een nieuw lid toe te voegen als het object al een lid met hetzelfde lid heeft. Wanneer u de parameter Force gebruikt, Add-Member vervangt u het bestaande lid door het nieuwe lid. U kunt de parameter Force 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 aanvaardbare waarden voor deze parameter zijn:

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

Zie DE opsomming PSMemberTypes in de PowerShell SDK 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, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty
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 hashtabel of geordende woordenlijst op die sleutel-waardepaar bevat die NoteProperty-namen en de bijbehorende waarden vertegenwoordigen. Zie about_Hash_Tables voor 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 Add-Member voegt u de nieuwe leden toe aan het invoerobject. Als het invoerobject echter een tekenreeks is, Add-Member kan het lid niet worden toegevoegd aan het invoerobject. Gebruik voor deze objecten de parameter PassThru om een uitvoerobject te maken.

In Windows PowerShell 2.0 zijn 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 over AliasProperty, ScriptProperty of CodeProperty-leden.

Als deze parameter wordt gebruikt bij het toevoegen van een AliasProperty, moet deze parameter een gegevenstype zijn. Er wordt een conversie naar het opgegeven gegevenstype toegevoegd aan de waarde van aliasproperty. Als u bijvoorbeeld een AliasProperty toevoegt die een alternatieve naam voor een tekenreekseigenschap biedt, kunt u ook een SecondValue-parameter van System.Int32 opgeven 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.

Voor een CodeProperty moet de waarde een verwijzing zijn naar een methode waarmee een settoegangsfunctie wordt geïmplementeerd. Gebruik de GetMethod() methode van een typereferentie om een verwijzing naar een methode op te halen. De methode moet één parameter hebben die een PSObject is. De get-accessor wordt toegewezen met behulp van de parameter Waarde .

Voor een ScriptProperty moet de waarde een scriptblok zijn waarmee een settoegangsfunctie wordt geïmplementeerd. De get-accessor wordt toegewezen met behulp van de parameter Waarde .

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 systeemnaamruimte 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 het 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- of ScriptProperty-lid toevoegt, kunt u aanvullende informatie opgeven met behulp van de parameter SecondValue.

  • Voor een AliasProperty moet de waarde de naam zijn van de eigenschap die als alias wordt gebruikt.
  • Voor een CodeMethod moet de waarde een verwijzing naar een methode zijn. Gebruik de GetMethod() methode van een typereferentie om een verwijzing naar een methode op te halen.
  • Voor een CodeProperty moet de waarde een verwijzing zijn naar een methode waarmee een Get-accessor wordt geïmplementeerd. Gebruik de GetMethod() methode van een typereferentie om een verwijzing naar een methode op te halen. referentie. De methode moet één parameter hebben die een PSObject is. De set-accessor wordt toegewezen met behulp van de parameter SecondValue.
  • Voor een ScriptMethod moet de waarde een scriptblok zijn.
  • Voor een ScriptProperty moet de waarde een scriptblok zijn waarmee een Get-accessor wordt geïmplementeerd. De set-accessor wordt toegewezen met behulp van de parameter SecondValue.
Type:Object
Position:2
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

Invoerwaarden

PSObject

U kunt elk object doorsluisen naar deze cmdlet.

Uitvoerwaarden

None

Deze cmdlet retourneert standaard geen uitvoer.

Object

Wanneer u de parameter PassThru gebruikt, retourneert deze cmdlet het zojuist uitgebreide object.

Notities

U kunt alleen leden toevoegen aan psObject-typeobjecten . Gebruik de -is operator om te bepalen of een object een PSObject-object is. Als u bijvoorbeeld een object wilt testen dat is opgeslagen in de $obj variabele, typt u $obj -is [psobject].

PsObject-typeobjecten onderhouden hun lijst met leden in de volgorde waarin de leden aan het object zijn toegevoegd.

De namen van de parameters MemberType, Name, Value en SecondValue zijn optioneel. Als u de parameternamen weglaat, moeten de niet-benoemde parameterwaarden worden weergegeven in deze volgorde: MemberType, Name, Value en SecondValue.

Als u de parameternamen opneemt, kunnen de parameters in elke volgorde worden weergegeven.

U kunt de $this automatische variabele in scriptblokken gebruiken 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 about_Automatic_Variables voor meer informatie over de $this variabele.