Láncbemenetet feldolgozó paraméterek hozzáadása

A parancsmagok bemenetének egyik forrása a folyamat egy objektuma, amely egy upstream parancsmagból származik. Ez a szakasz azt ismerteti, hogyan adhat hozzá paramétert a Get-Proc-parancsmaghoz (lásd az első parancsmag létrehozását) annak érdekében, hogy a parancsmag feldolgozni tudja a folyamatobjektumokat.

Ez Get-Proc parancsmag egy olyan paramétert használ, amely bemenetet fogad egy folyamatobjektumból, lekéri a folyamatadatokat a helyi számítógépről a megadott nevek alapján, majd megjeleníti a folyamatokkal kapcsolatos információkat Name a parancssorban.

A parancsmagosztály meghatározása

A parancsmag létrehozásának első lépése mindig a parancsmag elnevezése és a parancsmagot megvalósító .NET-osztály deklarációja. Ez a parancsmag lekéri a folyamatadatokat, így az itt kiválasztott művelet neve "Get". (Szinte bármilyen olyan parancsmag, amely képes információleolvasásra, képes feldolgozni a parancssori bemenetet.) A jóváhagyott parancsmagokkal kapcsolatos további információkért lásd: Parancsmagok parancsmagnevei.

A következő a parancsmag Get-Proc definíciója. A definíció részleteit a Creating Your First Cmdlet (Az első parancsmag létrehozása) tartalmazza.

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

Bemenet definiálása a folyamatból

Ez a szakasz azt ismerteti, hogyan definiálhat bemenetet a folyamatból egy parancsmaghoz. Ez Get-Proc parancsmag egy tulajdonságot határoz meg, amely a paramétert jelöli a parancssori bemenetet feldolgozására vonatkozó paraméterek Name hozzáadásával kapcsolatos leírásban leírtak szerint. (A paraméterek deklarozásának általános információiért tekintse meg ezt a témakört.)

Ha azonban egy parancsmagnak fel kell feldolgoznia a folyamat bemenetét, a paramétereinek a bemeneti értékekhez kell kötveük a Windows PowerShell futásidejű. Ehhez hozzá kell adnia a kulcsszót, vagy hozzá kell adnia a kulcsszót a ValueFromPipeline ValueFromPipelineByProperty System.Management.Automation.Parameterattribute attribútumdeklarációhoz. Adja meg ValueFromPipeline a kulcsszót, ha a parancsmag hozzáfér a teljes bemeneti objektumhoz. Adja meg ValueFromPipelineByProperty a értéket, ha a parancsmag csak az objektum egy tulajdonságához fér hozzá.

Lássunk egy paraméterdeklarációt a Get-Proc bemenetet elfogadó Name parancsmag paraméterdeklarációja.

[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ó a kulcsszót a következőre állítja be: , hogy a Windows PowerShell-futtatás kösse a paramétert a bejövő objektumhoz, ha az objektum ugyanolyan típusú, mint a paraméter, vagy ha ugyanabba a típusba lehet őket ValueFromPipeline összeküldni. true A ValueFromPipelineByPropertyName kulcsszó szintén a következőre van beállítva, hogy a Windows PowerShell futásidejű futtatás ellenőrizze a bejövő objektum true Name tulajdonságát. Ha a bejövő objektum rendelkezik ilyen tulajdonságokkal, a futásidő a paramétert a bejövő objektum Name Name tulajdonságához köti.

Megjegyzés

Egy paraméter attribútumszavának beállítása elsőbbséget élvez a kulcsszó ValueFromPipeline ValueFromPipelineByPropertyName beállításával.

Bemeneti feldolgozási metódus felülbírálása

Ha a parancsmag a folyamat bemenetének kezeléséhez szükséges, felül kell bírálni a megfelelő bemeneti feldolgozási módszereket. Az alapvető bemeneti feldolgozási metódusok a Creating Your First Cmdlet (Az első parancsmag létrehozása) alatt vannak bevezetve.

Ez Get-Proc parancsmag felülbírálja a System.Management.Automation.Cmdlet.ProcessRecord metódust a felhasználó vagy egy parancsfájl által megadott paraméterbemenet Name kezeléséhez. Ez a metódus le fogja kérni az egyes kért folyamatnevekkel vagy az összes folyamattal kapcsolatos folyamatokat, ha nem ad meg nevet. Figyelje meg, hogy a System.Management.Automation.Cmdlet.ProcessRecordfájlban a WriteObject(System.Object,System.Boolean) hívása a kimeneti objektumok folyamatnak való küldésének kimeneti mechanizmusa. A hívás második paramétere ( ) úgy van beállítva, hogy a Windows PowerShell-runtime számba veszi a folyamatobjektumok tömböt, és egyszerre egy folyamatot írjon enumerateCollection true a parancssorba.

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

Kódminta

A teljes C#-mintakódot a GetProcessSample03 mintacímű cikk tartalmazza.

Objektumtípusok és formázás meghatározása

Windows PowerShell .NET-objektumok használatával továbbítja az információkat a parancsmagok között. Emiatt előfordulhat, hogy egy parancsmagnak meg kell határoznia a saját típusát, vagy a parancsmagnak ki kell terjesztenie egy másik parancsmag által biztosított meglévő típust. Az új típusok meghatározásával vagy a meglévő típusok kiterjesztésével kapcsolatos további információkért lásd: Extending Object Types and Formatting(Objektumtípusok kiterjesztése és formázás).

A parancsmag kiépítése

A parancsmagot a megvalósítása után regisztrálni kell a Windows PowerShell egy Windows PowerShell beépülő modulon keresztül. További információ a parancsmagok regisztrálásról: How to Register Cmdlets, Providers, and Host Applications (Parancsmagok, szolgáltatók és gazdaalkalmazások regisztrálása).

A parancsmag tesztelése

Miután regisztrálta a parancsmagot a Windows PowerShell, tesztelje a parancssorban való futtatásával. Tesztelje például a minta parancsmag kódját. A parancsmagok parancssorból való használatával kapcsolatos további információkért lásd: Getting Started with Windows PowerShell.

  • A Windows PowerShell írja be a következő parancsokat a folyamaton keresztüli folyamatnevek lekérése érdekében.

    PS> type ProcessNames | get-proc
    

    Az alábbi kimenet jelenik meg.

    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 az "IEXPLORE" nevű folyamatok tulajdonságának Name megfelelő folyamatobjektumok lehívása érdekében. Ez a példa a (Windows PowerShell által biztosított) parancsmagot használja felfelé irányuló parancsként az Get-Process "IEXPLORE" folyamatok lekérése során.

    PS> get-process iexplore | get-proc
    

    Az alábbi kimenet jelenik meg.

    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:

Parancssori bemenetet feldolgozó paraméterek hozzáadása

Az első parancsmag létrehozása

Objektumtípusok és formázás kiterjesztése

Parancsmagok, szolgáltatók és gazdaalkalmazások regisztrálása

Windows PowerShell-referencia

Parancsmagminták