Add-Member
Dodaje właściwości niestandardowe i metody do wystąpienia obiektu programu PowerShell.
Składnia
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>]
Opis
Polecenie Add-Member
cmdlet umożliwia dodawanie elementów członkowskich (właściwości i metod) do wystąpienia obiektu programu PowerShell. Można na przykład dodać element członkowski NoteProperty zawierający opis obiektu lub elementu członkowskiego ScriptMethod , który uruchamia skrypt w celu zmiany obiektu.
Aby użyć Add-Member
metody , należy przekazać obiekt do Add-Member
obiektu lub użyć parametru InputObject , aby określić obiekt.
Parametr MemberType wskazuje typ elementu członkowskiego, który chcesz dodać. Parametr Name przypisuje nazwę do nowego elementu członkowskiego, a parametr Value ustawia wartość elementu członkowskiego.
Dodane właściwości i metody są dodawane tylko do określonego wystąpienia określonego obiektu. Add-Member
nie zmienia typu obiektu. Aby utworzyć nowy typ obiektu, użyj Add-Type
polecenia cmdlet .
Możesz również użyć Export-Clixml
polecenia cmdlet , aby zapisać wystąpienie obiektu, w tym dodatkowe elementy członkowskie, w pliku. Następnie możesz użyć Import-Clixml
polecenia cmdlet , aby ponownie utworzyć wystąpienie obiektu na podstawie informacji przechowywanych w wyeksportowanym pliku.
Począwszy od programu Windows PowerShell 3.0, Add-Member
ma nowe funkcje, które ułatwiają dodawanie właściwości notatek do obiektów. Możesz użyć parametrów NotePropertyName i NotePropertyValue , aby zdefiniować właściwość notatki lub użyć parametru NotePropertyMembers , który przyjmuje tabelę skrótów nazw i wartości właściwości notatek.
Ponadto, począwszy od programu Windows PowerShell 3.0, parametr PassThru, który generuje obiekt wyjściowy, jest potrzebny rzadziej. Add-Member
teraz dodaje nowe elementy członkowskie bezpośrednio do obiektu wejściowego większej liczby typów. Aby uzyskać więcej informacji, zobacz opis parametru PassThru .
Przykłady
Przykład 1. Dodawanie właściwości notatki do obiektu PSObject
W poniższym przykładzie dodano właściwość Nota stanu z wartością "Done" do obiektu FileInfo reprezentującego Test.txt
plik.
Pierwsze polecenie używa Get-ChildItem
polecenia cmdlet do pobrania obiektu FileInfo reprezentującego Test.txt
plik. Zapisuje go w zmiennej $a
.
Drugie polecenie dodaje właściwość notatki do obiektu w $a
pliku .
Trzecie polecenie używa notacji kropkowej, aby uzyskać wartość właściwości Status obiektu w pliku $a
. Jak pokazują dane wyjściowe, wartość to Done
.
$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status
Done
Przykład 2. Dodawanie właściwości aliasu do obiektu PSObject
W poniższym przykładzie do obiektu, który reprezentuje plik, dodaje właściwość aliasu Test.txt
Size. Nowa właściwość jest aliasem właściwości Length .
Pierwsze polecenie używa Get-ChildItem
polecenia cmdlet do pobrania Test.txt
obiektu FileInfo .
Drugie polecenie dodaje właściwość aliasu Size . Trzecie polecenie używa notacji kropkowej, aby uzyskać wartość nowej właściwości Size .
$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size
2394
Przykład 3. Dodawanie właściwości StringUse note do ciągu
W tym przykładzie dodano właściwość StringUse note do ciągu. Ponieważ Add-Member
nie można dodać typów do obiektów wejściowych string , można określić parametr PassThru w celu wygenerowania obiektu wyjściowego. Ostatnie polecenie w przykładzie wyświetla nową właściwość.
W tym przykładzie użyto parametru NotePropertyMembers . Wartość parametru NotePropertyMembers jest tabelą skrótów. Klucz jest nazwą właściwości notatki, StringUse, a wartość jest wartością właściwości note, Display.
$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse
Display
Przykład 4. Dodawanie metody skryptu do obiektu FileInfo
W tym przykładzie dodano metodę skryptu SizeInMB do obiektu FileInfo , który oblicza rozmiar pliku do najbliższego megabajta. Drugie polecenie tworzy skryptBlock, który używa metody statycznej Round z [math]
typu, aby zaokrąglić rozmiar pliku do drugiego miejsca dziesiętnego.
Parametr Value używa również zmiennej automatycznej $This
, która reprezentuje bieżący obiekt. Zmienna jest prawidłowa $This
tylko w blokach skryptów, które definiują nowe właściwości i metody.
Ostatnie polecenie używa notacji kropkowej do wywołania nowej metody skryptu SizeInMB na obiekcie w zmiennej $A
.
$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
Przykład 5. Tworzenie obiektu niestandardowego
W tym przykładzie tworzony jest obiekt niestandardowy elementu zawartości .
Polecenie New-Object
cmdlet tworzy obiekt PSObject zapisany w zmiennej $Asset
. Akcelerator [ordered]
typów tworzy uporządkowany słownik przechowywany w zmiennej $d
.
Potokowanie $Asset
w celu Add-Member
dodawania par klucz-wartość w słowniku do obiektu jako elementów członkowskich NoteProperty . Parametr TypeName przypisuje typ Asset
do obiektu PSObject. Polecenie Get-Member
cmdlet pokazuje typ i właściwości obiektu. Jednak właściwości są wymienione w kolejności alfabetycznej, a nie w kolejności, w której zostały dodane.
$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
Inspekcja nieprzetworzonej listy właściwości pokazuje właściwości w kolejności, w której zostały dodane do obiektu. Format-Table
jest używany w tym przykładzie do tworzenia danych wyjściowych podobnych do Get-Member
.
Przykład 6. Dodawanie aliasuWłaściwości do obiektu
W tym przykładzie utworzymy obiekt niestandardowy zawierający dwa elementy członkowskie NoteProperty . Typ właściwości NoteProperty odzwierciedla typ wartości przechowywanej we właściwości. W tym przypadku właściwość Age jest ciągiem.
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
Właściwość intAge jest właściwością AliasProperty właściwości Age , ale typ ma gwarancję uint32.
Przykład 7. Dodawanie metod get i set do obiektu niestandardowego
W tych przykładach pokazano, jak zdefiniować metody Get i Set , które uzyskują dostęp do głęboko zagnieżdżonej właściwości.
$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
Zwróć uwagę, że właściwość Title jest właściwością ScriptProperty , która ma metodę Get i Set . Po przypisaniu nowej wartości do właściwości Title wywoływana jest metoda Set i zmienia wartość właściwości Rola we właściwości Position.
Parametry
-Force
Domyślnie nie można dodać nowego elementu członkowskiego, Add-Member
jeśli obiekt ma już element członkowski o tym samym elemencie.
W przypadku użycia parametru Add-Member
Force zastępuje istniejący element członkowski nowym elementem członkowskim.
Nie można użyć parametru Force , aby zastąpić standardowy element członkowski typu.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-InputObject
Określa obiekt, do którego jest dodawany nowy element członkowski. Wprowadź zmienną zawierającą obiekty lub wpisz polecenie lub wyrażenie, które pobiera obiekty.
Typ: | PSObject |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-MemberType
Określa typ elementu członkowskiego do dodania. Ten parametr jest wymagany. Dopuszczalne wartości tego parametru to:
- AliasProperty
- CodeMethod
- CodeProperty
- UwagaWłaściwość
- ScriptMethod
- ScriptProperty
Aby uzyskać informacje o tych wartościach, zobacz PSMemberTypes, wyliczenie w zestawie POWERShell SDK.
Nie wszystkie obiekty mają każdy typ elementu członkowskiego. Jeśli określisz typ elementu członkowskiego, którego obiekt nie ma, program PowerShell zwróci błąd.
Typ: | PSMemberTypes |
Aliasy: | Type |
Dopuszczalne wartości: | AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Name
Określa nazwę elementu członkowskiego, który dodaje to polecenie cmdlet.
Typ: | String |
Position: | 1 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-NotePropertyMembers
Określa tabelę skrótu lub uporządkowany słownik, który zawiera parę klucz-wartość reprezentującą nazwy właściwości Note i ich wartości. Aby uzyskać więcej informacji na temat tabel skrótów i uporządkowanych słowników w programie PowerShell, zobacz about_Hash_Tables.
Ten parametr został wprowadzony w programie Windows PowerShell 3.0.
Typ: | IDictionary |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-NotePropertyName
Określa nazwę właściwości notatki.
Użyj tego parametru z parametrem NotePropertyValue . Ten parametr jest opcjonalny.
Ten parametr został wprowadzony w programie Windows PowerShell 3.0.
Typ: | String |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-NotePropertyValue
Określa wartość właściwości notatki.
Użyj tego parametru z parametrem NotePropertyName . Ten parametr jest opcjonalny.
Ten parametr został wprowadzony w programie Windows PowerShell 3.0.
Typ: | Object |
Position: | 1 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-PassThru
Zwraca obiekt reprezentujący element, z którym pracujesz. Domyślnie to polecenie cmdlet nie generuje żadnych danych wyjściowych.
W przypadku większości obiektów Add-Member
dodaje nowe elementy członkowskie do obiektu wejściowego. Jeśli jednak obiekt wejściowy jest ciągiem, Add-Member
nie można dodać elementu członkowskiego do obiektu wejściowego. W przypadku tych obiektów użyj parametru PassThru , aby utworzyć obiekt wyjściowy.
W programie Windows PowerShell 2.0 Add-Member
dodano elementy członkowskie tylko do otoki OBIEKTU PSObject , a nie do obiektu. Użyj parametru PassThru , aby utworzyć obiekt wyjściowy dla dowolnego obiektu, który ma otokę PSObject .
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-SecondValue
Określa opcjonalne dodatkowe informacje o elementach członkowskich AliasProperty, ScriptProperty lub CodeProperty.
Jeśli jest używany podczas dodawania aliasuWłaściwości, ten parametr musi być typem danych. Konwersja na określony typ danych jest dodawana do wartości AliasProperty. Jeśli na przykład dodasz aliasProperty , który udostępnia alternatywną nazwę właściwości ciągu, możesz również określić parametr SecondValue elementu System.Int32 , aby wskazać, że wartość tej właściwości ciągu powinna zostać przekonwertowana na liczbę całkowitą podczas uzyskiwania dostępu przy użyciu odpowiedniego aliasuWłaściwości.
W przypadku właściwości CodeProperty wartość musi być odwołaniem do metody, która implementuje metodę Ustawia metodę dostępu. GetMethod()
Użyj metody odwołania typu, aby uzyskać odwołanie do metody. Metoda musi przyjmować jeden parametr, który jest obiektem PSObject. Metodę uzyskiwania dostępu przypisano przy użyciu parametru Value.
W przypadku właściwości ScriptProperty wartość musi być blokiem skryptu, który implementuje metodę dostępu zestawu . Metodę uzyskiwania dostępu przypisano przy użyciu parametru Value.
Typ: | Object |
Position: | 3 |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-TypeName
Określa nazwę typu.
Jeśli typ jest klasą w przestrzeni nazw systemu lub typem, który ma akcelerator typu, możesz wprowadzić krótką nazwę typu. W przeciwnym razie wymagana jest pełna nazwa typu. Ten parametr jest skuteczny tylko wtedy, gdy obiekt InputObject jest obiektem PSObject.
Ten parametr został wprowadzony w programie Windows PowerShell 3.0.
Typ: | String |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Value
Określa początkową wartość dodanego elementu członkowskiego. Jeśli dodasz element członkowski AliasProperty, CodeProperty lub ScriptProperty, możesz podać dodatkowe informacje przy użyciu parametru SecondValue.
- W przypadku aliasuWłaściwości wartość musi być nazwą właściwości, która jest aliasowana.
- W przypadku metody CodeMethod wartość musi być odwołaniem do metody.
GetMethod()
Użyj metody odwołania typu, aby uzyskać odwołanie do metody. - W przypadku właściwości CodeProperty wartość musi być odwołaniem do metody, która implementuje metodę Get accessor.
GetMethod()
Użyj metody odwołania typu, aby uzyskać odwołanie do metody. odniesienie. Metoda musi przyjmować jeden parametr, który jest obiektem PSObject. Zestaw metod dostępu jest przypisywany przy użyciu parametru SecondValue. - W przypadku elementu ScriptMethod wartość musi być blokiem skryptu.
- W przypadku właściwości ScriptProperty wartość musi być blokiem skryptu, który implementuje metodę Uzyskiwanie dostępu. Zestaw metod dostępu jest przypisywany przy użyciu parametru SecondValue.
Typ: | Object |
Position: | 2 |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
Dane wejściowe
Do tego polecenia cmdlet można przekazać dowolny obiekt.
Dane wyjściowe
None
Domyślnie to polecenie cmdlet nie zwraca żadnych danych wyjściowych.
Jeśli używasz parametru PassThru , to polecenie cmdlet zwraca nowo rozszerzony obiekt.
Uwagi
Można dodawać elementy członkowskie tylko do obiektów typu PSObject . Aby określić, czy obiekt jest obiektem PSObject , użyj -is
operatora . Na przykład aby przetestować obiekt przechowywany w zmiennej $obj
, wpisz $obj -is [psobject]
.
Obiekty typu PSObject utrzymują listę elementów członkowskich w kolejności, w których składowe zostały dodane do obiektu.
Nazwy parametrów MemberType, Name, Value i SecondValue są opcjonalne. Jeśli pominięto nazwy parametrów, nienazwane wartości parametrów muszą być wyświetlane w następującej kolejności: MemberType, Name, Value i SecondValue.
Jeśli uwzględnisz nazwy parametrów, parametry mogą być wyświetlane w dowolnej kolejności.
Możesz użyć zmiennej automatycznej $this
w blokach skryptu, które definiują wartości nowych właściwości i metod. Zmienna $this
odwołuje się do wystąpienia obiektu, do którego dodawane są właściwości i metody. Aby uzyskać więcej informacji na temat zmiennej $this
, zobacz about_Automatic_Variables.