Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jednym źródłem danych wejściowych dla polecenia cmdlet jest obiekt w potoku pochodzącym z nadrzędnego polecenia cmdlet. W tej sekcji opisano sposób dodawania parametru do polecenia cmdlet Get-Proc (opisanego w Creating Your First Cmdlet), aby polecenie cmdlet może przetwarzać obiekty potoków.
To polecenie cmdlet Get-Proc używa parametru Name
, który akceptuje dane wejściowe z obiektu potoku, pobiera informacje o procesie z komputera lokalnego na podstawie podanych nazw, a następnie wyświetla informacje o procesach w wierszu polecenia.
Definiowanie klasy poleceń cmdlet
Pierwszym krokiem 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 "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.
Poniżej przedstawiono definicję tego polecenia cmdlet Get-Proc. Szczegółowe informacje o tej definicji podano w 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 polecenie cmdlet Get-Proc definiuje właściwość reprezentującą parametr Name
zgodnie z opisem w Dodawanie parametrów, które przetwarzają dane wejściowe wiersza polecenia.
(Zobacz ten temat, aby uzyskać ogólne informacje na temat deklarowania parametrów).
Jednak gdy polecenie cmdlet musi przetworzyć dane wejściowe potoku, musi mieć parametry powiązane z wartościami wejściowymi przez środowisko uruchomieniowe programu Windows PowerShell. W tym celu należy dodać słowo kluczowe ValueFromPipeline
lub dodać słowo kluczowe ValueFromPipelineByProperty
do deklaracji atrybutu System.Management.Automation.ParameterAttribute. Określ słowo kluczowe ValueFromPipeline
, jeśli polecenie cmdlet uzyskuje dostęp do kompletnego obiektu wejściowego. Określ ValueFromPipelineByProperty
, jeśli polecenie cmdlet uzyskuje dostęp tylko do właściwości obiektu.
Oto deklaracja parametru dla parametru Name
tego 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 ValueFromPipeline
na true
, tak aby środowisko uruchomieniowe programu Windows PowerShell powiązało parametr z obiektem przychodzącym, jeśli obiekt jest tego samego typu co parametr, lub jeśli może być on powiązany z tym samym typem. Słowo kluczowe ValueFromPipelineByPropertyName
jest również ustawione na true
, aby środowisko uruchomieniowe programu Windows PowerShell sprawdzało obiekt przychodzący dla właściwości Name
. Jeśli obiekt przychodzący ma taką właściwość, środowisko uruchomieniowe będzie wiązać parametr Name
z właściwością Name
obiektu przychodzącego.
Uwaga
Ustawienie słowa kluczowego atrybutu ValueFromPipeline
parametru ma pierwszeństwo przed ustawieniem słowa kluczowego ValueFromPipelineByPropertyName
.
Zastępowanie metody przetwarzania wejściowego
Jeśli polecenie cmdlet ma obsługiwać dane wejściowe potoku, musi zastąpić odpowiednie metody przetwarzania danych wejściowych. Podstawowe metody przetwarzania danych wejściowych są wprowadzane w Tworzenie pierwszego polecenia cmdlet.
To polecenie cmdlet Get-Proc zastępuje metodę System.Management.Automation.Cmdlet.ProcessRecord do obsługi danych wejściowych parametru Name
dostarczonych przez użytkownika lub skrypt. Ta metoda pobierze procesy dla każdej żądanej nazwy procesu lub wszystkich procesów, jeśli nie podano nazwy. Zwróć uwagę, że w 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, enumerateCollection
, jest ustawiony na true
, aby poinformować środowisko uruchomieniowe programu Windows PowerShell, aby wyliczyć tablicę 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);
} // 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ładowy kod
Aby uzyskać pełny przykładowy kod w języku C#, zobacz GetProcessSample03 Sample.
Definiowanie typów obiektów i formatowanie
Program Windows PowerShell przekazuje informacje między poleceniami cmdlet przy użyciu obiektów .NET. 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 go zarejestrować w programie Windows PowerShell za pomocą 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 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 do programu Windows PowerShell.
W wierszu polecenia programu Windows PowerShell wprowadź następujące polecenia, aby pobrać nazwy procesów za pośrednictwem potoku.
PS> type ProcessNames | Get-Proc
Zostanie wyświetlone 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ść
Name
z procesów o nazwie "IEXPLORE". W tym przykładzie użyto polecenia cmdletGet-Process
(dostarczonego przez program Windows PowerShell) jako nadrzędnego polecenia w celu pobrania procesów "IEXPLORE".PS> Get-Process iexplore | Get-Proc
Zostanie wyświetlone 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, dostawcy i aplikacje hosta