Dodawanie parametrów, które przetwarzają dane wejściowe wiersza polecenia
Jednym ze źródeł danych wejściowych dla polecenia cmdlet jest wiersz polecenia. W tym temacie opisano sposób dodawania parametru do polecenia cmdlet (opisanego w temacie Tworzenie pierwszego polecenia cmdlet ), aby polecenie cmdlet może przetwarzać dane wejściowe z komputera lokalnego na podstawie jawnych obiektów przekazanych do polecenia Get-Proc
cmdlet. Opisane tutaj polecenie cmdlet pobiera procesy na podstawie ich nazw, a następnie wyświetla informacje o procesach Get-Proc
w wierszu polecenia.
Definiowanie klasy polecenia cmdlet
Pierwszym krokiem tworzenia polecenia cmdlet jest nazewnictwo i deklaracja klasy .NET Framework, która implementuje polecenie cmdlet. To polecenie cmdlet pobiera informacje o procesie, więc nazwa czasownika wybrana w tym miejscu to "Pobierz". (Niemal każdy rodzaj polecenia cmdlet, które umożliwia pobieranie informacji, może przetwarzać dane wejściowe wiersza polecenia). Aby uzyskać więcej informacji na temat zatwierdzonych czasowników cmdlet, zobacz Nazwy czasowników polecenia cmdlet.
Oto deklaracja klasy dla Get-Proc
polecenia cmdlet . Szczegółowe informacje o tej definicji znajdują się w te tematu Creating Your First Cmdlet (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 parametry i są nazwami Get-Proc
Get-Member
potokowych polecenia cmdlet oraz są parametrami polecenia MemberType
Get-Member
cmdlet . Parametr ma argument "property".
PS> get-proc; get-member
-membertype, właściwość
Aby zadeklarować parametry dla polecenia cmdlet, należy najpierw zdefiniować właściwości, które reprezentują parametry. W poleceniach cmdlet jedynym parametrem jest , który w tym przypadku reprezentuje nazwę obiektu Get-Proc
Name
.NET Framework do pobrania. W związku z tym klasa polecenia cmdlet definiuje właściwość ciągu typu do akceptowania tablicy nazw.
Oto deklaracja parametru Name
dla parametru Get-Proc
polecenia cmdlet .
/// <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 Windows PowerShell, że ta właściwość jest parametrem, do definicji właściwości jest dodawany atrybut Name
System.Management.Automation.Parameterattribute. Podstawowa składnia do deklarowania tego atrybutu to [Parameter()]
.
Uwaga
Parametr musi być jawnie oznaczony jako publiczny. Parametry, które nie są oznaczone jako publiczne domyślne dla wewnętrznego i nie znajdują się w Windows PowerShell uruchomieniowym.
To polecenie cmdlet używa tablicy ciągów dla Name
parametru . Jeśli to możliwe, polecenie cmdlet powinno również definiować parametr jako tablicę, ponieważ dzięki temu polecenie cmdlet może akceptować więcej niż jeden element.
Co należy zapamiętać o definicjach parametrów
Wstępnie zdefiniowane Windows PowerShell parametrów i typów danych powinny być używane ponownie w miarę możliwości, aby upewnić się, że polecenie cmdlet jest zgodne z Windows PowerShell cmdlet. Na przykład jeśli wszystkie polecenia cmdlet używają nazwy wstępnie zdefiniowanego parametru do identyfikowania zasobu, użytkownik będzie łatwo zrozumieć znaczenie parametru, niezależnie od tego, jakiego
Id
polecenia cmdlet używa. Zasadniczo nazwy parametrów są zgodne z tymi samymi regułami, które są używane dla nazw zmiennych w środowisku uruchomieniowym języka wspólnego (CLR). Aby uzyskać więcej informacji na temat nazewnictwa parametrów, zobacz Nazwy parametrów polecenia cmdlet.Windows PowerShell rezerwuje kilka nazw parametrów, aby zapewnić spójne środowisko użytkownika. Nie używaj tych nazw parametrów:
WhatIf
, , , , , , , ,Confirm
iVerbose
Debug
Warn
ErrorAction
ErrorVariable
OutVariable
OutBuffer
. Ponadto następujące aliasy dla tych nazw parametrów są zarezerwowane:vb
, , , , idb
ea
ev
ov
ob
.Name
jest prostą i typową nazwą parametru zalecaną do użycia w poleceniach cmdlet. Lepiej jest wybrać taką nazwę parametru niż nazwę złożoną, która jest unikatowa dla określonego polecenia cmdlet i trudna do zapamiętania.W parametrach nie jest uwzględniania Windows PowerShell, chociaż domyślnie powłoka zachowuje literę. Wrażliwość argumentów na wielkości liter zależy od działania polecenia cmdlet . Argumenty są przekazywane do parametru określonego w wierszu polecenia.
Aby uzyskać przykłady innych deklaracji parametrów, zobacz Parametry polecenia cmdlet.
Deklarowanie parametrów jako pozytywnych lub nazwanych
Polecenie cmdlet musi ustawić każdy parametr jako parametr pozytowy lub nazwany. Oba rodzaje parametrów akceptują pojedyncze argumenty, wiele argumentów rozdzielonych przecinkami i ustawienia logiczne. Parametr logiczny, nazywany również przełącznikiem, obsługuje tylko ustawienia logiczne. Przełącznik służy do określania obecności parametru. Zalecana wartość domyślna to false
.
Przykładowe Get-Proc
polecenie cmdlet definiuje Name
parametr jako parametr pozytowy 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
poza deklaracją atrybutu.
Uwaga
Jeśli parametry nie muszą być nazwane, zaleca się ustawić najczęściej używane parametry jako pozyacyjne, aby użytkownicy nie trzeba było wpisywać nazwy parametru.
Deklarowanie parametrów jako obowiązkowych lub opcjonalnych
Polecenie cmdlet musi ustawić każdy parametr jako opcjonalny lub obowiązkowy. W przykładowym cmdlet parametr jest zdefiniowany jako opcjonalny, ponieważ słowo kluczowe Get-Proc
nie jest ustawione w deklaracji Name
Mandatory
atrybutu.
Obsługa walidacji parametrów
Przykładowe polecenie cmdlet dodaje atrybut weryfikacji danych wejściowych Get-Proc
System.Management.Automation.Validatenotnulloremptyattributedo parametru , aby umożliwić sprawdzenie, czy dane wejściowe nie są ani puste, ani Name
null
puste. Ten atrybut jest jednym z kilku atrybutów weryfikacji dostarczonych przez Windows PowerShell. Aby uzyskać przykłady innych atrybutów walidacji, zobacz Sprawdzanie poprawności danych wejściowych parametru.
[Parameter(Position = 0)]
[ValidateNotNullOrEmpty]
public string[] Name
Zastępowanie metody przetwarzania danych wejściowych
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 zostały wprowadzone w tece Tworzenie pierwszego polecenia cmdlet.
Polecenie Get-Proc
cmdlet zastępuje metodę System.Management.Automation.Cmdlet.ProcessRecord w celu obsługi danych wejściowych parametru dostarczonych przez użytkownika lub Name
skrypt. Ta metoda pobiera procesy dla każdej nazwy żądanego procesu lub wszystkich procesów, jeśli nie podano nazwy. Zwróć uwagę, że w rekordach System.Management.Automation.Cmdlet.ProcessRecordwywołanie do system.Management.Automation.Cmdlet.WriteObject%28System.Object%2CSystem.Boolean%29 jest mechanizmem wyjściowym wysyłania obiektów wyjściowych do potoku. Drugi parametr tego wywołania, , jest ustawiony na , aby poinformować środowisko uruchomieniowe programu Windows PowerShell o wyliczaniu tablicy wyjściowej obiektów procesu i zapisywaniu po jednym procesie w enumerateCollection
true
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ład kodu
Aby uzyskać kompletny przykładowy kod w języku C#, zobacz GetProcessSample02 Sample (Przykład GetProcessSample02).
Definiowanie typów obiektów i formatowania
Windows PowerShell przekazuje informacje między poleceniami cmdlet przy użyciu .NET Framework obiektów. W związku z tym polecenie cmdlet może wymagać zdefiniowania własnego typu lub może być konieczne rozszerzenie istniejącego typu udostępnianego 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.
Tworzenie polecenia cmdlet
Po zaimplementowaniu polecenia cmdlet należy zarejestrować je w Windows PowerShell przy użyciu Windows PowerShell przystawki. Aby uzyskać więcej informacji na temat rejestrowania cmdlet, zobacz Jak rejestrować polecenia cmdlet,dostawców i aplikacje hosta .
Testowanie polecenia cmdlet
Gdy polecenie cmdlet jest zarejestrowane w Windows PowerShell, możesz je przetestować, uruchamiając je w wierszu polecenia. Oto 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 z Windows PowerShell.
W wierszu Windows PowerShell użyj następującego polecenia, aby wyświetlić listę procesu Internet Explorer o nazwie "IEXPLORE".
get-proc -name iexplore
Wyświetlone są 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 iexplore
Aby wyświetlić listę Internet Explorer, Outlook i Notatnik o nazwach "IEXPLORE", "OUTLOOK" i "NOTEPAD", użyj następującego polecenia. Jeśli istnieje wiele procesów, zostaną wyświetlone wszystkie z nich.
get-proc -name iexplore, outlook, notepad
Wyświetlone są 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 przetwarzają dane wejściowe potoku
Tworzenie pierwszego polecenia cmdlet
Rozszerzanie typów obiektów i formatowanie
Jak rejestrować polecenia cmdlet, dostawców i aplikacje hosta
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla