Add-Member
PowerShell nesnesinin bir örneğine özel özellikler ve yöntemler ekler.
Sözdizimi
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
cmdlet'i Add-Member
, PowerShell nesnesinin bir örneğine üye (özellikler ve yöntemler) eklemenize olanak tanır. Örneğin, nesnenin açıklamasını içeren bir NoteProperty üyesi veya nesneyi değiştirmek için betik çalıştıran bir ScriptMethod üyesi ekleyebilirsiniz.
kullanmak Add-Member
için nesnesini öğesine yöneltin Add-Member
veya InputObject parametresini kullanarak nesneyi belirtin.
MemberType parametresi, eklemek istediğiniz üye türünü gösterir. Name parametresi yeni üyeye bir ad atar ve Value parametresi üyenin değerini ayarlar.
Eklediğiniz özellikler ve yöntemler yalnızca belirttiğiniz nesnenin belirli bir örneğine eklenir. Add-Member
nesne türünü değiştirmez. Yeni bir nesne türü oluşturmak için cmdlet'ini Add-Type
kullanın.
Ayrıca, ek üyeler de dahil olmak üzere nesnenin örneğini bir dosyaya kaydetmek için cmdlet'ini de kullanabilirsiniz Export-Clixml
. Ardından, dışarı aktarılan dosyada Import-Clixml
depolanan bilgilerden nesnenin örneğini yeniden oluşturmak için cmdlet'ini kullanabilirsiniz.
Windows PowerShell 3.0'da başlayarak, Add-Member
nesnelere not özellikleri eklemeyi kolaylaştıran yeni özelliklere sahiptir. NotePropertyName ve NotePropertyValue parametrelerini kullanarak bir not özelliği tanımlayabilir veya not özellik adlarının ve değerlerinin karma tablosunu alan NotePropertyMembers parametresini kullanabilirsiniz.
Ayrıca, Windows PowerShell 3.0'da başlayarak, bir çıkış nesnesi oluşturan PassThru parametresine daha az sıklıkta ihtiyaç duyulmaktadır. Add-Member
şimdi yeni üyeleri doğrudan daha fazla türde giriş nesnesine ekler. Daha fazla bilgi için Bkz . PassThru parametre açıklaması.
Örnekler
Örnek 1: PSObject'e not özelliği ekleme
Aşağıdaki örnek, dosyayı temsil eden FileInfo nesnesine "Bitti" değerine sahip bir Durum notu özelliği ekler.Test.txt
İlk komut, cmdlet'ini Get-ChildItem
kullanarak dosyayı temsil eden Test.txt
bir FileInfo nesnesi alır. Değişkenine $a
kaydeder.
İkinci komut, içindeki nesnesine $a
not özelliğini ekler.
Üçüncü komut, içindeki $a
nesnesinin Status özelliğinin değerini almak için noktalı gösterimi kullanır. Çıktıda gösterildiği gibi değeri şeklindedir Done
.
$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status
Done
Örnek 2: PSObject'e diğer ad özelliği ekleme
Aşağıdaki örnek, dosyayı temsil Test.txt
eden nesneye bir Size diğer adı özelliği ekler. Yeni özellik, Length özelliğinin diğer adıdır.
İlk komut, FileInfo nesnesini almak için cmdlet'ini Test.txt
kullanırGet-ChildItem
.
İkinci komut Size diğer adı özelliğini ekler. Üçüncü komut, yeni Size özelliğinin değerini almak için nokta gösterimini kullanır.
$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size
2394
Örnek 3: Dize ekleme Dizeye not özelliği kullanma
Bu örnek StringUse not özelliğini bir dizeye ekler. Add-Member
Dize giriş nesnelerine tür ekleyemediğinden, çıkış nesnesi oluşturmak için PassThru parametresini belirtebilirsiniz. Örnekteki son komut yeni özelliği görüntüler.
Bu örnekte NotePropertyMembers parametresi kullanılır. NotePropertyMembers parametresinin değeri bir karma tablodur. Anahtar, not özelliği adı olan StringUse ve değer de Not özelliği değeri olan Display'dir.
$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse
Display
Örnek 4: FileInfo nesnesine betik yöntemi ekleme
Bu örnek SizeInMB betik yöntemini, dosya boyutunu en yakın MegaByte'a hesaplayan bir FileInfo nesnesine ekler. İkinci komut, dosya boyutunu ikinci ondalık basamağa yuvarlamak için türünden [math]
Round statik yöntemini kullanan bir ScriptBlock oluşturur.
Value parametresi, geçerli nesneyi temsil eden otomatik değişkeni de kullanır$This
. $This
değişkeni yalnızca yeni özellikleri ve yöntemleri tanımlayan betik bloklarında geçerlidir.
Son komut, değişkendeki nesnede $A
yeni SizeInMB betik yöntemini çağırmak için nokta gösterimini kullanır.
$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
Örnek 5: Özel nesne oluşturma
Bu örnek bir Asset özel nesnesi oluşturur.
cmdlet değişkenine New-Object
$Asset
kaydedilmiş bir PSObject oluşturur. Tür hızlandırıcısı [ordered]
, değişkende $d
depolanan sıralı bir sözlük oluşturur.
için piping$Asset
, sözlükteki anahtar-değer çiftlerini nesneye NoteProperty üyeleri olarak Add-Member
ekler. TypeName parametresi türü Asset
PSObject'e atar. cmdlet'i Get-Member
nesnenin türünü ve özelliklerini gösterir. Ancak özellikler, eklendikleri sırada değil alfabetik sırada listelenir.
$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
Özelliklerin ham listesini incelemek, özellikleri nesneye eklendikleri sırayla gösterir. Format-Table
, bu örnekte benzer bir çıktı oluşturmak için Get-Member
kullanılır.
Örnek 6: Nesneye AliasProperty ekleme
Bu örnekte, iki NoteProperty üyesi içeren özel bir nesne oluşturuyoruz. NoteProperty türü, özelliğinde depolanan değerin türünü yansıtır. Bu durumda Age özelliği bir dizedir.
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 özelliği Age özelliği için bir AliasProperty'dir, ancak türün uint32 olması garanti edilir.
Örnek 7: Özel bir nesneye get ve set yöntemleri ekleme
Bu örneklerde, iç içe yerleştirilmiş bir özelliğe erişen Get ve Set yöntemlerinin nasıl tanımlanacağı gösterilmektedir.
$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
Title özelliğinin Get ve Set yöntemine sahip bir ScriptProperty olduğuna dikkat edin. Title özelliğine yeni bir değer atadığımızda Set yöntemi çağrılır ve Position özelliğindeki Role özelliğinin değerini değiştirir.
Parametreler
-Force
Varsayılan olarak, Add-Member
nesnenin zaten aynı üyeye sahip olması durumunda yeni üye eklenemez.
Force parametresini kullandığınızda, Add-Member
mevcut üyeyi yeni üyeyle değiştirir.
Türün standart bir üyesini değiştirmek için Force parametresini kullanamazsınız.
Tür: | SwitchParameter |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-InputObject
Yeni üyenin eklendiği nesneyi belirtir. Nesneleri içeren bir değişken girin veya nesneleri alan bir komut veya ifade yazın.
Tür: | PSObject |
Position: | Named |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | True |
Joker karakterleri kabul et: | False |
-MemberType
Eklenecek üyenin türünü belirtir. Bu parametre zorunludur. Bu parametrenin kabul edilebilir değerleri şunlardır:
- AliasProperty
- CodeMethod
- CodeProperty
- NoteProperty
- ScriptMethod
- ScriptProperty
Bu değerler hakkında bilgi için bkz . PowerShell SDK'sında PSMemberTypes Numaralandırması .
Tüm nesneler her tür üyeye sahip değildir. Nesnenin sahip olmadığı bir üye türü belirtirseniz PowerShell bir hata döndürür.
Tür: | PSMemberTypes |
Diğer adlar: | Type |
Kabul edilen değerler: | AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty |
Position: | 0 |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-Name
Bu cmdlet'in eklediği üyenin adını belirtir.
Tür: | String |
Position: | 1 |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-NotePropertyMembers
NoteProperty adlarını ve değerlerini temsil eden anahtar-değer çiftini içeren bir karma tablo veya sıralı sözlük belirtir. PowerShell'de karma tablolar ve sıralı sözlükler hakkında daha fazla bilgi için bkz . about_Hash_Tables.
Bu parametre Windows PowerShell 3.0'da kullanıma sunulmuştur.
Tür: | IDictionary |
Position: | 0 |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-NotePropertyName
Not özelliği adını belirtir.
Bu parametreyi NotePropertyValue parametresiyle kullanın. Bu parametre isteğe bağlıdır.
Bu parametre Windows PowerShell 3.0'da kullanıma sunulmuştur.
Tür: | String |
Position: | 0 |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-NotePropertyValue
Not özellik değerini belirtir.
Bu parametreyi NotePropertyName parametresiyle kullanın. Bu parametre isteğe bağlıdır.
Bu parametre Windows PowerShell 3.0'da kullanıma sunulmuştur.
Tür: | Object |
Position: | 1 |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-PassThru
Üzerinde çalıştığınız öğeyi temsil eden bir nesne döndürür. Varsayılan olarak, bu cmdlet herhangi bir çıkış oluşturmaz.
Çoğu nesne için yeni Add-Member
üyeleri giriş nesnesine ekler. Ancak, giriş nesnesi bir dize olduğunda, Add-Member
üye giriş nesnesine eklenemez. Bu nesneler için PassThru parametresini kullanarak bir çıkış nesnesi oluşturun.
Windows PowerShell 2.0'da, Add-Member
nesneye değil, yalnızca nesnelerin PSObject sarmalayıcısına üyeler eklendi. PASSThru parametresini kullanarak PSObject sarmalayıcısı olan herhangi bir nesne için çıkış nesnesi oluşturun.
Tür: | SwitchParameter |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-SecondValue
AliasProperty, ScriptProperty veya CodeProperty üyeleri hakkında isteğe bağlı ek bilgileri belirtir.
AliasProperty eklerken kullanılırsa, bu parametre bir veri türü olmalıdır. AliasProperty değerine belirtilen veri türüne dönüştürme eklenir. Örneğin, bir dize özelliği için alternatif ad sağlayan bir AliasProperty eklerseniz, ilgili AliasProperty kullanılarak erişildiğinde bu dize özelliğinin değerinin tamsayıya dönüştürülmesi gerektiğini belirtmek için System.Int32'nin SecondValue parametresini de belirtebilirsiniz.
CodeProperty için değer, Set erişimcisini uygulayan bir yönteme başvuru olmalıdır. Bir yönteme GetMethod()
başvuru almak için tür başvurusu yöntemini kullanın. yöntemi PSObject olan tek bir parametre almalıdır. Get erişimcisi Value parametresi kullanılarak atanır.
ScriptProperty için değer, Set erişimcisini uygulayan bir betik bloğu olmalıdır. Get erişimcisi Value parametresi kullanılarak atanır.
Tür: | Object |
Position: | 3 |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-TypeName
Tür için bir ad belirtir.
Tür, Sistem ad alanında bir sınıf veya tür hızlandırıcısı olan bir tür olduğunda, türün kısa adını girebilirsiniz. Aksi takdirde, tam tür adı gereklidir. Bu parametre yalnızca InputObject bir PSObject olduğunda etkilidir.
Bu parametre Windows PowerShell 3.0'da kullanıma sunulmuştur.
Tür: | String |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-Value
Eklenen üyenin ilk değerini belirtir. AliasProperty, CodeProperty veya ScriptProperty üyesi eklerseniz SecondValue parametresini kullanarak ek bilgi sağlayabilirsiniz.
- AliasProperty için değer, diğer adı alınan özelliğin adı olmalıdır.
- CodeMethod için değerin bir yöntem başvurusu olması gerekir. Bir yönteme
GetMethod()
başvuru almak için tür başvurusu yöntemini kullanın. - CodeProperty için değerin Get erişimcisini uygulayan bir yönteme başvuru olması gerekir. Bir yönteme
GetMethod()
başvuru almak için tür başvurusu yöntemini kullanın. referans. yöntemi PSObject olan tek bir parametre almalıdır. Set erişimcisi SecondValue parametresi kullanılarak atanır. - ScriptMethod için değer bir betik bloğu olmalıdır.
- ScriptProperty için değer, Get erişimcisini uygulayan bir betik bloğu olmalıdır. Set erişimcisi SecondValue parametresi kullanılarak atanır.
Tür: | Object |
Position: | 2 |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
Girişler
Herhangi bir nesneyi bu cmdlet'e yöneltebilirsiniz.
Çıkışlar
None
Varsayılan olarak, bu cmdlet çıkış döndürmez.
PassThru parametresini kullandığınızda, bu cmdlet yeni genişletilmiş nesneyi döndürür.
Notlar
Yalnızca PSObject türü nesnelerine üye ekleyebilirsiniz. Bir nesnenin PSObject nesnesi olup olmadığını belirlemek için işlecini -is
kullanın. Örneğin, değişkeninde $obj
depolanan bir nesneyi test etmek için yazın $obj -is [psobject]
.
PSObject türü nesneleri, üyelerin listesini, üyelerin nesneye eklendiği sırada tutar.
MemberType, Name, Value ve SecondValue parametrelerinin adları isteğe bağlıdır. Parametre adlarını atlarsanız, adsız parametre değerleri şu sırada görünmelidir: MemberType, Name, Value ve SecondValue.
Parametre adlarını eklerseniz, parametreler herhangi bir sırada görüntülenebilir.
Yeni özelliklerin $this
ve yöntemlerin değerlerini tanımlayan betik bloklarında otomatik değişkeni kullanabilirsiniz. $this
değişkeni, özelliklerin ve yöntemlerin eklendiği nesnenin örneğine başvurur. Değişken hakkında $this
daha fazla bilgi için bkz . about_Automatic_Variables.
İlişkili Bağlantılar
PowerShell