Add-Member
Egyéni tulajdonságokat és metódusokat ad hozzá egy PowerShell-objektum egy példányához.
Syntax
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
A Add-Member
parancsmaggal tagokat (tulajdonságokat és metódusokat) vehet fel egy PowerShell-objektum egy példányára. Hozzáadhat például egy NoteProperty-tagot , amely tartalmazza az objektum leírását, vagy egy szkriptet futtató ScriptMethod-tagot az objektum módosításához.
A használatához Add-Member
az objektumot Add-Member
az InputObject paraméter használatával vagy az objektum megadásához csövezheti.
A MemberType paraméter a hozzáadni kívánt tag típusát jelzi. A Név paraméter nevet rendel az új taghoz, az Érték paraméter pedig a tag értékét állítja be.
A hozzáadott tulajdonságok és metódusok csak a megadott objektum adott példányához lesznek hozzáadva. Add-Member
nem módosítja az objektum típusát. Új objektumtípus létrehozásához használja a Add-Type
parancsmagot.
A parancsmaggal Export-Clixml
mentheti az objektum példányát, beleértve a további tagokat is egy fájlba. Ezután a Import-Clixml
parancsmaggal újra létrehozhatja az objektum példányát az exportált fájlban tárolt információkból.
A Windows PowerShell 3.0-tól kezdve új funkciókkal rendelkezik, Add-Member
amelyek megkönnyítik a jegyzettulajdonságok hozzáadását az objektumokhoz. A NotePropertyName és a NotePropertyValue paraméterekkel meghatározhat egy jegyzettulajdonságot, vagy használhatja a NotePropertyMembers paramétert, amely a jegyzettulajdonságok nevének és értékeinek kivonattábláját veszi fel.
Emellett a Windows PowerShell 3.0-tól kezdve a kimeneti objektumot létrehozó PassThru paraméterre ritkábban van szükség. Add-Member
mostantól közvetlenül hozzáadja az új tagokat a több típus bemeneti objektumához. További információ: PassThru paraméter leírása.
Példák
1. példa: Jegyzettulajdonság hozzáadása PSObjecthez
Az alábbi példa egy "Kész" értékű Állapotjegyzet tulajdonságot ad hozzá a fájlt képviselő Test.txt
FileInfo objektumhoz.
Az első parancs a Get-ChildItem
parancsmaggal lekér egy fileInfo objektumot, amely a Test.txt
fájlt jelöli. A változóba $a
menti.
A második parancs hozzáadja a jegyzet tulajdonságot az objektumhoz a következőben $a
: .
A harmadik parancs pontjelezést használ az objektum Állapot tulajdonságának beolvasásához a következőben$a
: . Ahogy a kimenet mutatja, az érték .Done
$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status
Done
2. példa: Aliastulajdonság hozzáadása PSObjecthez
Az alábbi példa egy Size alias tulajdonságot ad hozzá a Test.txt
fájlt képviselő objektumhoz. Az új tulajdonság a Length tulajdonság aliasa.
Az első parancs a Get-ChildItem
parancsmagot használja a Test.txt
FileInfo objektum lekéréséhez.
A második parancs hozzáadja a Size alias tulajdonságot. A harmadik parancs pontjelezést használ az új Méret tulajdonság értékének lekéréséhez.
$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size
2394
3. példa: StringUse jegyzettulajdonság hozzáadása sztringhez
Ez a példa hozzáadja a StringUse megjegyzés tulajdonságot egy sztringhez. Mivel Add-Member
nem tud típusokat hozzáadni a sztringbemeneti objektumokhoz, megadhatja a PassThru paramétert a kimeneti objektum létrehozásához. A példa utolsó parancsa az új tulajdonságot jeleníti meg.
Ez a példa a NotePropertyMembers paramétert használja. A NotePropertyMembers paraméter értéke egy kivonattábla. A kulcs a jegyzettulajdonság neve, StringUse, az érték pedig a Jegyzet tulajdonság értéke, Megjelenítés.
$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse
Display
4. példa: Szkriptmetódus hozzáadása FileInfo-objektumhoz
Ez a példa hozzáadja a SizeInMB szkriptmetódust egy FileInfo-objektumhoz , amely kiszámítja a fájlméretet a legközelebbi MegaByte-ra. A második parancs létrehoz egy ScriptBlockot , amely a Típus Kerekítése statikus metódusát [math]
használja a fájlméret második tizedesjegyre kerekítéséhez.
Az Érték paraméter az $This
aktuális objektumot jelképező automatikus változót is használja. A $This
változó csak az új tulajdonságokat és metódusokat meghatározó szkriptblokkokban érvényes.
Az utolsó parancs pontfeliratot használ az új SizeInMB szkript metódus meghívásához a $A
változó objektumán.
$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
5. példa: Egyéni objektum létrehozása
Ez a példa létrehoz egy egyéni objektumot.
A New-Object
parancsmag létrehoz egy PSObjectet , amely a $Asset
változóban van mentve. A [ordered]
típusgyorsító létrehoz egy rendezett szótárat, amely a $d
változóban van tárolva.
A piping a $Asset
Add-Member
szótár kulcs-érték párjait NoteProperty-tagokként adja hozzá az objektumhoz. A TypeName paraméter hozzárendeli a típust Asset
a PSObjecthez. A Get-Member
parancsmag az objektum típusát és tulajdonságait jeleníti meg. A tulajdonságok azonban betűrendben vannak felsorolva, nem pedig a hozzáadásuk sorrendjében.
$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
A tulajdonságok nyers listájának vizsgálata a tulajdonságokat az objektumhoz adott sorrendben jeleníti meg. Format-Table
ebben a példában a következőhöz Get-Member
hasonló kimenetet hozunk létre.
6. példa: AliasProperty hozzáadása objektumhoz
Ebben a példában létrehozunk egy egyéni objektumot, amely két NoteProperty-tagot tartalmaz. A NoteProperty típusa a tulajdonságban tárolt érték típusát tükrözi. Ebben az esetben az Age tulajdonság egy sztring.
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
Az intAge tulajdonság az Age tulajdonság AliasProperty tulajdonsága, de a típus garantáltan uint32 lesz.
7. példa: Metódusok hozzáadása és beállítása egyéni objektumhoz
Ez a példa bemutatja, hogyan definiálhatja a mélyen beágyazott tulajdonsághoz hozzáférő Get and Set metódusokat.
$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
Figyelje meg, hogy a Title tulajdonság egy Olyan ScriptProperty, amely Get és Set metódussal rendelkezik. Amikor új értéket rendelünk a Title tulajdonsághoz, a Rendszer meghívja a Set metódust, és módosítja a Szerepkör tulajdonság értékét a Pozíció tulajdonságban.
Paraméterek
-Force
Alapértelmezés szerint nem lehet új tagot hozzáadni, Add-Member
ha az objektumnak már van ugyanazzal a tagjával.
A Force paraméter Add-Member
használatakor lecseréli a meglévő tagot az új tagra.
A Force paraméter nem használható egy típus szabványos tagjának helyére.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-InputObject
Azt az objektumot adja meg, amelyhez az új tag hozzá van adva. Adjon meg egy változót, amely tartalmazza az objektumokat, vagy írjon be egy parancsot vagy kifejezést, amely lekéri az objektumokat.
Típus: | PSObject |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | True |
Helyettesítő karakterek elfogadása: | False |
-MemberType
Megadja a hozzáadni kívánt tag típusát. Ez a paraméter kötelező. A paraméter elfogadható értékei a következők:
- AliasProperty
- CodeMethod
- CodeProperty
- NoteProperty
- ScriptMethod
- ScriptProperty
Ezekről az értékekről további információt a PSMemberTypes Enumeration a PowerShell SDK-ban talál.
Nem minden objektum rendelkezik minden tagtípussal. Ha olyan tagtípust ad meg, amely nem rendelkezik az objektummal, a PowerShell hibát ad vissza.
Típus: | PSMemberTypes |
Aliasok: | Type |
Elfogadott értékek: | AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty |
Position: | 0 |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Name
Megadja annak a tagnak a nevét, amelyet a parancsmag hozzáad.
Típus: | String |
Position: | 1 |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-NotePropertyMembers
Olyan kivonatoló vagy rendezett szótárat ad meg, amely a NoteProperty neveket és azok értékeit képviselő kulcs-érték párokat tartalmazza. További információ a kivonattáblákról és a rendezett szótárakról a PowerShellben: about_Hash_Tables.
Ezt a paramétert a Windows PowerShell 3.0-ban vezettük be.
Típus: | IDictionary |
Position: | 0 |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-NotePropertyName
Megadja a jegyzettulajdonság nevét.
Használja ezt a paramétert a NotePropertyValue paraméterrel. Ez a paraméter nem kötelező.
Ezt a paramétert a Windows PowerShell 3.0-ban vezettük be.
Típus: | String |
Position: | 0 |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-NotePropertyValue
A jegyzettulajdonság értékét adja meg.
Használja ezt a paramétert a NotePropertyName paraméterrel. Ez a paraméter nem kötelező.
Ezt a paramétert a Windows PowerShell 3.0-ban vezettük be.
Típus: | Object |
Position: | 1 |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-PassThru
Azt az elemet képviselő objektumot adja vissza, amellyel dolgozik. Ez a parancsmag alapértelmezés szerint nem hoz létre kimenetet.
A legtöbb objektum esetében Add-Member
hozzáadja az új tagokat a bemeneti objektumhoz. Ha azonban a bemeneti objektum egy sztring, Add-Member
nem tudja hozzáadni a tagot a bemeneti objektumhoz. Ezekhez az objektumokhoz a PassThru paramétert használva hozzon létre egy kimeneti objektumot.
A Windows PowerShell 2.0-ban Add-Member
csak az objektumok PSObject burkolójához adtak hozzá tagokat, az objektumhoz nem. A PassThru paraméterrel létrehozhat egy kimeneti objektumot minden olyan objektumhoz, amely PSObject burkolóval rendelkezik.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-SecondValue
Az AliasProperty, a ScriptProperty vagy a CodeProperty tagokkal kapcsolatos opcionális további információkat adja meg.
Ha AliasProperty hozzáadásakor használják, ennek a paraméternek adattípusnak kell lennie. A megadott adattípusra való átalakítás hozzáadódik az AliasProperty értékéhez. Ha például olyan AliasProperty értéket ad hozzá, amely alternatív nevet ad egy sztringtulajdonságnak, megadhatja a System.Int32 SecondValue paraméterét is, amely azt jelzi, hogy a sztringtulajdonság értékét egész számmá kell konvertálni a megfelelő AliasProperty használatával való hozzáféréskor.
A CodeProperty esetében az értéknek olyan metódusra kell hivatkoznia, amely egy Készlet tartozékot implementál. GetMethod()
Egy metódusra mutató hivatkozás lekéréséhez használja a típushivatkozás metódusát. A metódusnak egy PSObject paramétert kell használnia. A Get kiegészítő az Érték paraméterrel van hozzárendelve.
A ScriptProperty esetében az értéknek olyan szkriptblokknak kell lennie, amely egy Set-tartozékot implementál. A Get kiegészítő az Érték paraméterrel van hozzárendelve.
Típus: | Object |
Position: | 3 |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-TypeName
Megadja a típus nevét.
Ha a típus egy osztály a rendszernévtérben vagy egy típusgyorsítóval rendelkező típus, megadhatja a típus rövid nevét. Ellenkező esetben a teljes típusnév megadása kötelező. Ez a paraméter csak akkor érvényes, ha az InputObject PSObject.
Ezt a paramétert a Windows PowerShell 3.0-ban vezettük be.
Típus: | String |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Value
A hozzáadott tag kezdeti értékét adja meg. Ha AliasProperty, CodeProperty vagy ScriptProperty tagot ad hozzá, a SecondValue paraméterrel további információkat adhat meg.
- AliasProperty esetén az értéknek az aliasolt tulajdonság nevének kell lennie.
- CodeMethod esetén az értéknek egy metódusra mutató hivatkozásnak kell lennie.
GetMethod()
Egy metódusra mutató hivatkozás lekéréséhez használja a típushivatkozás metódusát. - CodeProperty esetén az értéknek olyan metódusra kell hivatkoznia, amely egy Get tartozékot implementál.
GetMethod()
Egy metódusra mutató hivatkozás lekéréséhez használja a típushivatkozás metódusát. utalás. A metódusnak egy PSObject paramétert kell használnia. A Set tartozék a SecondValue paraméterrel van hozzárendelve. - ScriptMethod esetén az értéknek szkriptblokknak kell lennie.
- A ScriptProperty esetében az értéknek olyan szkriptblokknak kell lennie, amely egy Get tartozékot implementál. A Set tartozék a SecondValue paraméterrel van hozzárendelve.
Típus: | Object |
Position: | 2 |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
Bevitelek
A parancsmaghoz bármilyen objektumot csövezhet.
Kimenetek
None
Ez a parancsmag alapértelmezés szerint nem ad vissza kimenetet.
A PassThru paraméter használatakor ez a parancsmag az újonnan kiterjesztett objektumot adja vissza.
Jegyzetek
Tagok csak PSObject típusú objektumokhoz vehetők fel. Annak megállapításához, hogy egy objektum PSObject objektum-e, használja az operátort -is
. Ha például egy változóban tárolt objektumot szeretne tesztelni, írja be a $obj
következőt $obj -is [psobject]
: .
A PSObject típusú objektumok abban a sorrendben őrzik meg a tagok listáját, hogy a tagok hozzá lettek adva az objektumhoz.
A MemberType, Name, Value és SecondValue paraméterek neve nem kötelező. Ha kihagyja a paraméterneveket, a meg nem nevezett paraméterértékek a következő sorrendben jelennek meg: MemberType, Name, Value és SecondValue.
Ha a paraméterneveket is tartalmazza, a paraméterek bármilyen sorrendben megjelenhetnek.
Az automatikus változót olyan $this
szkriptblokkokban használhatja, amelyek új tulajdonságok és metódusok értékeit határozzák meg. A $this
változó annak az objektumnak a példányára hivatkozik, amelyhez a tulajdonságokat és metódusokat hozzáadja. A változóval kapcsolatos további információkért lásd: $this
about_Automatic_Variables.