Megosztás a következőn keresztül:


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-Memberaz objektumot Add-Memberaz 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-Memberhasonló 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

PSObject

A parancsmaghoz bármilyen objektumot csövezhet.

Kimenetek

None

Ez a parancsmag alapértelmezés szerint nem ad vissza kimenetet.

Object

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.