Sdílet prostřednictvím


Add-Member

Přidá vlastní vlastnosti a metody do instance objektu PowerShellu.

Syntaxe

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

Rutina Add-Member umožňuje přidat členy (vlastnosti a metody) do instance objektu PowerShellu. Můžete například přidat NoteProperty člen, který obsahuje popis objektu nebo ScriptMethod člen, který spouští skript pro změnu objektu.

Chcete-li použít Add-Member, přeskakujte objekt do Add-Membernebo pomocí parametru InputObject určete objekt.

Parametr MemberType označuje typ člena, který chcete přidat. Parametr Name přiřadí novému členu název a parametr Hodnota nastaví hodnotu člena.

Vlastnosti a metody, které přidáte, se přidají pouze do konkrétní instance objektu, který zadáte. Add-Member typ objektu nezmění. Pokud chcete vytvořit nový typ objektu, použijte rutinu Add-Type.

Pomocí rutiny Export-Clixml můžete také uložit instanci objektu, včetně dalších členů, do souboru. Potom můžete pomocí rutiny Import-Clixml znovu vytvořit instanci objektu z informací uložených v exportovaného souboru.

Počínaje Windows PowerShellem 3.0 má Add-Member nové funkce, které usnadňují přidávání vlastností poznámek k objektům. Pomocí parametrů NotePropertyName a NotePropertyValue můžete definovat vlastnost poznámky nebo použít NotePropertyMembers parametr, který přebírá tabulku hash názvů a hodnot vlastností poznámek.

Počínaje Windows PowerShellem 3.0 je také méně často potřeba parametr PassThru, který generuje výstupní objekt. Add-Member teď nové členy přidá přímo do vstupního objektu více typů. Další informace najdete v popisu parametru PassThru.

Příklady

Příklad 1: Přidání vlastnosti poznámky do objektu PSObject

Následující příklad přidá Status note vlastnost s hodnotou "Done" do FileInfo objektu, který představuje Test.txt soubor.

První příkaz pomocí rutiny Get-ChildItem získá objekt FileInfo představující Test.txt soubor. Uloží ho do proměnné $a.

Druhý příkaz přidá vlastnost poznámky k objektu v $a.

Třetí příkaz používá tečku k získání hodnoty Status vlastnost objektu v $a. Jak ukazuje výstup, hodnota je Done.

$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status

Done

Příklad 2: Přidání vlastnosti aliasu do objektu PSObject

Následující příklad přidá Size alias vlastnost objektu, který představuje Test.txt soubor. Nová vlastnost je alias pro vlastnost Length.

První příkaz používá rutinu Get-ChildItem k získání objektu Test.txtFileInfo.

Druhý příkaz přidá vlastnost aliasu Size. Třetí příkaz pomocí zápisu tečky získá hodnotu nové vlastnosti Size.

$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size

2394

Příklad 3: Přidání vlastnosti StringUse note do řetězce

Tento příklad přidá vlastnost StringUse poznámky do řetězce. Protože Add-Member nelze přidat typy do vstupních objektů String, můžete zadat parametr PassThru pro vygenerování výstupního objektu. Poslední příkaz v příkladu zobrazí novou vlastnost.

Tento příklad používá NotePropertyMembers parametr. Hodnota parametru NotePropertyMembers je tabulka hash. Klíč je název vlastnosti poznámky, StringUsea hodnota je hodnota vlastnosti poznámky, Display.

$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse

Display

Příklad 4: Přidání metody skriptu do objektu FileInfo

Tento příklad přidá metodu skriptu SizeInMB do objektu FileInfo, který vypočítá velikost souboru na nejbližší MegaByte. Druhý příkaz vytvoří ScriptBlock, který používá statickou metodu Round z typu [math] k zaokrouhlení velikosti souboru na druhé desetinné místo.

Parametr Value používá také automatickou proměnnou $This, která představuje aktuální objekt. Proměnná $This je platná pouze v blocích skriptu, které definují nové vlastnosti a metody.

Poslední příkaz používá zápis tečky k volání nové SizeInMB metoda skriptu objektu v proměnné $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

Příklad 5: Vytvoření vlastního objektu

Tento příklad vytvoří Asset vlastní objekt.

Rutina New-Object vytvoří PSObject, který je uložený v proměnné $Asset. Akcelerátor typu [ordered] vytvoří uspořádaný slovník, který je uložený v proměnné $d. Piping $Asset to Add-Member adds the key-value pairs in the dictionary to the object as NoteProperty members. TypeName parametr přiřadí typ AssetPSObject. Rutina Get-Member zobrazuje typ a vlastnosti objektu. Vlastnosti jsou však uvedeny v abecedním pořadí, nikoli v pořadí, v jakém byly přidány.

$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

Kontrola nezpracovaného seznamu vlastností zobrazuje vlastnosti v pořadí, v jakém byly přidány do objektu. Format-Table se v tomto příkladu používá k vytvoření výstupu podobného Get-Member.

Příklad 6: Přidání AliasProperty do objektu

V tomto příkladu vytvoříme vlastní objekt, který obsahuje dva NoteProperty členy. Typ NoteProperty odráží typ hodnoty uložené ve vlastnosti. V tomto případě je vlastnost Age řetězec.

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

Vlastnost intAge je AliasProperty pro vlastnost Age, ale typ je zaručen uint32.

Příklad 7: Přidání metod Get a set do vlastního objektu

Tento příklad ukazuje, jak definovat Get a Set metody, které přistupují k hluboko vnořené vlastnosti.

$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

Všimněte si, že vlastnost název je ScriptProperty, která má metodu Get a Set. Když přiřadíme novou hodnotu vlastnosti Title, volá se metoda Set a změní hodnotu vlastnosti Role ve vlastnosti Pozice.

Parametry

-Force

Ve výchozím nastavení Add-Member nemůže přidat nového člena, pokud objekt již má člena se stejným. Pokud použijete parametr Force, Add-Member nahradí existujícího člena novým členem. K nahrazení standardního člena typu nemůžete použít parametr Force.

Typ:SwitchParameter
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-InputObject

Určuje objekt, do kterého je přidán nový člen. Zadejte proměnnou, která obsahuje objekty, nebo zadejte příkaz nebo výraz, který objekty získá.

Typ:PSObject
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-MemberType

Určuje typ člena, který chcete přidat. Tento parametr je povinný. Přijatelné hodnoty pro tento parametr jsou:

  • AliasProperty
  • CodeMethod
  • CodeProperty
  • PoznámkaProperty
  • SkriptMethod
  • ScriptProperty

Informace o těchto hodnotách najdete v tématu PSMemberTypes – výčet v sadě PowerShell SDK.

Ne všechny objekty mají každý typ členu. Pokud zadáte typ člena, který objekt nemá, PowerShell vrátí chybu.

Typ:PSMemberTypes
Aliasy:Type
Přípustné hodnoty:AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Name

Určuje název člena, kterého tato rutina přidá.

Typ:String
Position:1
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-NotePropertyMembers

Určuje hashtable nebo seřazený slovník, který obsahuje dvojici klíč-hodnota představující NoteProperty názvy a jejich hodnoty. Další informace o tabulkách hash a seřazených slovníkech v PowerShellu najdete v tématu about_Hash_Tables.

Tento parametr byl představen ve Windows PowerShellu 3.0.

Typ:IDictionary
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-NotePropertyName

Určuje název vlastnosti poznámky.

Tento parametr použijte s parametrem NotePropertyValue. Tento parametr je volitelný.

Tento parametr byl představen ve Windows PowerShellu 3.0.

Typ:String
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-NotePropertyValue

Určuje hodnotu vlastnosti poznámky.

Tento parametr použijte s parametrem NotePropertyName. Tento parametr je volitelný.

Tento parametr byl představen ve Windows PowerShellu 3.0.

Typ:Object
Position:1
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-PassThru

Vrátí objekt představující položku, se kterou pracujete. Ve výchozím nastavení tato rutina negeneruje žádný výstup.

U většiny objektů Add-Member přidá nové členy do vstupního objektu. Pokud je vstupním objektem řetězec, Add-Member nemůže přidat člena do vstupního objektu. Pro tyto objekty vytvořte výstupní objekt pomocí parametru PassThru.

V prostředí Windows PowerShell 2.0 Add-Member přidali členy pouze do objektu PSObject obálky objektů, nikoli objektu. Pomocí parametru PassThru vytvořte výstupní objekt pro libovolný objekt, který má obálku PSObject.

Typ:SwitchParameter
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-SecondValue

Určuje volitelné další informace o AliasProperty, ScriptPropertynebo CodeProperty členy.

Pokud se používá při přidávání AliasProperty, tento parametr musí být datový typ. Převod na zadaný datový typ se přidá k hodnotě AliasProperty. Pokud například přidáte AliasProperty, který poskytuje alternativní název pro vlastnost řetězce, můžete také zadat SecondValue parametr System.Int32 indikovat, že hodnota této řetězcové vlastnosti by měla být převedena na celé číslo při přístupu pomocí odpovídající AliasProperty.

Pro CodePropertymusí být hodnota odkaz na metodu, která implementuje Set přístup. Pomocí GetMethod() metody odkazu na typ získáte odkaz na metodu. Metoda musí mít jeden parametr, který je PSObject. Přístupové objekty Get se přiřazují pomocí parametru hodnota.

Pro ScriptPropertymusí být hodnota blok skriptu, který implementuje Set accessor. Přístupové objekty Get se přiřazují pomocí parametru hodnota.

Typ:Object
Position:3
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-TypeName

Určuje název typu.

Pokud je typ třídou v System oboru názvů nebo typ, který má akcelerátor typů, můžete zadat krátký název typu. V opačném případě se vyžaduje úplný název typu. Tento parametr je efektivní pouze v případě, že InputObject je PSObject.

Tento parametr byl představen ve Windows PowerShellu 3.0.

Typ:String
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Value

Určuje počáteční hodnotu přidaného člena. Pokud přidáte AliasProperty, CodePropertynebo ScriptProperty člen, můžete zadat další informace pomocí SecondValue parametru.

  • Pro AliasPropertymusí být hodnota název vlastnosti aliased.
  • Pro CodeMethodmusí být hodnota odkazem na metodu. Pomocí GetMethod() metody odkazu na typ získáte odkaz na metodu.
  • Pro CodePropertymusí být hodnota odkaz na metodu, která implementuje Get accessor. Pomocí GetMethod() metody odkazu na typ získáte odkaz na metodu. odkaz. Metoda musí mít jeden parametr, který je PSObject. Objekt Set je přiřazen pomocí parametru SecondValue.
  • Pro ScriptMethodmusí být hodnota blok skriptu.
  • Pro ScriptPropertymusí být hodnota blok skriptu, který implementuje Get accessor. Objekt Set je přiřazen pomocí parametru SecondValue.
Typ:Object
Position:2
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

Vstupy

PSObject

Do této rutiny můžete převést libovolný objekt.

Výstupy

None

Ve výchozím nastavení tato rutina nevrací žádný výstup.

Object

Pokud použijete parametr PassThru, vrátí tato rutina nově rozšířený objekt.

Poznámky

Členy můžete přidat pouze do objektů typu PSObject. Chcete-li zjistit, zda je objekt PSObject objekt, použijte operátor -is. Pokud chcete například otestovat objekt uložený v proměnné $obj, zadejte $obj -is [psobject].

objekty PSObject typu udržují jejich seznam členů v pořadí, v jakém byly členy přidány do objektu.

Názvy MemberType , Name, Valuea SecondValue parametry jsou volitelné. Pokud vynecháte názvy parametrů, musí se nepojmenované hodnoty parametrů zobrazovat v tomto pořadí: MemberType, Name, Valuea SecondValue.

Pokud zahrnete názvy parametrů, můžou se parametry zobrazit v libovolném pořadí.

Můžete použít $this automatickou proměnnou v blocích skriptu, které definují hodnoty nových vlastností a metod. Proměnná $this odkazuje na instanci objektu, do kterého se přidávají vlastnosti a metody. Další informace o proměnné $this naleznete v tématu about_Automatic_Variables.