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