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 člen NoteProperty , který obsahuje popis objektu nebo ScriptMethod člen, který spouští skript pro změnu objektu.

Chcete-li použít Add-Member, přeskakujte objekt na Add-Member, nebo použijte InputObject parametr k určení objektu.

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

Vlastnosti a metody, které přidáte, se přidají pouze do konkrétní instance objektu, který zadáte. Add-Member nezmění typ objektu. K vytvoření nového typu 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í Import-Clixml rutiny znovu vytvořit instanci objektu z informací uložených v exportovaného souboru.

Počínaje Windows PowerShellem 3.0 má nové funkce, Add-Member 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 poznámek.

Počínaje windows PowerShellem 3.0 je také méně často potřeba parametr PassThru , který generuje výstupní objekt. Add-Member nyní přidá nové členy 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 použije rutinu Get-ChildItem k získání objektu FileInfo představujícího Test.txt soubor. Uloží ji do $a proměnné.

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

Třetí příkaz používá tečkování 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á alias vlastnost Size do 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í FileInfo objektu Test.txt .

Druhý příkaz přidá vlastnost Alias Velikost . Třetí příkaz pomocí zápisu tečky získá hodnotu nové size vlastnost.

$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 note 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.

V tomto příkladu se používá parametr NotePropertyMembers . Hodnota parametru NotePropertyMembers je tabulka hash. Klíč je název vlastnosti poznámky, StringUse a 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á SizeInMB script metoda do FileInfo objektu, který vypočítá velikost souboru na nejbližší MegaByte. Druhý příkaz vytvoří ScriptBlock , který používá metodu Round static z [math] typu k zaokrouhlení velikosti souboru na druhé desetinné místo.

Parametr Value také používá automatickou $This proměnnou, 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é Metody Skriptu SizeInMB objektu $A v proměnné.

$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ří vlastní objekt Asset .

Rutina New-Object vytvoří objekt PSObject , který je uložený v $Asset proměnné. Akcelerátor [ordered] typů vytvoří uspořádaný slovník, který je uložený v $d proměnné. Piping $Asset to Add-Member adds the key-value pairs in the dictionary to the object as NoteProperty members. Parametr TypeName přiřadí typ Asset objektu PSObject. 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 v tomto příkladu slouží 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 členy NoteProperty . Typ pro 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

IntAge vlastnost je AliasProperty pro Vlastnost Age, ale typ je zaručeno uint32.

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

Tento příklad ukazuje, jak definovat metody Get a Set , 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 Title vlastnost je ScriptProperty, který má Get a Set metoda. Když přiřadíme novou hodnotu k Title vlastnost, metoda Set je volána a změní hodnotu role vlastnost v Position vlastnost.

Parametry

-Force

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

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ý. Tento parametr přijímá tyto hodnoty:

  • 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í názvy NoteProperty 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 Add-Member objektů přidá nové členy do vstupního objektu. Pokud je vstupním objektem řetězec, Add-Member nelze přidat člena do vstupního objektu. Pro tyto objekty vytvořte výstupní objekt pomocí parametru PassThru .

Ve Windows PowerShellu 2.0 Add-Member jsme přidali členy pouze do obálky OBJEKTŮ PSObject , 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, ScriptProperty nebo CodeProperty členy.

Pokud se používá při přidávání AliasProperty, musí být tento parametr datovým typem. 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 parametr SecondValue system.Int32, který označuje, ž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 CodeProperty musí být hodnota odkaz na metodu, která implementuje objekt Set accessor. GetMethod() K získání odkazu na metodu použijte metodu odkazu na typ. Metoda musí mít jeden parametr, který je PSObject. Přístupové objekty Get se přiřazují pomocí parametru Value .

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

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řída v oboru názvů systému 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 OBJEKT 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, CodeProperty nebo ScriptProperty člen, můžete zadat další informace pomocí parametru SecondValue.

  • Pro AliasProperty musí být hodnota název vlastnosti, která se aliasuje.
  • Pro CodeMethod musí být hodnota odkazem na metodu. GetMethod() K získání odkazu na metodu použijte metodu odkazu na typ.
  • Pro CodeProperty musí být hodnota odkaz na metodu, která implementuje Get accessor. GetMethod() K získání odkazu na metodu použijte metodu odkazu na typ. odkaz. Metoda musí mít jeden parametr, který je PSObject. Přístupové objekty Set se přiřazují pomocí parametru SecondValue .
  • Pro ScriptMethod musí být hodnota blok skriptu.
  • Pro ScriptProperty musí být hodnota blok skriptu, který implementuje přístupové objekty Get. Přístupové objekty Set se přiřazují 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 objekt je objekt PSObject , použijte -is operátor. Pokud chcete například otestovat objekt uložený v $obj proměnné, zadejte $obj -is [psobject].

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

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

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

Automatickou proměnnou $this můžete použít 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 $this proměnné najdete v tématu about_Automatic_Variables.