Polecenia cmdlet — omówienie

Polecenie cmdlet to uproszczone polecenie, które jest używane w środowisku programu PowerShell. Środowisko uruchomieniowe programu PowerShell wywołuje te polecenia cmdlet w kontekście skryptów automatyzacji dostarczanych w wierszu polecenia. Środowisko uruchomieniowe programu PowerShell wywołuje je również programowo za pośrednictwem interfejsów API programu PowerShell.

Polecenia cmdlet

Polecenia cmdlet wykonują akcję i zazwyczaj zwracają Microsoft .NET do następnego polecenia w potoku. Polecenie cmdlet to pojedyncze polecenie, które uczestniczy w semantyce potoku programu PowerShell. Obejmuje to binarne polecenia cmdlet (C#), zaawansowane funkcje skryptów, język CDXML i przepływy pracy.

W tej dokumentacji zestawu SDK opisano sposób tworzenia binarnych cmdlet napisanych w języku C#. Aby uzyskać informacje o poleceniach cmdlet opartych na skryptach, zobacz:

Aby utworzyć binarne polecenie cmdlet, należy zaimplementować klasę polecenia cmdlet pochodzącą z jednej z dwóch wyspecjalizowanych klas bazowych polecenia cmdlet. Klasa pochodna musi:

  • Zadeklaruj atrybut, który identyfikuje klasę pochodną jako polecenie cmdlet.
  • Zdefiniuj właściwości publiczne, które są dekorowane atrybutami, które identyfikują właściwości publiczne jako parametry polecenia cmdlet.
  • Przesłoń co najmniej jedną z metod przetwarzania danych wejściowych w celu przetwarzania rekordów.

Zestaw zawierający klasę można załadować bezpośrednio przy użyciu polecenia cmdlet Import-Module. Można też utworzyć aplikację hosta, która ładuje zestaw przy użyciu interfejsu API System.Management.Automation.Runspaces.Initialsessionstate. Obie metody zapewniają dostęp programowy i wiersza polecenia do funkcji polecenia cmdlet.

Warunki polecenia cmdlet

Następujące terminy są często używane w dokumentacji poleceń cmdlet programu PowerShell:

Atrybut polecenia cmdlet

Atrybut .NET używany do deklarowania klasy polecenia cmdlet jako polecenia cmdlet. Mimo że program PowerShell używa kilku innych atrybutów, które są opcjonalne, wymagany jest atrybut polecenia cmdlet. Aby uzyskać więcej informacji na temat tego atrybutu, zobacz Deklaracji atrybutu polecenia cmdlet.

Parametr polecenia cmdlet

Właściwości publiczne definiujące parametry dostępne dla użytkownika lub dla aplikacji, w przypadku których jest uruchomione polecenie cmdlet . Polecenia cmdlet mogą mieć parametry wymagane, nazwane, pozyacyjne i switch. Parametry przełącznika umożliwiają definiowanie parametrów, które są oceniane tylko wtedy, gdy parametry są określone w wywołaniu. Aby uzyskać więcej informacji na temat różnych typów parametrów, zobacz Parametry polecenia cmdlet.

Zestaw parametrów

Grupa parametrów, których można użyć w tym samym poleceniu do wykonania określonej akcji. Polecenie cmdlet może mieć wiele zestawów parametrów, ale każdy zestaw parametrów musi mieć co najmniej jeden parametr, który jest unikatowy. Dobry projekt polecenia cmdlet zdecydowanie sugeruje, że unikatowy parametr również jest parametrem wymaganym. Aby uzyskać więcej informacji na temat zestawów parametrów, zobacz Zestawy parametrów polecenia cmdlet.

Parametr dynamiczny

Parametr dodawany do polecenia cmdlet w czasie wykonywania. Zazwyczaj parametry dynamiczne są dodawane do polecenia cmdlet, gdy inny parametr jest ustawiony na określoną wartość. Aby uzyskać więcej informacji na temat parametrów dynamicznych, zobacz Parametry dynamiczne polecenia cmdlet.

Metody przetwarzania danych wejściowych

Klasa System.Management.Automation.Cmdlet udostępnia następujące metody wirtualne, które są używane do przetwarzania rekordów. Wszystkie pochodne klasy polecenia cmdlet muszą przesłonić co najmniej jedną z trzech pierwszych metod:

Aby uzyskać więcej informacji na temat tych metod, zobacz Metody przetwarzania danych wejściowych polecenia cmdlet.

Podczas implementowania polecenia cmdlet należy zastąpić co najmniej jedną z tych metod przetwarzania danych wejściowych. Zazwyczaj metoda ProcessRecord() jest zastępowana, ponieważ jest wywoływana dla każdego rekordu, który przetwarza polecenie cmdlet. Z kolei metoda BeginProcessing() i metoda EndProcessing() są wywoływane jeden raz w celu wykonania przetwarzania wstępnego lub końcowego rekordów. Aby uzyskać więcej informacji na temat tych metod, zobacz Metody przetwarzania danych wejściowych.

Funkcja ShouldProcess

Program PowerShell umożliwia tworzenie poleceń cmdlet, które monitować użytkownika o opinię, zanim polecenie cmdlet zmieni system. Aby użyć tej funkcji, polecenie cmdlet musi zadeklarować, że obsługuje funkcję podczas deklarowania atrybutu polecenia cmdlet, a polecenie cmdlet musi wywołać metody ShouldProcess System.Management.Automation.Cmdlet.ShouldProcess i System.Management.Automation.Cmdlet.ShouldContinue z metody przetwarzania danych wejściowych. Aby uzyskać więcej informacji na temat sposobu obsługi ShouldProcess funkcji, zobacz Żądanie potwierdzenia.

Transakcja

Logiczna grupa poleceń, które są traktowane jako pojedyncze zadanie. Zadanie automatycznie kończy się niepowodzeniem, jeśli jakiekolwiek polecenie w grupie zakończy się niepowodzeniem, a użytkownik może zaakceptować lub odrzucić akcje wykonywane w ramach transakcji. Aby uczestniczyć w transakcji, polecenie cmdlet musi zadeklarować, że obsługuje transakcje, gdy atrybut polecenia cmdlet jest zadeklarowany. Obsługa transakcji została wprowadzona w Windows PowerShell 2.0. Aby uzyskać więcej informacji na temat transakcji, zobacz How to Support Transactions (Jak obsługiwać transakcje).

Czym różnią się polecenia cmdlet od poleceń

Polecenia cmdlet różnią się od poleceń w innych środowiskach powłoki poleceń w następujący sposób:

  • Polecenia cmdlet to wystąpienia klas .NET; Nie są to autonomiczne pliki wykonywalne.
  • Polecenia cmdlet można utworzyć z zaledwie kilkunastu wierszy kodu.
  • Polecenia cmdlet zazwyczaj nie analizują, nie prezentują błędów ani nie formatują danych wyjściowych. Analizowanie, prezentacja błędów i formatowanie danych wyjściowych są obsługiwane przez środowisko uruchomieniowe programu PowerShell.
  • Polecenia cmdlet przetwarzają obiekty wejściowe z potoku, a nie ze strumieni tekstu, a polecenia cmdlet zwykle dostarczają obiekty jako dane wyjściowe do potoku.
  • Polecenia cmdlet są zorientowane na rekord, ponieważ przetwarzają pojedynczy obiekt na raz.

Klasy bazowe polecenia cmdlet

Windows PowerShell obsługuje polecenia cmdlet pochodzące z następujących dwóch klas bazowych.

  • Większość polecenia cmdlet jest oparta na klasach .NET, które pochodzą z klasy bazowej System.Management.Automation.Cmdlet. Wyprowadzanie z tej klasy umożliwia polecenie cmdlet używanie minimalnego zestawu zależności w środowisku Windows PowerShell uruchomieniowym. Ma to dwie zalety. Pierwszą korzyścią jest to, że obiekty poleceń cmdlet są mniejsze i zmiany w środowisku uruchomieniowym programu PowerShell będą mniej prawdopodobne. Drugą korzyścią jest to, że jeśli jest to konieczne, możesz bezpośrednio utworzyć wystąpienie obiektu polecenia cmdlet, a następnie wywołać je bezpośrednio zamiast wywoływania go za pośrednictwem środowiska uruchomieniowego programu PowerShell.

  • Bardziej złożone polecenia cmdlet są oparte na klasach .NET, które pochodzą z klasy bazowej System.Management.Automation.PSCmdlet. Wyprowadzanie z tej klasy zapewnia znacznie większy dostęp do środowiska uruchomieniowego programu PowerShell. Dzięki temu dostępowi polecenie cmdlet może wywołać skrypty, uzyskać dostęp do dostawców i uzyskać dostęp do bieżącego stanu sesji. (Aby uzyskać dostęp do bieżącego stanu sesji, można pobrać i ustawić zmienne sesji i preferencje). Jednak wyprowadzanie z tej klasy zwiększa rozmiar obiektu polecenia cmdlet i oznacza, że polecenie cmdlet jest ściślej powiązane z bieżącą wersją środowiska uruchomieniowego programu PowerShell.

Ogólnie rzecz biorąc, o ile nie jest potrzebny rozszerzony dostęp do środowiska uruchomieniowego programu PowerShell, należy korzystać z klasy System.Management.Automation.Cmdlet. Jednak środowisko uruchomieniowe programu PowerShell ma rozbudowane możliwości rejestrowania wykonywania poleceń cmdlet. Jeśli model inspekcji zależy od tego rejestrowania, możesz uniemożliwić wykonanie polecenia cmdlet z poziomu innego polecenia cmdlet, wyprowadzając go z klasy System.Management.Automation.PSCmdlet.

Atrybuty poleceń cmdlet

Program PowerShell definiuje kilka atrybutów .NET, które są używane do zarządzania poleceniami cmdlet i określania typowych funkcji dostarczanych przez program PowerShell, które mogą być wymagane przez polecenie cmdlet . Na przykład atrybuty są używane do wyznaczania klasy jako polecenia cmdlet, określania parametrów polecenia cmdlet i żądania weryfikacji danych wejściowych, dzięki czemu deweloperzy nie muszą implementować tej funkcji w kodzie polecenia cmdlet. Aby uzyskać więcej informacji na temat atrybutów, zobacz Atrybuty programu PowerShell.

Nazwy polecenia cmdlet

Program PowerShell używa pary nazw czasowników i rzeczowników do nazywania poleceń cmdlet. Na przykład polecenie cmdlet zawarte w programie PowerShell służy do uzyskania wszystkich poleceń cmdlet zarejestrowanych w Get-Command powłoki poleceń. Czasownik identyfikuje akcję, którą wykonuje polecenie cmdlet, a rzeczownik identyfikuje zasób, na którym polecenie cmdlet wykonuje swoją akcję.

Te nazwy są określane, gdy klasa .NET jest zadeklarowana jako polecenie cmdlet. Aby uzyskać więcej informacji na temat deklarowania klasy .NET jako polecenia cmdlet, zobacz Deklarację atrybutu polecenia cmdlet.

Pisanie kodu polecenia cmdlet

Ten dokument zawiera dwa sposoby odnajdywania sposobu pisano kod polecenia cmdlet. Jeśli wolisz zobaczyć kod bez większego wyjaśnienia, zobacz Przykłady kodu polecenia cmdlet. Jeśli wolisz uzyskać więcej informacji na temat kodu, zobacz tematy GetProc Tutorial , StopProc Tutorial (Samouczek GetProc),StopProc Tutorial (Samouczek StopProc) lub SelectStr Tutorial (Samouczek SelectStr).

Aby uzyskać więcej informacji na temat wytycznych dotyczących pisania polecenia cmdlet, zobacz Cmdlet Development Guidelines.

Zobacz też

Zagadnienia dotyczące poleceń cmdlet programu PowerShell

Pisanie polecenia cmdlet programu PowerShell

PowerShell SDK