Lägga till parametrar som bearbetar pipelineindata
En indatakälla för en cmdlet är ett objekt i pipelinen som kommer från en överordnad cmdlet. I det här avsnittet beskrivs hur du lägger till en parameter i Get-Proc-cmdleten (beskrivs i Skapa din första cmdlet ) så att cmdletenkan bearbeta pipelineobjekt.
Den Get-Proc cmdleten använder en 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å Name
kommandoraden.
Definiera cmdlet-klassen
Det första steget i att skapa cmdleten är att alltid namnge cmdleten och deklarera den .NET-klass som implementerar cmdleten . Den här cmdleten hämtar processinformation, så verbnamnet som väljs här är "Get". (Nästan alla slags cmdlet 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 Get-Proc cmdleten definierar en egenskap som representerar parametern enligt beskrivningen Name
i Adding Parameters that Process Command Line Input.
(Se avsnittet för allmän information om att deklarera parametrar.)
Men när en cmdlet behöver bearbeta pipelineindata måste den ha parametrar som är bundna till indatavärden av Windows PowerShell-körningen. Om du vill göra detta måste du lägga till nyckelordet eller lägga till nyckelordet i attributdeklarationen ValueFromPipeline
ValueFromPipelineByProperty
System.Management.Automation.Parameterattribute. Ange ValueFromPipeline
nyckelordet om cmdleten kommer åt hela indataobjektet. Ange ValueFromPipelineByProperty
om cmdleten endast kommer åt en egenskap för objektet.
Här är parameterdeklarationen för parametern för Name
den här Get-Proc cmdlet 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
Föregående deklaration anger nyckelordet till så att Windows PowerShell-körningen binder parametern till det inkommande objektet om objektet är av samma typ som parametern, eller om det kan vara ValueFromPipeline
true
coerced till samma typ. Nyckelordet ValueFromPipelineByPropertyName
är också inställt true
på så att Windows PowerShell körtid kontrollerar inkommande objekt för 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.
Anteckning
Inställningen för ValueFromPipeline
attributnyckelordet för en parameter har företräde framför inställningen för ValueFromPipelineByPropertyName
nyckelordet .
Åsidosätta en metod för indatabearbetning
Om din cmdlet ska hantera pipelineindata måste den åsidosätta lämpliga metoder för bearbetning av indata. De grundläggande indatabearbetningsmetoderna introduceras i Skapa din första cmdlet.
Den Get-Proc cmdleten åsidosätter metoden System.Management.Automation.Cmdlet.ProcessRecord för att hantera de parameterindata som anges av användaren Name
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 i det här anropet, , är inställd på för att ange att Windows PowerShell-körningen ska räkna upp matrisen med processobjekt och skriva en process i taget till enumerateCollection
true
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 cmdlets 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 Windows PowerShell via en Windows PowerShell snapin-modulen. Mer information om hur du registrerar cmdlets finns i How to Register Cmdlets, Providers, and Host Applications.
Testa cmdleten
När din cmdlet har registrerats med Windows PowerShell kan du testa den genom att köra den på kommandoraden. Testa till exempel koden för exempel-cmdleten. Mer information om hur du använder cmdlets från kommandoraden finns i Komma igång med Windows PowerShell.
I kommandotolken Windows PowerShell du följande kommandon för att hämta processnamnen via pipelinen.
PS> type ProcessNames | get-proc
Fö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 OUTLOOK
Ange följande rader för att hämta processobjekten som har en
Name
egenskap från processerna som kallas "IEXPLORE". I det här exemplet används cmdleten (som tillhandahålls av Windows PowerShell) som ett uppströmskommando för att hämtaGet-Process
"IEXPLORE"-processerna.PS> get-process iexplore | get-proc
Fö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 kommandoradsinmatning
Utöka objekttyper och formatering
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för