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


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

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

A parancsmagosztály definiálása

A parancsmag létrehozásának első lépése a parancsmag elnevezése és a parancsmagot implementáló .NET-keretrendszerosztály deklarálása. Ez a parancsmag lekéri a folyamatadatokat, így az itt kiválasztott igék 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.

Itt található a Get-Proc parancsmag osztálydeklarációja. A definíció részleteit 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

Paraméterek deklarálása

A parancsmagparaméter lehetővé teszi, hogy a felhasználó bemenetet adjon a parancsmagnak. Az alábbi példában a Get-Proc és a Get-Member a folyamatba tartozó parancsmagok nevei, MemberType pedig a Get-Member parancsmag paramétere. A paraméter argumentuma "tulajdonság".

PS> Get-Proc ; Get-Member -MemberType tulajdonság

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

Íme a Get-Proc parancsmag Name paraméterének paraméterdeklarációja.

/// <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

Ha tájékoztatni szeretné a Windows PowerShell-futtatókörnyezetet, hogy ez a tulajdonság a Name paraméter, a rendszer hozzáad egy System.Management.Automation.ParameterAttribute attribútumot a tulajdonságdefinícióhoz. Az attribútum deklarálásának alapszintaxisa a [Parameter()].

Megjegyzés

Egy paramétert explicit módon nyilvánosként kell megjelölni. Azok a paraméterek, amelyek nem nyilvános alapértelmezettként vannak megjelölve a belsőre, és nem találhatók a Windows PowerShell-futtatókörnyezetben.

Ez a parancsmag sztringtömböt használ a Name paraméterhez. Ha lehetséges, a parancsmagnak tömbként is meg kell adnia egy paramétert, mert így a parancsmag több elemet is elfogadhat.

Tudnivalók a paraméterdefiníciókról

  • Az előre definiált Windows PowerShell-paraméterek nevét és adattípusait a lehető legnagyobb mértékben újra fel kell használni, hogy a parancsmag kompatibilis legyen a Windows PowerShell-parancsmagokkal. Ha például az összes parancsmag az előre definiált Id paraméternevet használja egy erőforrás azonosításához, a felhasználó könnyen megérti a paraméter jelentését, függetlenül attól, hogy milyen parancsmagot használ. A paraméternevek alapvetően ugyanazokat a szabályokat követik, mint a közös nyelvi futtatókörnyezetben (CLR) használt változónevek. A paraméterelnevezésről további információt parancsmag paraméterneveicímű témakörben talál.

  • A Windows PowerShell fenntart néhány paraméternevet, hogy konzisztens felhasználói élményt biztosítson. Ne használja ezeket a paraméterneveket: WhatIf, Confirm, Verbose, Debug, Warn, ErrorAction, ErrorVariable, OutVariableés OutBuffer. Ezenkívül a következő aliasok vannak fenntartva a paraméternevekhez: vb, db, ea, ev, ovés ob.

  • Name egy egyszerű és gyakori paraméternév, amelyet ajánlott használni a parancsmagokban. Jobb, ha egy ilyen paraméternevet választ, mint egy összetett nevet, amely egyedi egy adott parancsmaghoz, és nehéz megjegyezni.

  • A paraméterek nem érzéketlenek a Windows PowerShellben, bár alapértelmezés szerint a rendszerhéj megőrzi a kis- és nagybetűket. Az argumentumok kis- és nagybetűk érzékenysége a parancsmag működésétől függ. Az argumentumok a parancssorban megadott paramétereknek lesznek átadva.

  • További paraméterdeklarációk például: parancsmag paraméterei.

Paraméterek deklarálása pozícióként vagy névvel elnevezve

A parancsmagnak minden paramétert pozíció- vagy elnevezett paraméterként kell beállítania. Mindkét paraméter egyetlen argumentumot, vesszővel elválasztott több argumentumot és logikai beállításokat fogad el. Egy logikai paraméter, más néven kapcsoló, csak a logikai beállításokat kezeli. A kapcsoló a paraméter jelenlétének meghatározására szolgál. Az ajánlott alapértelmezett érték a false.

A minta Get-Proc parancsmag a Name paramétert a 0 pozícióval rendelkező pozícióparaméterként határozza meg. Ez azt jelenti, hogy a felhasználó által a parancssorba beírt 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 Position kulcsszót az attribútumdeklarációból.

Megjegyzés

Ha nem kell paramétereket nevezni, javasoljuk, hogy a leggyakrabban használt paramétereket helyezze pozícióba, hogy a felhasználóknak ne kelljen beírniuk a paraméter nevét.

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

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

Paraméterérvényesítés támogatása

A minta Get-Proc parancsmag hozzáad egy bemeneti érvényesítési attribútumot, System.Management.Automation.ValidateNotNullOrEmptyAttribute, a Name paraméterhez annak ellenőrzéséhez, hogy a bemenet nem null és nem is üres. Ez az attribútum a Windows PowerShell által biztosított számos érvényesítési attribútum egyike. Más érvényesítési attribútumok példáiért lásd Paraméterbemenetiérvényesítése című témakört.

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

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

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

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.ProcessRecord system.Management.Automation.Cmdlet.WriteObject 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 tájékoztassa a Windows PowerShell-futtatókörnyezetet a folyamatobjektumok kimeneti tömbjének számbavételéről, é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);
    }
  }
}
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 és formázás definiálása

A Windows PowerShell .NET-keretrendszer-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 egy 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 regisztrálnia kell azt a Windows PowerShellben egy Windows PowerShell beépülő modul használatával. 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 van a Windows PowerShellben, a parancssorban futtatva tesztelheti. Az alábbiakban két módszert talál a minta parancsmag kódjának tesztelésére. További információ a parancsmagok parancssorból való használatáról: A Windows PowerShellhasználatának első lépései.

  • A Windows PowerShell parancssorában az alábbi paranccsal listázhatja az Internet Explorer "IEXPLORE" nevű folyamatát.

    Get-Proc -Name iexplore
    

    Megjelenik a következő kimenet.

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

    Get-Proc -Name iexplore, outlook, notepad
    

    Megjelenik a következő kimenet.

    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:

Folyamatbemenetet 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