Láncbemenetet feldolgozó paraméterek hozzáadásaAdding Parameters that Process Pipeline Input

A parancsmagok egyik forrása egy olyan objektum a folyamaton, amely egy felsőbb rétegbeli parancsmagból származik.One source of input for a cmdlet is an object on the pipeline that originates from an upstream cmdlet. Ez a szakasz azt ismerteti, hogyan adhat hozzá egy paramétert a Get-proc parancsmaghoz (az első parancsmag létrehozásacímű témakörben leírtak szerint), hogy a parancsmag képes legyen feldolgozni a folyamat objektumait.This section describes how to add a parameter to the Get-Proc cmdlet (described in Creating Your First Cmdlet) so that the cmdlet can process pipeline objects.

Ez a Get-proc parancsmag egy olyan Name paramétert használ, amely egy folyamat-objektum bemenetét fogadja, lekéri a megadott nevek alapján a helyi számítógépről származó adatokat, majd megjeleníti a parancssorban található folyamatokkal kapcsolatos információkat.This Get-Proc cmdlet uses a Name parameter that accepts input from a pipeline object, retrieves process information from the local computer based on the supplied names, and then displays information about the processes at the command line.

A parancsmag osztályának meghatározásaDefining the Cmdlet Class

A parancsmag létrehozásának első lépése mindig a parancsmag elnevezése, és a parancsmagot implementáló .NET-osztály deklarálása.The first step in cmdlet creation is always naming the cmdlet and declaring the .NET class that implements the cmdlet. Ez a parancsmag lekéri a folyamat adatait, így az itt választott művelet neve "Get".This cmdlet retrieves process information, so the verb name chosen here is "Get". (Szinte minden olyan parancsmag, amely képes az adatok beolvasására, parancssori bemenetet dolgozhat fel.) További információ a jóváhagyott parancsmag-műveletekről: parancsmag-műveletek nevei.(Almost any sort of cmdlet that is capable of retrieving information can process command-line input.) For more information about approved cmdlet verbs, see Cmdlet Verb Names.

A Get-proc parancsmag definíciója a következő:The following is the definition for this Get-Proc cmdlet. Ennek a definíciónak a részletei az első parancsmag létrehozásacímű cikkben találhatók.Details of this definition are given in Creating Your First Cmdlet.

[Cmdlet(VerbsCommon.Get, "proc")]
public class GetProcCommand : Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
    Inherits Cmdlet

Bemenet meghatározása a folyamatbólDefining Input from the Pipeline

Ez a szakasz azt ismerteti, hogyan határozható meg a folyamat bemenete egy parancsmaghoz.This section describes how to define input from the pipeline for a cmdlet. Ez a Get-proc parancsmag egy olyan tulajdonságot határoz meg, amely a Name parancssor bemenetét feldolgozó paraméterek hozzáadásacímű témakörben ismertetett paramétert jelöli.This Get-Proc cmdlet defines a property that represents the Name parameter as described in Adding Parameters that Process Command Line Input. (A paraméterek deklarálása című témakörben talál általános információkat.)(See that topic for general information about declaring parameters.)

Ha azonban egy parancsmagnak fel kell dolgoznia a folyamat bemenetét, a Windows PowerShell futtatókörnyezet által megadott paraméterekkel kell rendelkeznie a bemeneti értékekhez.However, when a cmdlet needs to process pipeline input, it must have its parameters bound to input values by the Windows PowerShell runtime. Ehhez hozzá kell adnia a ValueFromPipeline kulcsszót, vagy hozzá kell adnia a ValueFromPipelineByProperty kulcsszót a System. Management. Automation. Parameterattribute attribútum deklarációhoz.To do this, you must add the ValueFromPipeline keyword or add the ValueFromPipelineByProperty keyword to the System.Management.Automation.Parameterattribute attribute declaration. Adja meg a ValueFromPipeline kulcsszót, ha a parancsmag hozzáfér a teljes bemeneti objektumhoz.Specify the ValueFromPipeline keyword if the cmdlet accesses the complete input object. Itt adhatja meg, hogy a ValueFromPipelineByProperty parancsmag csak az objektum egy tulajdonságát érheti el.Specify the ValueFromPipelineByProperty if the cmdlet accesses only a property of the object.

Itt látható a Name Get-proc parancsmag paraméterének deklarációja, amely elfogadja a folyamat bemenetét.Here is the parameter declaration for the Name parameter of this Get-Proc cmdlet that accepts pipeline input.

[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

Az előző deklaráció úgy állítja be a ValueFromPipeline kulcsszót, hogy true a Windows PowerShell futtatókörnyezete a paramétert a bejövő objektumhoz kösse, ha az objektum típusa megegyezik a paraméterrel, vagy ha az adott típusra kényszeríthető.The previous declaration sets the ValueFromPipeline keyword to true so that the Windows PowerShell runtime will bind the parameter to the incoming object if the object is the same type as the parameter, or if it can be coerced to the same type. A ValueFromPipelineByPropertyName kulcsszó is úgy van beállítva, hogy true a Windows PowerShell-futtatókörnyezet a tulajdonság bejövő objektumát is megtekintse Name .The ValueFromPipelineByPropertyName keyword is also set to true so that the Windows PowerShell runtime will check the incoming object for a Name property. Ha a bejövő objektum egy ilyen tulajdonsággal rendelkezik, a futtatókörnyezet a Name paramétert a Name bejövő objektum tulajdonságához köti.If the incoming object has such a property, the runtime will bind the Name parameter to the Name property of the incoming object.

Megjegyzés

A ValueFromPipeline paraméterhez tartozó attribútum kulcsszójának beállítása elsőbbséget élvez a kulcsszó beállításával szemben ValueFromPipelineByPropertyName .The setting of the ValueFromPipeline attribute keyword for a parameter takes precedence over the setting for the ValueFromPipelineByPropertyName keyword.

Egy bemeneti feldolgozási módszer felülbírálásaOverriding an Input Processing Method

Ha a parancsmag a folyamat bemenetének kezelésére szolgál, a megfelelő bemeneti feldolgozási módszereket felül kell bírálni.If your cmdlet is to handle pipeline input, it needs to override the appropriate input processing methods. Az alapszintű beviteli feldolgozási módszerek az első parancsmag létrehozásakorvannak bevezetve.The basic input processing methods are introduced in Creating Your First Cmdlet.

Ez a Get-proc parancsmag felülbírálja a System. Management. Automation. parancsmag. ProcessRecord metódust, amely a Name felhasználó vagy egy parancsfájl által megadott bemeneti paramétereket kezeli.This Get-Proc cmdlet overrides the System.Management.Automation.Cmdlet.ProcessRecord method to handle the Name parameter input provided by the user or a script. Ezzel a módszerrel a rendszer minden kért folyamat nevét vagy folyamatát lekérdezi, ha nincs megadva név.This method will get the processes for each requested process name or all processes if no name is provided. Figyelje meg, hogy a System. Management. Automation. parancsmag. ProcessRecordalkalmazásban a WriteObject (System. Object, System. Boolean) hívása a kimeneti objektumok folyamatba küldésének kimeneti mechanizmusa.Notice that within System.Management.Automation.Cmdlet.ProcessRecord, the call to WriteObject(System.Object,System.Boolean) is the output mechanism for sending output objects to the pipeline. A hívás második paramétere, hogy a (z) értékre enumerateCollection állítja true a Windows PowerShell futtatókörnyezetét, hogy enumerálja a folyamat objektumainak tömbjét, és egy folyamatot egyszerre írjon a parancssorba.The second parameter of this call, enumerateCollection, is set to true to tell the Windows PowerShell runtime to enumerate the array of process objects, and write one process at a time to the command line.

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

MintakódCode Sample

A teljes C# mintakód: GetProcessSample03 minta.For the complete C# sample code, see GetProcessSample03 Sample.

Objektumtípusok és formázások definiálásaDefining Object Types and Formatting

A Windows PowerShell a parancsmagok közötti adatokat .net-objektumokkal továbbítja.Windows PowerShell passes information between cmdlets using .Net objects. Ennek következtében előfordulhat, hogy a parancsmagnak meg kell határoznia a saját típusát, vagy előfordulhat, hogy a parancsmagnak egy másik parancsmag által biztosított meglévő típust kell kiterjesztenie.Consequently, a cmdlet may need to define its own type, or the cmdlet may need to extend an existing type provided by another cmdlet. Az új típusok definiálásával vagy a meglévő típusok kiterjesztésével kapcsolatos további információkért lásd: az Objektumtípusok és a formázás kiterjesztése.For more information about defining new types or extending existing types, see Extending Object Types and Formatting.

A parancsmag felépítéseBuilding the Cmdlet

A parancsmag megvalósítása után regisztrálni kell a Windows PowerShellben egy Windows PowerShell beépülő modullal.After implementing a cmdlet it must be registered with Windows PowerShell through a Windows PowerShell snap-in. A parancsmagok regisztrálásával kapcsolatos további információkért lásd: parancsmagok, szolgáltatók és gazdagép-alkalmazások regisztrálása.For more information about registering cmdlets, see How to Register Cmdlets, Providers, and Host Applications.

A parancsmag teszteléseTesting the Cmdlet

Ha a parancsmag regisztrálva van a Windows PowerShellben, tesztelje azt a parancssorban futtatva.When your cmdlet has been registered with Windows PowerShell, test it by running it on the command line. Tesztelje például a minta parancsmag kódját.For example, test the code for the sample cmdlet. További információ a parancsmagok parancssorból történő használatáról: első lépések a Windows PowerShellhasználatával.For more information about using cmdlets from the command line, see the Getting Started with Windows PowerShell.

  • A Windows PowerShell parancssorába írja be a következő parancsokat a folyamatok nevének a folyamaton keresztüli lekéréséhez.At the Windows PowerShell prompt, enter the following commands to retrieve the process names through the pipeline.

    PS> type ProcessNames | get-proc
    

    A következő kimenet jelenik meg.The following output appears.

    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
    
  • Adja meg a következő sorokat, amelyekkel lekérheti azokat a folyamatokat, amelyek Name az "iexplore" nevű folyamatokból származó tulajdonsággal rendelkeznek.Enter the following lines to get the process objects that have a Name property from the processes called "IEXPLORE". Ez a példa a Get-Process parancsmagot használja (amelyet a Windows PowerShell biztosít) felsőbb rétegbeli parancsként az "iexplore" folyamatok lekéréséhez.This example uses the Get-Process cmdlet (provided by Windows PowerShell) as an upstream command to retrieve the "IEXPLORE" processes.

    PS> get-process iexplore | get-proc
    

    A következő kimenet jelenik meg.The following output appears.

    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
    

Lásd még:See Also

Parancssori bemenetet feldolgozó paraméterek hozzáadásaAdding Parameters that Process Command Line Input

Az első parancsmag létrehozásaCreating Your First Cmdlet

Objektumok típusának és formázásának kiterjesztéseExtending Object Types and Formatting

Parancsmagok, szolgáltatók és gazdagép-alkalmazások regisztrálásaHow to Register Cmdlets, Providers, and Host Applications

Windows PowerShell-referenciaWindows PowerShell Reference

ParancsmagmintákCmdlet Samples