Dodawanie parametrów, które przetwarzają dane wejściowe potoku
Jednym ze źródeł danych wejściowych dla polecenia cmdlet jest obiekt w potoku, który pochodzi z nadrzędnego polecenia cmdlet. W tej sekcji opisano sposób dodawania parametru do polecenia cmdlet Get-Proc (opisanego w temacie Creating Your First Cmdlet ) (Tworzenie pierwszego polecenia cmdlet),aby polecenie cmdlet umożliwiało przetwarzanie obiektów potoku.
To Get-Proc cmdlet używa parametru, który akceptuje dane wejściowe z obiektu potoku, pobiera informacje o procesach z komputera lokalnego na podstawie podanych nazw, a następnie wyświetla informacje o procesach w wierszu Name
polecenia.
Definiowanie klasy polecenia cmdlet
Pierwszym krokiem podczas tworzenia polecenia cmdlet jest zawsze nazewnictwo polecenia cmdlet i deklarowanie klasy .NET, która implementuje polecenie cmdlet. To polecenie cmdlet pobiera informacje o procesie, więc wybrana tutaj nazwa czasownika to "Get". (Niemal każdy rodzaj polecenia cmdlet, które może uzyskać informacje, 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.
Poniżej przedstawiono definicję tego polecenia cmdlet Get-Proc . Szczegółowe informacje o tej definicji znajdują się w tece 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
Definiowanie danych wejściowych z potoku
W tej sekcji opisano sposób definiowania danych wejściowych z potoku dla polecenia cmdlet. To Get-Proc cmdlet definiuje właściwość, która reprezentuje parametr zgodnie z opisem w tece Dodawanie parametrów, które przetwarzają Name
dane wejściowe wiersza polecenia.
(Zobacz ten temat, aby uzyskać ogólne informacje na temat deklarowania parametrów).
Jeśli jednak polecenie cmdlet musi przetworzyć dane wejściowe potoku, jego parametry muszą być powiązane z wartościami wejściowymi przez Windows PowerShell uruchomieniowego. W tym celu należy dodać słowo kluczowe lub słowo kluczowe do deklaracji atrybutu ValueFromPipeline
ValueFromPipelineByProperty
System.Management.Automation.Parameterattribute. Określ słowo ValueFromPipeline
kluczowe , jeśli polecenie cmdlet uzyskuje dostęp do kompletnego obiektu wejściowego. Określ, ValueFromPipelineByProperty
czy polecenie cmdlet uzyskuje dostęp tylko do właściwości obiektu .
Oto deklaracja parametru dla parametru tego Name
polecenia cmdlet Get-Proc, które akceptuje dane wejściowe potoku.
[Parameter(
Position = 0,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true)]
[ValidateNotNullOrEmpty]
public string[] Name
{
get { return this.processNames; }
set { this.processNames = value; }
}
<Parameter(Position:=0, ValueFromPipeline:=True, _
ValueFromPipelineByPropertyName:=True), ValidateNotNullOrEmpty()> _
Public Property Name() As String()
Get
Return processNames
End Get
Set(ByVal value As String())
processNames = value
End Set
End Property
Poprzednia deklaracja ustawia słowo kluczowe na , aby środowisko uruchomieniowe usługi Windows PowerShell powiązało parametr z obiektem przychodzącym, jeśli obiekt jest tym samym typem co parametr lub jeśli można go wywrzeć na ten sam ValueFromPipeline
true
typ. Słowo ValueFromPipelineByPropertyName
kluczowe jest również ustawione na , aby środowisko Windows PowerShell sprawdzało przychodzący obiekt dla true
Name
właściwości. Jeśli obiekt przychodzący ma taką właściwość, środowisko uruchomieniowe powiążą parametr Name
z Name
właściwością obiektu przychodzącego.
Uwaga
Ustawienie słowa ValueFromPipeline
kluczowego atrybutu dla parametru ma pierwszeństwo przed ustawieniem słowa ValueFromPipelineByPropertyName
kluczowego .
Zastępowanie metody przetwarzania danych wejściowych
Jeśli twoje polecenie cmdlet ma obsługiwać dane wejściowe potoku, musi zastąpić odpowiednie metody przetwarzania danych wejściowych. Podstawowe metody przetwarzania danych wejściowych zostały wprowadzone w tece Creating Your First Cmdlet (Tworzenie pierwszego polecenia cmdlet).
To 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 pobierze procesy dla każdej żądanej nazwy procesu lub wszystkich procesów, jeśli nie podano nazwy. Zwróć uwagę, że w obiekcie System.Management.Automation.Cmdlet.ProcessRecordwywołanie writeObject(System.Object,System.Boolean) 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 wyliczeniu tablicy obiektów procesu i zapisywać 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);
} // End foreach (string name...).
}
}
Protected Overrides Sub ProcessRecord()
Dim processes As Process()
'/ If no process names are passed to the cmdlet, get all processes.
If processNames Is Nothing Then
processes = Process.GetProcesses()
Else
'/ 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 If
End Sub 'ProcessRecord
Przykład kodu
Aby uzyskać kompletny przykładowy kod w języku C#, zobacz GetProcessSample03 Sample (Przykład GetProcessSample03).
Definiowanie typów obiektów i formatowania
Windows PowerShell przekazuje informacje między poleceniami cmdlet przy użyciu obiektów .Net. 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.
Budowania polecenia cmdlet
Po zaimplementowaniu polecenia cmdlet należy je zarejestrować Windows PowerShell za pośrednictwem Windows PowerShell przystawki. Aby uzyskać więcej informacji na temat rejestrowania cmdlet, zobacz How to Register Cmdlets, Providers, and Host Applications(Jak rejestrować polecenia cmdlet, dostawców i aplikacje hosta).
Testowanie polecenia cmdlet
Po zarejestrowaniu polecenia cmdlet w u Windows PowerShell przetestuj je, uruchamiając je w wierszu polecenia. Na przykład przetestuj kod 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 wprowadź następujące polecenia, aby pobrać nazwy procesów za pośrednictwem potoku.
PS> type ProcessNames | get-proc
Wyświetlone są następujące dane wyjściowe.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 809 21 40856 4448 147 9.50 2288 iexplore 737 21 26036 16348 144 22.03 3860 iexplore 39 2 1024 388 30 0.08 3396 notepad 3927 62 71836 26984 467 195.19 1848 OUTLOOK
Wprowadź następujące wiersze, aby pobrać obiekty procesu, które mają właściwość z procesów o
Name
nazwie "IEXPLORE". W tym przykładzie użyto polecenia cmdlet (dostarczonego przez Windows PowerShell) jako nadrzędnego polecenia do pobraniaGet-Process
procesów "IEXPLORE".PS> get-process iexplore | get-proc
Wyświetlone są następujące dane wyjściowe.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 801 21 40720 6544 142 9.52 2288 iexplore 726 21 25872 16652 138 22.09 3860 iexplore 801 21 40720 6544 142 9.52 2288 iexplore 726 21 25872 16652 138 22.09 3860 iexplore
Zobacz też
Dodawanie parametrów, które przetwarzają dane wejściowe wiersza polecenia
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