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
Add-Member
cmdlet'i, 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 bir betik çalıştıran ScriptMethod üyesi ekleyebilirsiniz.
Add-Member
kullanmak için, nesnesini Add-Member
öğesine yöneltin veya nesneyi belirtmek için InputObject parametresini kullanın.
MemberType parametresi, eklemek istediğiniz üye türünü gösterir. Adı 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 Add-Type
cmdlet'ini kullanın.
Ayrıca Export-Clixml
cmdlet'ini kullanarak ek üyeler de dahil olmak üzere nesnenin örneğini bir dosyaya kaydedebilirsiniz. Ardından Import-Clixml
cmdlet'ini kullanarak dışarı aktarılan dosyada depolanan bilgilerden nesnenin örneğini yeniden oluşturabilirsiniz.
Windows PowerShell 3.0'da Add-Member
, nesnelere not özellikleri eklemeyi kolaylaştıran yeni özelliklere sahiptir. Not özelliğini tanımlamak için NotePropertyName ve NotePropertyValue parametrelerini kullanabilir 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 parametresi daha az sıklıkta gereklidir.
Add-Member
artık yeni üyeleri daha fazla türün giriş nesnesine doğrudan ekler. Daha fazla bilgi için PassThru parametre açıklamasına bakın.
Örnekler
Örnek 1: PSObject'e not özelliği ekleme
Aşağıdaki örnek, dosyasını temsil eden FileInfo nesnesine "Bitti" değerine sahip bir Test.txt
not özelliği ekler.
İlk komut, Get-ChildItem
dosyasını temsil eden bir FileInfo nesnesi almak için Test.txt
cmdlet'ini kullanır.
$a
değişkenine kaydeder.
İkinci komut, $a
içindeki nesnesine not özelliğini ekler.
Üçüncü komut, içindeki nesnesinin $a
özelliğinin değerini almak için nokta gösterimini kullanır. Çıktıda gösterildiği gibi değeri 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, dosyasını temsil eden nesneye bir Test.txt
diğer ad özelliği ekler. Yeni özellik, Uzunluğu özelliği için bir diğer addır.
İlk komut, Get-ChildItem
Test.txt
nesnesini almak için cmdlet'ini kullanır.
İkinci komut, Boyutu diğer ad özelliğini ekler. Üçüncü komut, yeni Boyutu özelliğinin değerini almak için noktalı gösterimi 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 dizeye StringUse not özelliğini ekler.
Add-Member
String 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, StringUse not özelliği adıdır ve değer not özelliği değeridir Display.
$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse
Display
Örnek 4: FileInfo nesnesine betik yöntemi ekleme
Bu örnek, dosya boyutunu en yakın MegaByte'a hesaplayan bir FileInfo nesnesine SizeInMB betik yöntemini ekler. İkinci komut, dosya boyutunu ikinci ondalık basamağa yuvarlarken türünden Round statik yöntemini kullanan bir [Math]
oluşturur.
Value parametresi, geçerli nesneyi temsil eden $this
otomatik değişkenini de kullanır.
$this
değişkeni yalnızca yeni özellikleri ve yöntemleri tanımlayan betik bloklarında geçerlidir.
Son komut, değişkenindeki nesnede yeni $A
betik yöntemini çağırmak için noktalı gösterimi 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, özel nesne bir Varlığı oluşturur.
New-Object
cmdlet'i, değişkenine kaydedilmiş bir $Asset
oluşturur.
[ordered]
tür hızlandırıcısı, $d
değişkeninde depolanan sıralı bir sözlük oluşturur.
$Asset
için piping Add-Member
, sözlükteki anahtar-değer çiftlerini nesneye NoteProperty üyeleri olarak ekler.
TypeName parametresi, Asset
türüne atar.
Get-Member
cmdlet'i 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 Get-Member
benzer bir çıktı oluşturmak için kullanılır.
Örnek 6: Nesneye AliasProperty ekleme
Bu örnekte, iki NoteProperty üyesi içeren özel bir nesne oluşturacağız. NoteProperty türü, özelliğinde depolanan değerin türünü yansıtır. Bu durumda, Age özelliği bir dizedir.
$user = [pscustomobject]@{
Name = 'Doris'
Age = '20'
}
$addMemberSplat = @{
MemberType = 'AliasProperty'
Name = 'IntAge'
Value = 'Age'
SecondValue = 'UInt32'
}
$user | Add-Member @addMemberSplat
$user | 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, Yaş özelliği için bir AliasProperty, ancak türün uint32olması garanti edilir.
Örnek 7: Özel bir nesneye get ve set yöntemleri ekleme
Bu örneklerde, Get ve Derin iç içe bir özelliğe erişen yöntemleri ayarlamanın 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 Rol özelliğinin değerini değiştirir.
Parametreler
-Force
Varsayılan olarak, nesnenin zaten aynı üyesi varsa, Add-Member
yeni üye ekleyemez.
Zorla 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 gereklidir. Bu parametre için kabul edilebilir değerler şunlardır:
- AliasProperty
- CodeMethod
- CodeProperty
- NoteProperty
- ScriptMethod
- ScriptProperty
Bu değerler hakkında bilgi için bkz. PowerShell SDK'sında PSMemberTypes Numaralandırma .
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 Add-Member
yeni üyeleri giriş nesnesine ekler. Ancak, giriş nesnesi bir dize olduğunda, Add-Member
üyeyi giriş nesnesine ekleyemez. Bu nesneler için bir çıkış nesnesi oluşturmak için PassThru parametresini kullanın.
Windows PowerShell 2.0'da, Add-Member
nesneye değil, yalnızca PSObject sarmalayıcıya üye ekledi.
PSObject sarmalayıcıya sahip herhangi bir nesne için çıkış nesnesi oluşturmak üzere PassThru parametresini kullanın.
Tür: | SwitchParameter |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-SecondValue
AliasProperty, ScriptPropertyveya CodeProperty üyeleri hakkında isteğe bağlı ek bilgileri belirtir.
AliasPropertyeklerken kullanılırsa, bu parametre bir veri türü olmalıdır. Belirtilen veri türüne dönüştürme, AliasPropertydeğerine eklenir. Örneğin, dize özelliği için alternatif bir ad sağlayan bir AliasProperty eklerseniz, System.Int32SecondValue parametresini de belirterek ilgili AliasPropertykullanılarak erişildiğinde bu dize özelliğinin değerinin tamsayıya dönüştürülmesi gerektiğini belirtebilirsiniz.
CodePropertyiçin değer, Set erişimcisini uygulayan bir yönteme başvuru olmalıdır. Bir yönteme başvuru almak için tür başvurusunun GetMethod()
yöntemini kullanın. yöntemi, PSObjectolan tek bir parametre almalıdır.
Get erişimcisi, Değeri parametresi kullanılarak atanır.
ScriptPropertyiçin değerin Kümesi erişimcisini uygulayan bir betik bloğu olması gerekir. Get erişimcisi, Değeri 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, System 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 PSObjectolduğunda geçerlidir.
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, CodePropertyveya ScriptProperty üyesi eklerseniz, SecondValue parametresini kullanarak ek bilgi sağlayabilirsiniz.
- AliasPropertyiçin, değer diğer adı alınan özelliğin adı olmalıdır.
-
CodeMethodiçin değerin bir yöntem başvurusu olması gerekir. Bir yönteme başvuru almak için tür başvurusunun
GetMethod()
yöntemini kullanın. -
CodePropertyiçin değer, Get erişimcisini uygulayan bir yönteme başvuru olmalıdır. Bir yönteme başvuru almak için tür başvurusunun
GetMethod()
yöntemini kullanın. referans. yöntemi, PSObjectolan tek bir parametre almalıdır. Kümesi erişimcisi, SecondValue parametresi kullanılarak atanır. - ScriptMethodiçin değer bir betik bloğu olmalıdır.
- ScriptPropertyiçin değer, Get erişimcisini uygulayan bir betik bloğu olmalıdır. Kümesi 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 -is
işlecini kullanın. Örneğin, $obj
değişkeninde depolanan bir nesneyi test etmek için $obj -is [psobject]
yazın.
PSObject türü nesneleri, üyelerin listesini, üyelerin nesneye eklenme sırasına göre korur.
MemberType, Name, Valueve 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, Valueve SecondValue.
Parametre adlarını eklerseniz, parametreler herhangi bir sırada görüntülenebilir.
Yeni özelliklerin ve yöntemlerin değerlerini tanımlayan betik bloklarında $this
otomatik değişkenini kullanabilirsiniz.
$this
değişkeni, özelliklerin ve yöntemlerin eklendiği nesne örneğine başvurur.
$this
değişkeni hakkında daha fazla bilgi için bkz. about_Automatic_Variables.
İlişkili Bağlantılar
PowerShell