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-Member
nebo 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.txt
FileInfo.
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 Asset
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
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
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.
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.