Megosztás a következőn keresztül:


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

A parancsmagok egyik bemeneti forrása a folyamat egy objektuma, amely egy felsőbb rétegbeli parancsmagból származik. Ez a szakasz azt ismerteti, hogyan adhat hozzá paramétert a Get-Proc parancsmaghoz (a Az első parancsmag létrehozása) annak érdekében, hogy a parancsmag feldolgozhassa a folyamatobjektumokat.

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

A parancsmagosztály definiálása

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. Ez a parancsmag lekéri a folyamatadatokat, így az itt kiválasztott ige neve "Get". (Szinte bármilyen parancsmag, amely képes adatokat beolvasni, képes feldolgozni a parancssori bemenetet.) A jóváhagyott parancsmag-parancsmagokkal kapcsolatos további információkért lásd parancsmagok parancsmagjának nevei.

A Get-Proc parancsmag definíciója a következő. Ennek a definíciónak a részleteit az Az első parancsmag létrehozásacímű cikkben találja.

[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 a Get-Proc parancsmag egy olyan tulajdonságot határoz meg, amely az Name paramétert jelöli az Parancssori bemenetetfeldolgozó paraméterek hozzáadása című cikkben leírtak szerint. (A paraméterek deklarálásával kapcsolatos általános információkért tekintse meg ezt a témakört.)

Ha azonban egy parancsmagnak folyamatbemenetet kell feldolgoznia, a Windows PowerShell-futtatókörnyezetnek meg kell adnia a bemeneti értékekhez kötött paramétereit. Ehhez hozzá kell adnia a ValueFromPipeline kulcsszót, vagy hozzá kell adnia a ValueFromPipelineByProperty kulcsszót a System.Management.Automation.ParameterAttribute attribútumdeklarációhoz. Adja meg a ValueFromPipeline kulcsszót, ha a parancsmag hozzáfér a teljes bemeneti objektumhoz. Adja meg a ValueFromPipelineByProperty, ha a parancsmag csak az objektum egy tulajdonságához fér hozzá.

Itt található a folyamatbemenetet elfogadó Get-Proc parancsmag Name 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ó true állítja be a ValueFromPipeline kulcsszót, hogy a Windows PowerShell-futtatókörnyezet a paramétert a bejövő objektumhoz kösse, ha az objektum ugyanaz a típus, mint a paraméter, vagy ha ugyanarra a típusra kényszeríthető. A ValueFromPipelineByPropertyName kulcsszó is true van beállítva, így a Windows PowerShell-futtatókörnyezet ellenőrzi a bejövő objektumot egy Name tulajdonsághoz. Ha a bejövő objektum rendelkezik ilyen tulajdonsággal, a futtatókörnyezet a Name paramétert a bejövő objektum Name tulajdonságához köti.

Megjegyzés

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

Bemeneti feldolgozási módszer felülírása

Ha a parancsmag a folyamatbemenetet kezeli, felül kell bírálnia a megfelelő bemeneti feldolgozási módszereket. Az alapvető bemeneti feldolgozási módszereket az első parancsmag létrehozása .

Ez a Get-Proc parancsmag felülbírálja a System.Management.Automation.Cmdlet.ProcessRecord metódust a felhasználó vagy szkript által megadott Name paraméterbevitel kezelésére. Ez a metódus lekéri a folyamatokat az egyes kért folyamatnevekhez vagy az összes folyamathoz, ha nincs megadva név. Figyelje meg, hogy a System.Management.Automation.Cmdlet.ProcessRecordWriteObject(System.Object,System.Boolean) hívása a kimeneti objektumok folyamatba való küldéséhez. A hívás második paramétere, a enumerateCollectiontrue van beállítva, hogy a Windows PowerShell-futtatókörnyezetben számba vehesse a folyamatobjektumok tömbjét, és egyszerre egy folyamatot írjon 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ódért lásd GetProcessSample03 Minta.

Objektumtípusok és formázás definiálása

A Windows PowerShell .NET-objektumokkal továbbítja az adatokat a parancsmagok között. Következésképpen előfordulhat, hogy egy parancsmagnak meg kell határoznia a saját típusát, vagy előfordulhat, hogy a parancsmagnak ki kell terjesztenie egy másik parancsmag által biztosított meglévő típust. További információ az új típusok definiálásáról vagy a meglévő típusok kibővítéséről: Objektumtípusok és formázás kiterjesztése.

A parancsmag létrehozása

A parancsmag implementálása után egy Windows PowerShell beépülő modulon keresztül regisztrálni kell a Windows PowerShellben. A parancsmagok regisztrálásáról további információt a parancsmagok, szolgáltatók és gazdagépalkalmazások .

A parancsmag tesztelése

Ha a parancsmag regisztrálva lett a Windows PowerShellben, tesztelje a parancssorban való futtatásával. Tesztelje például a minta parancsmag kódját. A parancssori parancsmagok használatáról további információt a Windows PowerShell – első lépések című témakörben talál.

  • A Windows PowerShell parancssorában adja meg a következő parancsokat a folyamaton keresztüli folyamat folyamaton keresztüli lekéréséhez.

    PS> type ProcessNames | Get-Proc
    

    Megjelenik a következő kimenet.

    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
    
  • Írja be a következő sorokat az "IEXPLORE" nevű folyamatokból Name tulajdonságú folyamatobjektumok lekéréséhez. Ez a példa a Get-Process parancsmagot használja (amelyet a Windows PowerShell biztosít) egy felsőbb rétegbeli parancsként az "IEXPLORE" folyamatok lekéréséhez.

    PS> Get-Process iexplore | Get-Proc
    

    Megjelenik a következő kimenet.

    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 gazdagépalkalmazások regisztrálása

Windows PowerShell-referencia

parancsmagminták