Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Program PowerShell używa obiektu PSObject w celu rozszerzenia typów obiektów na dwa sposoby. Najpierw obiekt psObject umożliwia wyświetlanie różnych widoków określonych typów obiektów. Jest to nazywane wyświetlaniem dostosowanego widoku obiektu. Po drugie obiekt PSObject umożliwia dodawanie elementów członkowskich do istniejącego obiektu. Razem, opakowując istniejący obiekt, określany jako obiekt podstawowy, obiekt PSObject zapewnia rozszerzony system typów (ETS), którego deweloperzy skryptów i poleceń cmdlet mogą używać do manipulowania obiektami platformy .NET w powłoce.
Problemy z programowaniem poleceń cmdlet i skryptów
SYSTEM ETS rozwiązuje dwa podstawowe problemy:
Po pierwsze, niektóre obiekty platformy .NET nie mają niezbędnego domyślnego zachowania do działania jako dane między poleceniami cmdlet.
- Niektóre obiekty platformy .NET to obiekty meta (na przykład obiekty WMI, obiekty ADO i obiekty XML), których elementy członkowskie opisują zawarte w nich dane. Jednak w środowisku skryptowym jest to zawarte dane, które są najbardziej interesujące, a nie opis zawartych danych. ETS rozwiązuje ten problem, wprowadzając pojęcie adapterów, które dostosowują bazowy obiekt platformy .NET do oczekiwanej semantyki domyślnej.
- Niektóre elementy członkowskie obiektów platformy .NET są stale nazwane, zapewniają niewystarczający zestaw elementów członkowskich publicznych lub zapewniają niewystarczającą możliwość. ETS rozwiązuje ten problem, wprowadzając możliwość rozszerzenia obiektu platformy .NET o dodatkowe elementy członkowskie.
Po drugie język skryptów programu PowerShell jest bez wpisywania w tym, że zmienna nie musi być zadeklarowana dla określonego typu. Oznacza to, że zmienne tworzone przez dewelopera skryptów są z natury bez wpisywania. Jednak system programu PowerShell jest "sterowany typem", w którym zależy od nazwy typu do działania dla podstawowych operacji, takich jak wyprowadzanie wyników lub sortowanie.
W związku z tym deweloper skryptów musi mieć możliwość stanu typu jednej ze swoich zmiennych i utworzyć własny zestaw dynamicznie typowanych "obiektów", które zawierają właściwości i metody, i mogą uczestniczyć w systemie opartym na typie. ETS rozwiązuje ten problem, udostępniając wspólny obiekt dla języka skryptowego, który ma możliwość dynamicznego informowania o swoim typie i dynamicznego dodawania elementów członkowskich.
Zasadniczo ETS rozwiązuje wspomniany wcześniej problem, udostępniając obiekt PSObject, który działa jako podstawa dostępu do wszystkich obiektów z języka skryptowego i zapewnia standardową abstrakcję dla dewelopera poleceń cmdlet.
Deweloperzy poleceń cmdlet
W przypadku deweloperów poleceń cmdlet system ETS zapewnia następującą obsługę:
- Abstrakcje do pracy z obiektami w ogólny sposób przy użyciu obiektu PSObject. SYSTEM ETS umożliwia również przechodzenie do szczegółów tych abstrakcji, jeśli jest to wymagane.
- Mechanizmy tworzenia domyślnego zachowania formatowania, sortowania, serializacji i innych manipulacji systemowych typu obiektu przy użyciu dobrze znanego zestawu rozszerzonych elementów członkowskich.
- Środki do działania względem dowolnego obiektu przy użyciu tej samej semantyki co język skryptu przy użyciu obiektu LanguagePrimitives.
- Metoda dynamicznego "wpisz" tabelę skrótów, tak aby reszta systemu mogła działać względem niej skutecznie.
Deweloperzy skryptów
W przypadku deweloperów skryptów system ETS zapewnia następujące wsparcie:
- Możliwość odwołowania się do dowolnego typu obiektu bazowego przy użyciu tej samej składni (
$a.x). - Możliwość dostępu poza abstrakcję zapewnianą przez obiekt PSObject (na przykład uzyskiwanie dostępu tylko do dostosowanych elementów członkowskich lub uzyskiwanie dostępu do samego obiektu podstawowego).
- Możliwość definiowania dobrze znanych elementów członkowskich, które kontrolują formatowanie, sortowanie, serializacji i inne manipulacje wystąpienia lub typu obiektu.
- Oznacza to, aby nazwać obiekt jako określony typ, a tym samym kontrolować dziedziczenie jego składowych opartych na typie.
- Możliwość dodawania, usuwania i modyfikowania rozszerzonych elementów członkowskich.
- Możliwość manipulowania obiektem PSObject w razie potrzeby.
Klasa PSObject
Obiekt PSObject jest podstawą dostępu do wszystkich obiektów z języka skryptów i zapewnia standardową abstrakcję dla dewelopera poleceń cmdlet. Zawiera obiekt podstawowy (obiekt .NET) i wszystkie elementy członkowskie wystąpienia (elementy członkowskie, w szczególności rozszerzone elementy członkowskie, które znajdują się w konkretnym wystąpieniu obiektu, niekoniecznie na innych obiektach tego samego typu). W zależności od typu obiektu podstawowego obiekt obiektu PSObject może również zapewnić niejawny i jawny dostęp do dostosowanych elementów członkowskich, a także wszystkich elementów rozszerzonych opartych na typach.
Obiekt PSObject zapewnia następujące mechanizmy:
- Możliwość konstruowania PSObject z lub bez obiektu podstawowego.
- Możliwość dostępu do wszystkich elementów członkowskich każdego skonstruowanego obiektu psObject za pomocą wspólnego algorytmu wyszukiwania i możliwości zastąpienia tego algorytmu, jeśli jest to wymagane.
- Możliwość pobierania i ustawiania nazw typów skonstruowanych obiektów PSObject tak, aby skrypty i polecenia cmdlet mogły odwoływać się do podobnych obiektów PSObject według tej samej nazwy typu, niezależnie od typu ich obiektu podstawowego.
Jak utworzyć obiekt PSObject
Na poniższej liście opisano sposoby tworzenia obiektu PSObject:
- Wywołanie konstruktora PSObject .#ctor tworzy nowy obiekt PSObject z obiektem base-object obiektu PSCustomObject. Obiekt podstawowy tego typu wskazuje, że obiekt PSObject nie ma znaczącego obiektu podstawowego. Jednak obiekt PSObject z tym typem obiektu podstawowego zapewnia torbę właściwości, którą deweloperzy poleceń cmdlet mogą znaleźć, dodając rozszerzone elementy członkowskie.
Deweloperzy mogą również określić nazwę typu obiektu, która umożliwia temu obiektowi udostępnianie jego rozszerzonych elementów członkowskich innym obiektom psObject obiektów o tej samej nazwie typu.
Wywołanie konstruktora PSObject .#ctor(System.Object) tworzy nowy obiekt PSObject z obiektem podstawowym typu System.Object.
W tym przypadku nazwa typu utworzonego obiektu jest kolekcją hierarchii wyprowadzania obiektu podstawowego. Na przykład nazwa-typu dla PSObject, która zawiera obiekt podstawowy ProcessInfo, będzie zawierać następujące nazwy:
- System.Diagnostics.Process
- System.ComponentModel.Component
- System.MarshalByRefObject
- System.Object
Wywoływanie PSObject. AsPSObject(System.Object) metoda tworzy nowy obiekt PSObject oparty na podanym obiekcie.
Jeśli podany obiekt jest typu System.Object, podany obiekt jest używany jako obiekt podstawowy dla nowego obiektu PSObject. Jeśli podany obiekt jest już obiektem psObject, podany obiekt jest zwracany w następujący sposób.
Składowe podstawowe, dostosowane i rozszerzone
Koncepcyjnie system ETS używa następujących terminów, aby pokazać relację między oryginalnymi elementami członkowskimi obiektu podstawowego a elementami członkowskimi dodanymi przez program PowerShell. Aby uzyskać więcej informacji na temat określonych typów składowych używanych przez obiekt PSObject, zobacz klasy PSObject.
Elementy członkowskie obiektu podstawowego
Jeśli obiekt podstawowy jest określony podczas konstruowania obiektów PSObject, elementy członkowskie obiektu podstawowego są udostępniane za pośrednictwem właściwości Elementy członkowskie.
Zaadaptowane elementy członkowskie
Gdy obiekt podstawowy jest meta-obiektem, który zawiera dane w ogólny sposób, którego właściwości "opisują" zawarte w nich dane, ETS dostosowuje te obiekty do widoku, który umożliwia bezpośredni dostęp do danych za pośrednictwem dostosowanych elementów członkowskich obiektu PSObject. Zaadaptowane elementy członkowskie i elementy członkowskie obiektu podstawowego są dostępne za pośrednictwem właściwości Elementy członkowskie.
Rozszerzone elementy członkowskie
Oprócz elementów członkowskich udostępnionych z obiektu podstawowego lub tych dostosowanych elementów członkowskich utworzonych przez program PowerShell, PSObject może również definiować rozszerzone elementy członkowskie, które rozszerzają oryginalny obiekt podstawowy z dodatkowymi informacjami przydatnymi w środowisku skryptów.
Na przykład wszystkie podstawowe polecenia cmdlet udostępniane przez program PowerShell, takie jak polecenia cmdlet Get-Content i Set-Content, przyjmują parametr Path. Aby upewnić się, że te polecenia cmdlet i inne mogą działać względem obiektów różnych typów, element członkowski ścieżki można dodać do tych obiektów, aby wszystkie informacje były w wspólny sposób. Ten rozszerzony element członkowski ścieżki zapewnia, że polecenia cmdlet mogą działać względem wszystkich tych typów, mimo że klasa bazowa może nie mieć składowej ścieżki.
Rozszerzone elementy członkowskie, dostosowane elementy członkowskie i elementy członkowskie obiektu podstawowego są dostępne za pośrednictwem właściwości Członkowie.