Dela via


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

Med cmdleten Add-Member 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-Memberkan du skicka objektet till Add-Membereller använda parametern InputObject för att ange objektet.

Parametern MemberType anger vilken typ av medlem du vill lägga till. Parametern Name tilldelar ett namn till den nya medlemmen och parametern Value 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 ytterligare medlemmar, 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 har Add-Member 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 i indataobjektet för fler typer. Mer information finns i parameterbeskrivningen PassThru.

Exempel

Exempel 1: Lägg till en anteckningsegenskap i en PSObject

I följande exempel läggs egenskapen Status med värdet "Klar" till FileInfo-objekt 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 egenskapen Status för objektet i $a. Som utdata visar är värdet "Klar".

$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 egenskapen Size alias 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 objektet Test.txtFileInfo.

Det andra kommandot lägger till egenskapen Size alias. Det tredje kommandot använder punktkommentering för att hämta värdet för den nya egenskapen Size.

$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 inte kan lägga till typer i String-indataobjekt 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, StringUseoch värdet är egenskapen note, Visa.

$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

Det här exemplet lägger till skriptmetoden SizeInMB till 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 den [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 på objektet i $A variabeln.

$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: Kopiera alla egenskaper för ett objekt till en annan

Den här funktionen kopierar alla egenskaper för ett objekt till ett annat objekt.

I foreach-loopen används cmdleten Get-Member för att hämta var och en av egenskaperna för objektet From. Kommandona i foreach-loopen utförs i serie på var och en av egenskaperna.

Kommandot Add-Member lägger till egenskapen för objektet From till objektet To som en NoteProperty-. Värdet kopieras med parametern Value. Den använder parametern Force för att lägga till medlemmar med samma medlemsnamn.

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

Exempel 6: Skapa ett anpassat objekt

I det här exemplet skapas ett tillgång anpassat objekt.

Cmdleten New-Object skapar en PSObject-. I exemplet sparas PSObject- i variabeln $Asset.

Det andra kommandot använder [ordered] typaccelerator för att skapa en ordnad ordlista med namn och värden. Kommandot sparar resultatet i variabeln $D.

Det tredje kommandot använder parametern NotePropertyMembers i cmdleten Add-Member för att lägga till ordlistan i variabeln $D i PSObject-. Egenskapen TypeName tilldelar ett nytt namn, Tillgång, till PSObject-.

Det sista kommandot skickar det nya objektet Asset till cmdleten Get-Member. Utdata visar att objektet har ett typnamn för tillgång och de anteckningsegenskaper som vi definierade i den ordnade ordlistan.

$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

Parametrar

-Force

Anger att den här cmdleten lägger till en ny medlem även om objektet har en anpassad medlem med samma namn. Du kan inte använda parametern Force 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 godtagbara värdena för den här parametern är:

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

Information om dessa värden finns i PSMemberTypes Enumeration i MSDN-biblioteket.

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, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All
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 hash-tabell eller ordnad ordlista med anteckningsegenskapsnamn och värden. Skriv en hash-tabell eller ordlista där nycklarna är anteckningsegenskapsnamn och värdena är egenskapsvärden för anteckningar.

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 lägger Add-Member till de nya medlemmarna i indataobjektet. Men när indataobjektet är en sträng kan Add-Member 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 endast lagt till medlemmar i PSObject omslutning av objekt, inte till objektet. Använd parametern PassThru för att skapa ett utdataobjekt för alla objekt som har en PSObject wrapper.

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, CodePropertyeller CodeMethod medlemmar.

Om den används när du lägger till ett AliasProperty-måste den här parametern 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 en AliasProperty- som ger ett alternativt namn för en strängegenskap, kan du också 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-.

Du kan använda parametern SecondValue för att ange ytterligare en ScriptBlock- när du lägger till en ScriptProperty- medlem. Den första ScriptBlock, som anges i parametern Value, används för att hämta värdet för en variabel. Den andra ScriptBlock, som anges i parametern SecondValue, används för att ange värdet för en variabel.

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 namnområdet System 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 AliasProperty, CodeProperty, ScriptProperty eller CodeMethod medlem kan du ange valfri ytterligare information med hjälp av parametern SecondValue.

Typ:Object
Position:2
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

Indata

PSObject

Du kan skicka valfri objekttyp till den här cmdleten.

Utdata

None or System.Object

När du använder parametern PassThru returnerar den här cmdleten det nyligen utökade objektet. Annars genererar den här cmdleten inga utdata.

Kommentarer

Du kan bara lägga till medlemmar i PSObject- objekt. Om du vill ta reda på om ett objekt är ett PSObject--objekt använder du operatorn -is.

Om du till exempel vill testa ett objekt som lagras i variabeln $obj skriver du $obj -is [PSObject].

Namnen på parametrarna MemberType, Name, Valueoch SecondValue är valfria. Om du utelämnar parameternamnen måste de namnlösa parametervärdena visas i följande ordning: MemberType, Name, Valueoch 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 det objekt som egenskaperna och metoderna läggs till i. Mer information om variabeln $this finns i about_Automatic_Variables.