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

Rutina Add-Member umožňuje přidat členy (vlastnosti a metody) do instance objektu PowerShellu. Můžete například přidat člena 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 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 Hotovo.

$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. Vzhledem k tomu, že Add-Member nelze přidat typy řetězcové vstupní objekty, 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á SizeInMB metoda skriptu do FileInfo objektu, 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: Zkopírování všech vlastností objektu do jiného

Tato funkce zkopíruje všechny vlastnosti jednoho objektu do jiného objektu.

Smyčka foreach používá rutinu Get-Member k získání všech vlastností objektu From. Příkazy v rámci smyčky foreach se provádějí v řadě pro každou z vlastností.

Příkaz Add-Member přidá vlastnost objektu From do objektu To jako NoteProperty. Hodnota se zkopíruje pomocí parametru Value. Pomocí parametru Force přidá členy se stejným názvem člena.

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

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

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

Rutina vytvoříPSObject . Příklad uloží objekt PSObject do proměnné $Asset.

Druhý příkaz používá akcelerátor typu [ordered] k vytvoření seřazeného slovníku názvů a hodnot. Příkaz uloží výsledek do proměnné $D.

Třetí příkaz používá NotePropertyMembers parametr rutiny Add-Member k přidání slovníku do proměnné $D do PSObject. Vlastnost TypeName přiřadí novému názvu asset, PSObject.

Poslední příkaz předá nový objekt Asset do rutiny Get-Member. Výstup ukazuje, že objekt má název typu Asset a vlastnosti poznámky, které jsme definovali v seřazené slovníku.

$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

Parametry

-Force

Označuje, že tato rutina přidá nového člena, i když má objekt vlastního člena se stejným názvem. 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ý. Přijatelné hodnoty pro tento parametr jsou:

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

Informace o těchto hodnotách najdete v tématu PSMemberTypes – výčet v knihovně MSDN.

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, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All
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 tabulku hash nebo seřazený slovník názvů a hodnot vlastností poznámek. Zadejte tabulku hash nebo slovník, ve kterém jsou klíče názvy vlastností poznámek a hodnoty jsou hodnoty vlastností poznámek.

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, ScriptProperty, CodePropertynebo CodeMethod č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 vlastnosti řetězce, můžete také zadat SecondValue parametr System.Int32 indikovat, že hodnota této řetězcové vlastnosti by měla být při přístupu převedena na celé číslo pomocí odpovídající AliasProperty.

Parametr SecondValue můžete použít k zadání dalšího ScriptBlock při přidání ScriptProperty členu. První ScriptBlock, zadaný v parametru Value, se používá k získání hodnoty proměnné. Druhý ScriptBlock, zadaný v parametru SecondValue, slouží k nastavení hodnoty proměnné.

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, CodeProperty, ScriptProperty nebo CodeMethod člen, můžete zadat volitelné další informace 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ý typ objektu.

Výstupy

None or System.Object

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

Poznámky

Členy můžete přidat pouze do objektů 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].

NázvyMemberType , 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.