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.
Jednym ze źródeł danych wejściowych dla polecenia cmdlet jest wiersz polecenia. W tym temacie opisano sposób dodawania parametru do polecenia cmdlet Get-Proc (opisanego w Creating Your First Cmdlet), dzięki czemu polecenie cmdlet może przetwarzać dane wejściowe z komputera lokalnego na podstawie jawnych obiektów przekazanych do polecenia cmdlet. Polecenie cmdlet Get-Proc opisane tutaj pobiera procesy na podstawie ich nazw, a następnie wyświetla informacje o procesach w wierszu polecenia.
Definiowanie klasy poleceń cmdlet
Pierwszym krokiem tworzenia polecenia cmdlet jest nazewnictwo poleceń cmdlet i deklaracja klasy .NET Framework, która implementuje polecenie cmdlet. To polecenie cmdlet pobiera informacje o procesie, więc nazwa zlecenia wybrana tutaj to "Pobierz". (Prawie każde polecenie cmdlet, które może pobierać informacje, może przetwarzać dane wejściowe wiersza polecenia). Aby uzyskać więcej informacji na temat zatwierdzonych czasowników poleceń cmdlet, zobacz Cmdlet Verb Names.
Oto deklaracja klasy dla polecenia cmdlet Get-Proc. Szczegółowe informacje o tej definicji znajdują się w Tworzenie pierwszego polecenia cmdlet.
[Cmdlet(VerbsCommon.Get, "proc")]
public class GetProcCommand: Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
Inherits Cmdlet
Deklarowanie parametrów
Parametr polecenia cmdlet umożliwia użytkownikowi podanie danych wejściowych polecenia cmdlet. W poniższym przykładzie Get-Proc i Get-Member są nazwami poleceń cmdlet potoku, a MemberType jest parametrem polecenia cmdlet Get-Member. Parametr ma argument "property".
> Get-Proc PS; Get-Member -MemberType właściwości
Aby zadeklarować parametry polecenia cmdlet, należy najpierw zdefiniować właściwości reprezentujące parametry. W Get-Proc cmdlet jedynym parametrem jest Name, który w tym przypadku reprezentuje nazwę obiektu procesu .NET Framework do pobrania. W związku z tym klasa poleceń cmdlet definiuje właściwość ciągu typu, aby akceptować tablicę nazw.
Oto deklaracja parametru dla parametru Name polecenia cmdlet Get-Proc.
/// <summary>
/// Specify the cmdlet Name parameter.
/// </summary>
[Parameter(Position = 0)]
[ValidateNotNullOrEmpty]
public string[] Name
{
get { return processNames; }
set { processNames = value; }
}
private string[] processNames;
#endregion Parameters
<Parameter(Position:=0), ValidateNotNullOrEmpty()> _
Public Property Name() As String()
Get
Return processNames
End Get
Set(ByVal value As String())
processNames = value
End Set
End Property
Aby poinformować środowisko uruchomieniowe programu Windows PowerShell, że ta właściwość jest parametrem Name, atrybut System.Management.Automation.ParameterAttribute jest dodawany do definicji właściwości. Podstawowa składnia deklarowania tego atrybutu to [Parameter()].
Uwaga
Parametr musi być jawnie oznaczony jako publiczny. Parametry, które nie są oznaczone jako domyślne publiczne do wewnętrznej i nie są znalezione przez środowisko uruchomieniowe programu Windows PowerShell.
To polecenie cmdlet używa tablicy ciągów dla parametru Name. Jeśli to możliwe, polecenie cmdlet powinno również zdefiniować parametr jako tablicę, ponieważ umożliwia to polecenie cmdlet akceptowanie więcej niż jednego elementu.
Co należy pamiętać o definicjach parametrów
Wstępnie zdefiniowane nazwy parametrów programu Windows PowerShell i typy danych powinny być ponownie używane tak samo, jak to możliwe, aby upewnić się, że polecenie cmdlet jest zgodne z poleceniami cmdlet programu Windows PowerShell. Jeśli na przykład wszystkie polecenia cmdlet używają wstępnie zdefiniowanej nazwy parametru
Iddo identyfikowania zasobu, użytkownik łatwo zrozumie znaczenie parametru, niezależnie od używanego polecenia cmdlet. Zasadniczo nazwy parametrów są zgodne z tymi samymi regułami, co nazwy zmiennych w środowisku uruchomieniowym języka wspólnego (CLR). Aby uzyskać więcej informacji na temat nazewnictwa parametrów, zobacz nazwach parametrów cmdlet.Program Windows PowerShell rezerwuje kilka nazw parametrów, aby zapewnić spójne środowisko użytkownika. Nie używaj tych nazw parametrów:
WhatIf,Confirm,Verbose,Debug,Warn,ErrorAction,ErrorVariable,OutVariableiOutBuffer. Ponadto następujące aliasy dla tych nazw parametrów są zarezerwowane:vb,db,ea,ev,oviob.Namejest prostą i typową nazwą parametru zalecaną do użycia w poleceniach cmdlet. Lepiej jest wybrać nazwę parametru podobną do tej niż nazwa złożona, która jest unikatowa dla określonego polecenia cmdlet i trudno ją zapamiętać.Parametry nie są uwzględniane wielkości liter w programie Windows PowerShell, chociaż domyślnie powłoka zachowuje wielkość liter. Ważność wielkości liter argumentów zależy od działania polecenia cmdlet. Argumenty są przekazywane do parametru określonego w wierszu polecenia.
Przykłady innych deklaracji parametrów można znaleźć w temacie Cmdlet Parameters.
Deklarowanie parametrów jako pozycyjnych lub nazwanych
Polecenie cmdlet musi ustawić każdy parametr jako pozycyjny lub nazwany parametr. Oba rodzaje parametrów akceptują pojedyncze argumenty, wiele argumentów rozdzielonych przecinkami i ustawieniami logicznymi. Parametr logiczny, nazywany również przełącznikiem , obsługuje tylko ustawienia logiczne. Przełącznik służy do określania obecności parametru. Zalecaną wartością domyślną jest false.
Przykładowe polecenie cmdlet Get-Proc definiuje parametr Name jako parametr pozycyjny z pozycją 0. Oznacza to, że pierwszy argument wprowadzony przez użytkownika w wierszu polecenia jest automatycznie wstawiany dla tego parametru. Jeśli chcesz zdefiniować nazwany parametr, dla którego użytkownik musi określić nazwę parametru z wiersza polecenia, pozostaw słowo kluczowe Position z deklaracji atrybutu.
Uwaga
Jeśli parametry nie muszą być nazwane, zaleca się, aby pozycyjne najczęściej używane parametry, aby użytkownicy nie musieli wpisywać nazwy parametru.
Deklarowanie parametrów jako obowiązkowe lub opcjonalne
Polecenie cmdlet musi ustawić każdy parametr jako opcjonalny lub obowiązkowy. W przykładowym poleceniu cmdlet Get-Proc parametr Name jest zdefiniowany jako opcjonalny, ponieważ słowo kluczowe Mandatory nie jest ustawione w deklaracji atrybutu.
Walidacja parametru pomocniczego
Przykładowe polecenie cmdlet Get-Proc dodaje atrybut weryfikacji danych wejściowych, System.Management.Automation.ValidateNotNullOrEmptyAttribute, do parametru Name w celu włączenia weryfikacji, czy dane wejściowe nie są null ani puste. Ten atrybut jest jednym z kilku atrybutów weryfikacji udostępnianych przez program Windows PowerShell. Aby zapoznać się z przykładami innych atrybutów weryfikacji, zobacz Sprawdzanie poprawności danych wejściowych parametru.
[Parameter(Position = 0)]
[ValidateNotNullOrEmpty]
public string[] Name
Zastępowanie metody przetwarzania wejściowego
Jeśli polecenie cmdlet ma obsługiwać dane wejściowe wiersza polecenia, musi zastąpić odpowiednie metody przetwarzania danych wejściowych. Podstawowe metody przetwarzania danych wejściowych są wprowadzane w Tworzenie pierwszego polecenia cmdlet.
Polecenie cmdlet Get-Proc zastępuje metodę System.Management.Automation.Cmdlet.ProcessRecord w celu obsługi danych wejściowych parametru Name dostarczonych przez użytkownika lub skrypt. Ta metoda pobiera procesy dla każdej żądanej nazwy procesu lub wszystkie dla procesów, jeśli nie podano nazwy. Zwróć uwagę, że w System.Management.Automation.Cmdlet.ProcessRecordwywołanie System.Management.Automation.Cmdlet.WriteObject jest mechanizmem wyjściowym wysyłania obiektów wyjściowych do potoku. Drugi parametr tego wywołania, enumerateCollection, jest ustawiony na true, aby poinformować środowisko uruchomieniowe programu Windows PowerShell, aby wyliczyć tablicę wyjściową obiektów procesu i napisać jeden proces jednocześnie w wierszu polecenia.
protected override void ProcessRecord()
{
// If no process names are passed to the cmdlet, get all processes.
if (processNames == null)
{
// Write the processes to the pipeline making them available
// to the next cmdlet. The second argument of this call tells
// PowerShell to enumerate the array, and send one process at a
// time to the pipeline.
WriteObject(Process.GetProcesses(), true);
}
else
{
// If process names are passed to the cmdlet, get and write
// the associated processes.
foreach (string name in processNames)
{
WriteObject(Process.GetProcessesByName(name), true);
}
}
}
Protected Overrides Sub ProcessRecord()
'/ If no process names are passed to the cmdlet, get all processes.
If processNames Is Nothing Then
Dim processes As Process()
processes = Process.GetProcesses()
End If
'/ If process names are specified, write the processes to the
'/ pipeline to display them or make them available to the next cmdlet.
For Each name As String In processNames
'/ The second parameter of this call tells PowerShell to enumerate the
'/ array, and send one process at a time to the pipeline.
WriteObject(Process.GetProcessesByName(name), True)
Next
End Sub 'ProcessRecord
Przykładowy kod
Aby uzyskać pełny przykładowy kod w języku C#, zobacz GetProcessSample02 Sample.
Definiowanie typów obiektów i formatowanie
Program Windows PowerShell przekazuje informacje między poleceniami cmdlet przy użyciu obiektów programu .NET Framework. W związku z tym może być konieczne zdefiniowanie własnego typu polecenia cmdlet lub może być konieczne rozszerzenie istniejącego typu dostarczonego przez inne polecenie cmdlet. Aby uzyskać więcej informacji na temat definiowania nowych typów lub rozszerzania istniejących typów, zobacz Rozszerzanie typów obiektów i formatowanie.
Kompilowanie polecenia cmdlet
Po zaimplementowaniu polecenia cmdlet należy zarejestrować je w programie Windows PowerShell przy użyciu przystawki programu Windows PowerShell. Aby uzyskać więcej informacji na temat rejestrowania poleceń cmdlet, zobacz Jak rejestrować polecenia cmdlet, dostawcy i aplikacje hosta.
Testowanie polecenia cmdlet
Po zarejestrowaniu polecenia cmdlet w programie Windows PowerShell można go przetestować, uruchamiając je w wierszu polecenia. Poniżej przedstawiono dwa sposoby testowania kodu dla przykładowego polecenia cmdlet. Aby uzyskać więcej informacji na temat używania poleceń cmdlet z wiersza polecenia, zobacz Wprowadzenie do programu Windows PowerShell.
W wierszu polecenia programu Windows PowerShell użyj następującego polecenia, aby wyświetlić listę procesów programu Internet Explorer o nazwie "IEXPLORE".
Get-Proc -Name iexploreZostanie wyświetlone następujące dane wyjściowe.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 354 11 10036 18992 85 0.67 3284 iexploreAby wyświetlić listę procesów programów Internet Explorer, Outlook i Notatnik o nazwach "IEXPLORE", "OUTLOOK" i "NOTATNIK", użyj następującego polecenia. Jeśli istnieje wiele procesów, zostaną wyświetlone wszystkie z nich.
Get-Proc -Name iexplore, outlook, notepadZostanie wyświetlone następujące dane wyjściowe.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 732 21 24696 5000 138 2.25 2288 iexplore 715 19 20556 14116 136 1.78 3860 iexplore 3917 62 74096 58112 468 191.56 1848 OUTLOOK 39 2 1024 3280 30 0.09 1444 notepad 39 2 1024 356 30 0.08 3396 notepad
Zobacz też
dodawanie parametrów, które wejściowe potoku przetwarzania
tworzenie pierwszego polecenia cmdlet
rozszerzanie typów obiektów i formatowanie
Jak rejestrować polecenia cmdlet, dostawcy i aplikacje hosta