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

A parancsmagok bemenetének egyik forrása a parancssor. Ez a témakör azt ismerteti, hogyan adhat hozzá paramétert a parancsmaghoz (amely az első parancsmag létrehozását ismerteti), hogy a parancsmag feldolgozni tudja a helyi számítógép bemenetét a parancsmagnak átadott explicit Get-Proc objektumok alapján. Az itt leírt parancsmag lekéri a folyamatokat a nevük alapján, majd megjeleníti a folyamatokkal kapcsolatos információkat Get-Proc a parancssorban.

A parancsmagosztály meghatározása

A parancsmagok létrehozásának első lépése a parancsmag elnevezése és a parancsmagot megvalósító .NET-keretrendszer osztály deklarációja. Ez a parancsmag lekéri a folyamatadatokat, így az itt kiválasztott művelet neve "Get". (Szinte bármilyen típusú parancsmag, amely képes információkat lekért, képes a parancssori bemenetek feldolgozására.) A jóváhagyott parancsmag-parancsmagokkal kapcsolatos további információkért lásd: Parancsmag-parancsmagok nevei.

Itt található a parancsmag Get-Proc osztálydeklará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

Paraméterek deklarása

A parancsmag-paraméter lehetővé teszi, hogy a felhasználó bemenetet adjon a parancsmagnak. A következő példában a és a a folyamat által megadott parancsmagok neve, és Get-Proc Get-Member a a MemberType Get-Member parancsmag paramétere. A paraméter argumentuma a "property" (tulajdonság).

PS> get-proc ; get-member -membertype tulajdonság

Egy parancsmag paramétereinek deklarálása érdekében először meg kell határoznia a paramétereket képviselő tulajdonságokat. A parancsmagban az egyetlen paraméter a , amely ebben az esetben a lekérni Get-Proc Name .NET-keretrendszer folyamatobjektum nevét jelöli. Ezért a parancsmagosztály egy sztring típusú tulajdonságot határoz meg, amely egy névtömböt fogad el.

Itt található a parancsmag Name paraméterének paraméterdeklarációja. Get-Proc

/// <summary>
/// Specify the cmdlet Name parameter.
/// </summary>
  [Parameter(Position = 0)]
  [ValidateNotNullOrEmpty]
  public string[] Name
  {
    get { return processNames; }
    set { processNames = value; }
  }
  private string[] processNames;

  #endregion Parameters
<Parameter(Position:=0), ValidateNotNullOrEmpty()> _
Public Property Name() As String()
    Get
        Return processNames
    End Get

    Set(ByVal value As String())
        processNames = value
    End Set

End Property

Annak érdekében, Windows PowerShell hogy ez a tulajdonság paraméter, a rendszer hozzáad egy Name System.Management.Automation.Parameterattribute attribútumot a tulajdonságdefinícióhoz. Ennek az attribútumnak a deklaratív alapszintaxisa [Parameter()] a következő: .

Megjegyzés

A paramétereket explicit módon nyilvánosként kell megjelölni. Azok a paraméterek, amelyek nem belső alapértékként vannak megjelölve, és nem találhatók meg Windows PowerShell futtatáskor.

Ez a parancsmag sztringtömböt használ a Name paraméterhez. Ha lehetséges, a parancsmagnak egy paramétert is meg kell határoznia tömbként, mivel ez lehetővé teszi, hogy a parancsmag több elemet is elfogadjon.

A paraméterdefiníciókra vonatkozó fontos dolgok

  • Az előre Windows PowerShell paraméterneveket és adattípusokat a lehető legnagyobb mértékben újra kell használni, hogy a parancsmag kompatibilis legyen Windows PowerShell parancsmagokkal. Ha például minden parancsmag az előre definiált paraméternevet használja egy erőforrás azonosításához, a felhasználó könnyen megértheti a paraméter jelentését, függetlenül attól, hogy milyen parancsmagot Id használ. A paraméternevek alapvetően ugyanazok a szabályok szerint vannak beadva, mint a közös nyelvi futtatás (CLR) változónevében. A paraméterek elnevezésére vonatkozó további információkért lásd: Parancsmag-paraméterek nevei.

  • Windows PowerShell lefoglal néhány paraméternevet, hogy egységes felhasználói élményt nyújtson. Ne használja a következő paraméterneveket: WhatIf , , , , , , , , Confirm és Verbose Debug Warn ErrorAction ErrorVariable OutVariable OutBuffer . Emellett a következő aliasok vannak fenntartva a paraméternevekhez: vb , , , , és db ea ev ov ob .

  • Name A egy egyszerű és gyakori paraméternév, amely a parancsmagok számára ajánlott. Jobb egy ehhez hasonló paraméternevet választani, mint egy összetett nevet, amely egyedi egy adott parancsmaghoz, és nehezen jegyezható meg.

  • A paraméterek nem érzékenyek a kis- és Windows PowerShell, bár alapértelmezés szerint a rendszerhéj megőrzi a kis- és a nagy- és a kis- és Windows PowerShell. Az argumentumok kis- és nagybetűkre való érzékenysége a parancsmag működésétől függ. Az argumentumok a parancssorban megadott paraméternek vannak átadva.

  • További példák a paraméterdeklarációkra: Parancsmag-paraméterek.

Paraméterek deklarálása pozíció vagy elnevezettként

A parancsmagnak minden paramétert pozíció vagy elnevezett paraméterként kell beállítania. Mindkét paraméter egyetlen argumentumot fogad el, több argumentumot vesszővel elválasztva, valamint logikai beállításokat. Egy kapcsolónak is nevezett logikai paraméter csak a logikai beállításokat kezeli. A kapcsolóval határozható meg a paraméter jelenléte. Az ajánlott alapértelmezett érték false a .

A minta parancsmag pozícióparaméterként definiálja Get-Proc Name a paramétert 0. Ez azt jelenti, hogy a felhasználó által a parancssorban megadott első argumentum automatikusan be lesz szúrva ehhez a paraméterhez. Ha elnevezett paramétert szeretne definiálni, amelyhez a felhasználónak meg kell adnia a paraméter nevét a parancssorból, hagyja ki a kulcsszót az Position attribútumdeklarációból.

Megjegyzés

Ha a paramétereket nem kell elnevezni, javasoljuk, hogy a leggyakrabban használt paramétereket helyezze el pozícióban, hogy a felhasználóknak ne kell begépelnie a paraméter nevét.

Paraméterek deklarása kötelezőként vagy nem kötelezőként

A parancsmagnak minden paramétert opcionális vagy kötelező paraméterként kell beállítania. A minta parancsmagban a paraméter nem kötelezőként van definiálva, mert a kulcsszó nincs beállítva az Get-Proc Name Mandatory attribútumdeklarációban.

Támogató paraméterérvényesítés

A minta parancsmag hozzáad egy Get-Proc System.Management.Automation.Validatenotnugesremptyattributebemeneti érvényesítési attribútumot a paraméterhez annak ellenőrzéséhez, hogy a bemenet nem vagy nem Name null üres. Ez az attribútum az egyik olyan ellenőrzési attribútum, amelyet a Windows PowerShell. Egyéb érvényesítési attribútumok példáiért lásd: Paraméterbemenet ellenőrzése.

[Parameter(Position = 0)]
[ValidateNotNullOrEmpty]
public string[] Name

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

Ha a parancsmag a parancssori bemenetet kezeli, 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.

A Get-Proc parancsmag felülbírálja a System.Management.Automation.Cmdlet.ProcessRecord metódust a felhasználó vagy egy szkript által megadott paraméterbemenet Name kezeléséhez. Ez a metódus leküldi az egyes kért folyamatnévhez, vagy ha nincs megtéve név, akkor az összes folyamathoz is lekért folyamatokat. Figyelje meg, hogy a System.Management.Automation.Cmdlet.ProcessRecordparancsmagban a System.Management.Automation.Cmdlet.WriteObject%28System.Object%2CSystem.Boolean%29 kimeneti mechanizmus a kimeneti objektumok folyamatnak való küldésére. A hívás második paramétere ( ) úgy van beállítva, hogy tájékoztassa a enumerateCollection Windows PowerShell-runtime-t, hogy számba veszi a folyamatobjektumok kimeneti tömböt, és egyszerre egy folyamatot írjon 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);
    }
  }
}
Protected Overrides Sub ProcessRecord()

    '/ If no process names are passed to the cmdlet, get all processes.
    If processNames Is Nothing Then
        Dim processes As Process()
        processes = Process.GetProcesses()
    End If

    '/ 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 Sub 'ProcessRecord

Kódminta

A teljes C#-mintakódért lásd: GetProcessSample02 minta.

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

Windows PowerShell a parancsmagok között ad át információkat .NET-keretrendszer objektumokkal. Emiatt előfordulhat, hogy egy parancsmagnak meg kell határoznia a saját típusát, vagy egy parancsmagnak ki kell terjesztenie egy másik parancsmag által biztosított meglévő típust. További információ az új típusok meghatározásáról vagy a meglévő típusok kiterjesztéséről: Extending Object Types and Formatting (Az objektumtípusok kiterjesztése és formázása).

A parancsmag kiépítése

Miután implementált egy parancsmagot, regisztrálnia kell azt Windows PowerShell egy Windows PowerShell beépülő modul használatával. További információ a parancsmagok regisztrálásról: Parancsmagok, szolgáltatók és gazdaalkalmazások regisztrálása.

A parancsmag tesztelése

Ha a parancsmag regisztrálva van a Windows PowerShell, a parancssorban való futtatásával tesztelheti. Az itt található két módszer a minta parancsmag kód tesztelésére. A parancsmagok parancssorból való használatával kapcsolatos további információkért lásd: Getting Started with Windows PowerShell.

  • A parancssorban Windows PowerShell a következő paranccsal listába Internet Explorer "IEXPLORE" nevű folyamat nevét.

    get-proc -name iexplore
    

    Az alábbi kimenet jelenik meg.

    Handles  NPM(K)  PM(K)   WS(K)  VS(M)  CPU(s)   Id   ProcessName
    -------  ------  -----   -----  -----   ------ --   -----------
        354      11  10036   18992    85   0.67   3284   iexplore
    
  • Az "IEXPLORE", "OUTLOOK" és "JEGYZETTÖMB" nevű Internet Explorer, Outlook és Jegyzettömb listához használja a következő parancsot. Ha több folyamat is megjelenik, mindegyik megjelenik.

    get-proc -name iexplore, outlook, notepad
    

    Az alábbi kimenet jelenik meg.

    Handles  NPM(K)  PM(K)   WS(K)  VS(M)  CPU(s)   Id   ProcessName
    -------  ------  -----   -----  -----  ------   --   -----------
        732      21  24696    5000    138   2.25  2288   iexplore
        715      19  20556   14116    136   1.78  3860   iexplore
       3917      62  74096   58112    468 191.56  1848   OUTLOOK
         39       2   1024    3280     30   0.09  1444   notepad
         39       2   1024     356     30   0.08  3396   notepad
    

Lásd még:

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

Az első parancsmag létrehozása

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

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

Windows PowerShell-referencia

Parancsmagminták