Add-Member
Lägger till anpassade egenskaper och metoder i en instans av ett PowerShell-objekt.
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>]
Description
Med Add-Member
cmdleten kan du lägga till medlemmar (egenskaper och metoder) i en instans av ett PowerShell-objekt. Du kan till exempel lägga till en NoteProperty-medlem som innehåller en beskrivning av objektet eller en ScriptMethod-medlem som kör ett skript för att ändra objektet.
Om du vill använda Add-Member
kan du skicka objektet till Add-Member
eller använda parametern InputObject för att ange objektet.
Parametern MemberType anger vilken typ av medlem du vill lägga till. Parametern Namn tilldelar ett namn till den nya medlemmen och parametern Värde anger värdet för medlemmen.
De egenskaper och metoder som du lägger till läggs bara till i den specifika instansen av objektet som du anger. Add-Member
ändrar inte objekttypen. Om du vill skapa en ny objekttyp använder du cmdleten Add-Type
.
Du kan också använda cmdleten Export-Clixml
för att spara instansen av objektet, inklusive de ytterligare medlemmarna, i en fil. Sedan kan du använda cmdleten Import-Clixml
för att återskapa instansen av objektet från den information som lagras i den exporterade filen.
Från och med Windows PowerShell 3.0 Add-Member
har nya funktioner som gör det enklare att lägga till anteckningsegenskaper i objekt. Du kan använda parametrarna NotePropertyName och NotePropertyValue för att definiera en anteckningsegenskap eller använda parametern NotePropertyMembers , som tar en hashtabell med anteckningsegenskapsnamn och värden.
Från och med Windows PowerShell 3.0 behövs dessutom parametern PassThru , som genererar ett utdataobjekt, mindre ofta. Add-Member
lägger nu till de nya medlemmarna direkt till indataobjektet för fler typer. Mer information finns i parameterbeskrivningen för PassThru .
Exempel
Exempel 1: Lägg till en anteckningsegenskap i en PSObject
I följande exempel läggs en statusanteckningsegenskap med värdet "Klar" till FileInfo-objektet som representerar Test.txt
filen.
Det första kommandot använder cmdleten Get-ChildItem
för att hämta ett FileInfo-objekt som representerar Test.txt
filen. Den sparar den i variabeln $a
.
Det andra kommandot lägger till anteckningsegenskapen i objektet i $a
.
Det tredje kommandot använder punktkommentering för att hämta värdet för objektets statusegenskap i $a
. Som utdata visar är Done
värdet .
$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status
Done
Exempel 2: Lägga till en aliasegenskap i en PSObject
I följande exempel läggs en egenskap för storleksalias till objektet som representerar Test.txt
filen. Den nya egenskapen är ett alias för egenskapen Length .
Det första kommandot använder cmdleten Get-ChildItem
för att hämta Test.txt
FileInfo-objektet .
Det andra kommandot lägger till egenskapen Storleksalias. Det tredje kommandot använder punktkommentering för att hämta värdet för den nya egenskapen Storlek .
$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size
2394
Exempel 3: Lägg till en StringUse-anteckningsegenskap i en sträng
Det här exemplet lägger till egenskapen StringUse note i en sträng. Eftersom Add-Member
det inte går att lägga till typer i Strängindataobjekt kan du ange parametern PassThru för att generera ett utdataobjekt. Det sista kommandot i exemplet visar den nya egenskapen.
I det här exemplet används parametern NotePropertyMembers . Värdet för parametern NotePropertyMembers är en hash-tabell. Nyckeln är namnet på anteckningsegenskapen StringUse och värdet är egenskapen note, Display.
$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse
Display
Exempel 4: Lägga till en skriptmetod i ett FileInfo-objekt
I det här exemplet läggs metoden SizeInMB-skript till i ett FileInfo-objekt som beräknar filstorleken till närmaste MegaByte. Det andra kommandot skapar en ScriptBlock som använder den statiska metoden Round från [math]
typen för att avrunda filstorleken till den andra decimalen.
Parametern Value använder också den $This
automatiska variabeln, som representerar det aktuella objektet. Variabeln $This
är endast giltig i skriptblock som definierar nya egenskaper och metoder.
Det sista kommandot använder punktkommentering för att anropa den nya SizeInMB-skriptmetoden för objektet i variabeln $A
.
$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
Exempel 5: Skapa ett anpassat objekt
I det här exemplet skapas ett anpassat objekt för tillgångar .
Cmdleten New-Object
skapar en PSObject som sparas i variabeln $Asset
. Typacceleratorn [ordered]
skapar en ordnad ordlista som lagras i variabeln $d
.
Piping $Asset
för att lägga till Add-Member
nyckel/värde-paren i ordlistan till objektet som NoteProperty-medlemmar . Parametern TypeName tilldelar typen Asset
till PSObject. Cmdleten Get-Member
visar objektets typ och egenskaper. Egenskaperna visas dock i alfabetisk ordning, inte i den ordning som de lades till.
$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
När du granskar raw-listan med egenskaper visas egenskaperna i den ordning som de lades till i objektet. Format-Table
används i det här exemplet för att skapa utdata som liknar Get-Member
.
Exempel 6: Lägga till ett AliasProperty i ett objekt
I det här exemplet skapar vi ett anpassat objekt som innehåller två NoteProperty-medlemmar . Typen för en NoteProperty visar typen av värde som lagras i egenskapen. I det här fallet är egenskapen Ålder en sträng.
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
IntAge-egenskapen är ett AliasProperty för egenskapen Ålder, men typen är garanterad uint32.
Exempel 7: Lägga till get- och set-metoder i ett anpassat objekt
De här exemplen visar hur du definierar get - och set-metoder som har åtkomst till en djupt kapslad egenskap.
$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
Observera att egenskapen Title är en ScriptProperty som har en Get and Set-metod . När vi tilldelar ett nytt värde till egenskapen Title anropas metoden Set och ändrar värdet för egenskapen Roll i egenskapen Position.
Parametrar
-Force
Som standard Add-Member
kan du inte lägga till en ny medlem om objektet redan har en medlem med samma.
När du använder force-parametern Add-Member
ersätter den befintliga medlemmen med den nya medlemmen.
Du kan inte använda force-parametern för att ersätta en standardmedlem av en typ.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-InputObject
Anger det objekt som den nya medlemmen läggs till i. Ange en variabel som innehåller objekten eller skriv ett kommando eller uttryck som hämtar objekten.
Typ: | PSObject |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | True |
Godkänn jokertecken: | False |
-MemberType
Anger vilken typ av medlem som ska läggas till. Den här parametern krävs. De acceptabla värdena för den här parametern är:
- AliasProperty
- CodeMethod
- CodeProperty
- NoteProperty
- ScriptMethod
- ScriptProperty
Information om dessa värden finns i PSMemberTypes Enumeration i PowerShell SDK.
Alla objekt har inte alla typer av medlemmar. Om du anger en medlemstyp som objektet inte har returnerar PowerShell ett fel.
Typ: | PSMemberTypes |
Alias: | Type |
Godkända värden: | AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Name
Anger namnet på medlemmen som den här cmdleten lägger till.
Typ: | String |
Position: | 1 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-NotePropertyMembers
Anger en hashtable- eller ordnad ordlista som innehåller nyckel/värde-par som representerar NoteProperty-namn och deras värden. Mer information om hash-tabeller och ordnade ordlistor i PowerShell finns i about_Hash_Tables.
Den här parametern introducerades i Windows PowerShell 3.0.
Typ: | IDictionary |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-NotePropertyName
Anger namnet på anteckningsegenskapen.
Använd den här parametern med parametern NotePropertyValue . Den här parametern är valfri.
Den här parametern introducerades i Windows PowerShell 3.0.
Typ: | String |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-NotePropertyValue
Anger värdet för anteckningsegenskapen.
Använd den här parametern med parametern NotePropertyName . Den här parametern är valfri.
Den här parametern introducerades i Windows PowerShell 3.0.
Typ: | Object |
Position: | 1 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-PassThru
Returnerar ett objekt som representerar det objekt som du arbetar med. Som standard genererar den här cmdleten inga utdata.
För de flesta objekt Add-Member
lägger du till de nya medlemmarna i indataobjektet. Men när indataobjektet är en sträng Add-Member
kan du inte lägga till medlemmen i indataobjektet. För dessa objekt använder du parametern PassThru för att skapa ett utdataobjekt.
I Windows PowerShell 2.0 Add-Member
har medlemmar endast lagts till i PSObject-omslutningen av objekt, inte till objektet. Använd parametern PassThru för att skapa ett utdataobjekt för alla objekt som har en PSObject-omslutning .
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-SecondValue
Anger valfri ytterligare information om AliasProperty-, ScriptProperty- eller CodeProperty-medlemmar .
Om den här parametern används när du lägger till ett AliasProperty måste den vara en datatyp. En konvertering till den angivna datatypen läggs till i värdet för AliasProperty. Om du till exempel lägger till ett AliasProperty som ger ett alternativt namn för en strängegenskap kan du även ange en SecondValue-parameter för System.Int32 för att ange att värdet för strängegenskapen ska konverteras till ett heltal när du använder motsvarande AliasProperty.
För en CodeProperty måste värdet vara en referens till en metod som implementerar en Set-accessor . GetMethod()
Använd metoden för en typreferens för att hämta en referens till en metod. Metoden måste ta en enskild parameter som är en PSObject. Hämta-accessorn tilldelas med parametern Värde.
För en ScriptProperty måste värdet vara ett skriptblock som implementerar en Set-accessor . Hämta-accessorn tilldelas med parametern Värde.
Typ: | Object |
Position: | 3 |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-TypeName
Anger ett namn för typen.
När typen är en klass i systemnamnområdet eller en typ som har en typaccelerator kan du ange det korta namnet på typen. Annars krävs det fullständiga typnamnet. Den här parametern gäller endast när InputObject är en PSObject.
Den här parametern introducerades i Windows PowerShell 3.0.
Typ: | String |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Value
Anger det ursprungliga värdet för den tillagda medlemmen. Om du lägger till en AliasProperty-, CodeProperty- eller ScriptProperty-medlem kan du ange ytterligare information med parametern SecondValue .
- För ett AliasProperty måste värdet vara namnet på den egenskap som aliaseras.
- För en CodeMethod måste värdet vara en referens till en metod.
GetMethod()
Använd metoden för en typreferens för att hämta en referens till en metod. - För en CodeProperty måste värdet vara en referens till en metod som implementerar en Get-accessor .
GetMethod()
Använd metoden för en typreferens för att hämta en referens till en metod. hänvisning. Metoden måste ta en enskild parameter som är en PSObject. Set-åtkomstorn tilldelas med parametern SecondValue. - För en ScriptMethod måste värdet vara ett skriptblock.
- För en ScriptProperty måste värdet vara ett skriptblock som implementerar en Get-accessor . Set-åtkomstorn tilldelas med parametern SecondValue.
Typ: | Object |
Position: | 2 |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
Indata
Du kan skicka valfritt objekt till den här cmdleten.
Utdata
None
Som standard returnerar den här cmdleten inga utdata.
När du använder parametern PassThru returnerar den här cmdleten det nyligen utökade objektet.
Kommentarer
Du kan bara lägga till medlemmar i PSObject-typobjekt . Använd operatorn -is
för att avgöra om ett objekt är ett PSObject-objekt. Om du till exempel vill testa ett objekt som lagras i variabeln $obj
skriver du $obj -is [psobject]
.
PSObject-typobjekt behåller sin lista över medlemmar i den ordning som medlemmarna lades till i objektet.
Namnen på parametrarna MemberType, Name, Value och SecondValue är valfria. Om du utelämnar parameternamnen måste de namnlösa parametervärdena visas i den här ordningen: MemberType, Name, Value och SecondValue.
Om du inkluderar parameternamnen kan parametrarna visas i valfri ordning.
Du kan använda den $this
automatiska variabeln i skriptblock som definierar värdena för nya egenskaper och metoder. Variabeln $this
refererar till instansen av objektet som egenskaperna och metoderna läggs till i. Mer information om variabeln finns i $this
about_Automatic_Variables.