Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En källa till indata för en cmdlet är ett objekt på pipelinen som kommer från en överordnad cmdlet. I det här avsnittet beskrivs hur du lägger till en parameter i cmdleten Get-Proc (beskrivs i Skapa din första cmdlet) så att cmdleten kan bearbeta pipelineobjekt.
Den här Get-Proc-cmdleten använder en Name parameter som accepterar indata från ett pipelineobjekt, hämtar processinformation från den lokala datorn baserat på de angivna namnen och visar sedan information om processerna på kommandoraden.
Definiera cmdlet-klassen
Det första steget när cmdleten skapas är att alltid namnge cmdleten och deklarera .NET-klassen som implementerar cmdleten. Den här cmdleten hämtar processinformation, så verbnamnet som väljs här är "Get". (Nästan alla typer av cmdletar som kan hämta information kan bearbeta kommandoradsindata.) Mer information om godkända cmdlet-verb finns i Cmdlet-verbnamn.
Följande är definitionen för den här Get-Proc cmdleten. Information om den här definitionen finns i Skapa din första cmdlet.
[Cmdlet(VerbsCommon.Get, "proc")]
public class GetProcCommand : Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
Inherits Cmdlet
Definiera indata från pipelinen
I det här avsnittet beskrivs hur du definierar indata från pipelinen för en cmdlet. Den här Get-Proc-cmdleten definierar en egenskap som representerar parametern Name enligt beskrivningen i Lägga till parametrar som bearbetar kommandoradsindata.
(Se det avsnittet för allmän information om att deklarera parametrar.)
Men när en cmdlet behöver bearbeta pipelineindata måste den ha sina parametrar bundna till indatavärden av Windows PowerShell-körningen. Om du vill göra detta måste du lägga till nyckelordet ValueFromPipeline eller lägga till nyckelordet ValueFromPipelineByProperty i attributdeklarationen System.Management.Automation.ParameterAttribute. Ange nyckelordet ValueFromPipeline om cmdleten kommer åt det fullständiga indataobjektet. Ange ValueFromPipelineByProperty om cmdleten endast kommer åt en egenskap för objektet.
Här är parameterdeklarationen för parametern Name för den här Get-Proc cmdleten som accepterar pipelineindata.
[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
I föregående deklaration anges nyckelordet ValueFromPipeline till true så att Windows PowerShell-körningen binder parametern till det inkommande objektet om objektet är av samma typ som parametern eller om det kan tvingas till samma typ. Nyckelordet ValueFromPipelineByPropertyName är också inställt på true så att Windows PowerShell-körningen kontrollerar det inkommande objektet efter en Name egenskap. Om det inkommande objektet har en sådan egenskap binder körningen Name-parametern till egenskapen Name för det inkommande objektet.
Anmärkning
Inställningen för nyckelordet ValueFromPipeline attribut för en parameter har företräde framför inställningen för nyckelordet ValueFromPipelineByPropertyName.
Åsidosätta en indatabearbetningsmetod
Om cmdleten ska hantera pipelineindata måste den åsidosätta lämpliga indatabearbetningsmetoder. De grundläggande metoderna för indatabearbetning introduceras i Skapa din första cmdlet.
Den här Get-Proc-cmdleten åsidosätter metoden System.Management.Automation.Cmdlet.ProcessRecord för att hantera Name parameterindata som tillhandahålls av användaren eller ett skript. Den här metoden hämtar processerna för varje begärt processnamn eller alla processer om inget namn anges. Observera att i System.Management.Automation.Cmdlet.ProcessRecordär anropet till WriteObject(System.Object,System.Boolean) utdatamekanismen för att skicka utdataobjekt till pipelinen. Den andra parametern för det här anropet, enumerateCollection, är inställd på true för att tala om för Windows PowerShell-körningen att räkna upp matrisen med processobjekt och skriva en process i taget till kommandoraden.
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
Kodexempel
Den fullständiga C#-exempelkoden finns i GetProcessSample03 Sample.
Definiera objekttyper och formatering
Windows PowerShell skickar information mellan cmdletar med hjälp av .NET-objekt. Därför kan en cmdlet behöva definiera sin egen typ, eller så kan cmdleten behöva utöka en befintlig typ som tillhandahålls av en annan cmdlet. Mer information om hur du definierar nya typer eller utökar befintliga typer finns i Utöka objekttyper och formatering.
Skapa cmdleten
När du har implementerat en cmdlet måste den registreras med Windows PowerShell via en Windows PowerShell-snapin-modul. Mer information om hur du registrerar cmdletar finns i Så här registrerar du cmdletar, leverantörer och värdprogram.
Testa cmdleten
När din cmdlet har registrerats med Windows PowerShell testar du den genom att köra den på kommandoraden. Testa till exempel koden för exempel-cmdleten. Mer information om hur du använder cmdletar från kommandoraden finns i Komma igång med Windows PowerShell.
I Windows PowerShell-prompten anger du följande kommandon för att hämta processnamnen via pipelinen.
PS> type ProcessNames | Get-ProcFöljande utdata visas.
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 OUTLOOKAnge följande rader för att hämta processobjekten som har en
Nameegenskap från processerna som kallas "IEXPLORE". I det här exemplet används cmdletenGet-Process(tillhandahålls av Windows PowerShell) som ett uppströmskommando för att hämta "IEXPLORE"-processerna.PS> Get-Process iexplore | Get-ProcFöljande utdata visas.
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
Se även
Lägga till parametrar som bearbetar kommandoradsindata
utöka objekttyper och formatering