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


Paraméterek nélküli parancsmag létrehozása

Ez a szakasz azt ismerteti, hogyan hozhat létre olyan parancsmagot, amely paraméterek használata nélkül kéri le az adatokat a helyi számítógépről, majd írja az adatokat a folyamatba. Az itt ismertetett parancsmag egy Get-Proc parancsmag, amely adatokat kér le a helyi számítógép folyamatairól, majd megjeleníti ezeket az információkat a parancssorban.

Megjegyzés

Vegye figyelembe, hogy a parancsmagok írásakor a Rendszer letölti a Windows PowerShell® referencia-szerelvényeket a lemezre (alapértelmezés szerint a C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0 címen). Ezek nincsenek telepítve a globális szerelvény-gyorsítótárban (GAC).

A parancsmag elnevezése

A parancsmagok neve egy olyan igéből áll, amely jelzi a parancsmag által végrehajtandó műveletet, és egy főnévből, amely a parancsmag által végrehajtandó elemeket jelzi. Mivel ez a minta Get-Proc parancsmag lekéri a folyamatobjektumokat, a System.Management.Automation.VerbsCommon enumerálás által meghatározott "Get" igét és a "Proc" főnévvel jelzi, hogy a parancsmag a folyamatelemeken működik.

Parancsmagok elnevezésekor ne használja a következő karakterek egyikét sem: # , () {} [] & - /\ $ ; : " '<> | ? @ ` .

Főnév kiválasztása

Válasszon egy konkrét főnevet. A legjobb, ha a terméknév rövidített verziójával ellátott egyedi főnevet használ. Az ilyen típusú parancsmagok neve például "Get-SQLServer".

Ige kiválasztása

A jóváhagyott parancsmagok nevének halmazából származó igét kell használnia. A jóváhagyott parancsmag-parancsmagokkal kapcsolatos további információkért lásd parancsmagok igeneveit.

A parancsmagosztály definiálása

Miután kiválasztotta a parancsmag nevét, definiáljon egy .NET-osztályt a parancsmag implementálásához. A minta Get-Proc parancsmag osztálydefiníciója a következő:

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

Figyelje meg, hogy az osztálydefiníció előtt a rendszer a System.Management.Automation.CmdletAttribute attribútumot használja a [Cmdlet(verb, noun, ...)]szintaxissal az osztály parancsmagként való azonosítására. Ez az egyetlen szükséges attribútum az összes parancsmaghoz, és lehetővé teszi, hogy a Windows PowerShell-futtatókörnyezet megfelelően hívja meg őket. Az attribútumszavak beállításával szükség esetén további deklarálhatja az osztályt. Vegye figyelembe, hogy a GetProcCommand mintaosztály attribútumdeklarációja csak a Get-Proc parancsmag főnevét és igenevét deklarálja.

Megjegyzés

Az összes Windows PowerShell-attribútumosztály esetében a beállítható kulcsszavak az attribútumosztály tulajdonságainak felelnek meg.

A parancsmag osztályának elnevezésekor célszerű a parancsmag nevét tükrözni az osztálynévben. Ehhez használja a "VerbNounCommand" formát, és cserélje le a "Verb" és a "Főnév" kifejezést a parancsmag nevében használt igére és főnévre. Ahogy az előző osztálydefinícióban is látható, a minta Get-Proc parancsmag egy GetProcCommand nevű osztályt határoz meg, amely a System.Management.Automation.Cmdlet alaposztályból származik.

Fontos

Ha olyan parancsmagot szeretne definiálni, amely közvetlenül hozzáfér a Windows PowerShell-futtatókörnyezethez, a .NET-osztálynak a System.Management.Automation.PSCmdlet alaposztályból kell származnia. További információ az osztályról: Paraméterkészleteket definiáló parancsmag létrehozása.

Megjegyzés

A parancsmag osztályát explicit módon nyilvánosként kell megjelölni. A nem nyilvánosként megjelölt osztályok alapértelmezés szerint belsőek lesznek, és a Windows PowerShell-futtatókörnyezet nem fogja megtalálni.

A Windows PowerShell a Microsoft.PowerShell.Commands névteret használja a parancsmagosztályaihoz. Javasoljuk, hogy a parancsmagosztályokat az API-névtér Parancsok névterében helyezze el, például xxx.PS. Parancsok.

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

A System.Management.Automation.Cmdlet osztály három fő bemeneti feldolgozási módszert biztosít, amelyek közül legalább egynek felül kell bírálnia a parancsmagot. További információ a Windows PowerShell rekordjainak folyamatáról: A Windows PowerShell működése.

Minden típusú bemenet esetén a Windows PowerShell-futtatókörnyezet meghívja System.Management.Automation.Cmdlet.BeginProcessing a feldolgozás engedélyezéséhez. Ha a parancsmagnak valamilyen előfeldolgozást vagy beállítást kell végrehajtania, ezt a metódus felülírásával teheti meg.

Megjegyzés

A Windows PowerShell a "record" kifejezést használja a parancsmag meghívásakor megadott paraméterértékek halmazának leírására.

Ha a parancsmag elfogadja a folyamatbemenetet, felül kell bírálnia a System.Management.Automation.Cmdlet.ProcessRecord metódust, és opcionálisan a System.Management.Automation.Cmdlet.EndProcessing metódus t. A parancsmagok például felülbírálhatják mindkét metódust, ha az összes bemenetet a System.Management.Automation.Cmdlet.ProcessRecord használatával gyűjti össze, majd a bemenet egészeként működik, nem pedig egy elemként, ahogyan a Sort-Object parancsmag teszi.

Ha a parancsmag nem végez folyamatbemenetet, felül kell bírálnia a System.Management.Automation.Cmdlet.EndProcessing metódust. Vegye figyelembe, hogy ezt a módszert gyakran használják a System.Management.Automation.Cmdlet.BeginProcessing helyett, ha a parancsmag nem működik egyszerre egy elemen, ahogyan a rendezési parancsmag esetében is.

Mivel ennek a minta Get-Proc parancsmagnak folyamatbemenetet kell fogadnia, felülbírálja a System.Management.Automation.Cmdlet.ProcessRecord metódust, és az alapértelmezett implementációkat használja System.Management.Automation.Cmdlet.BeginProcessing és System.Management.Automation.Cmdlet.EndProcessing. A System.Management.Automation.Cmdlet.ProcessRecord felülbírálás lekéri a folyamatokat, és a System.Management.Automation.Cmdlet.Cmdlet.WriteObject metódussal írja őket a parancssorba.

protected override void ProcessRecord()
{
  // Get the current processes
  Process[] processes = Process.GetProcesses();

  // Write the processes to the pipeline making them available
  // to the next cmdlet. The second parameter of this call tells
  // PowerShell to enumerate the array, and send one process at a
  // time to the pipeline.
  WriteObject(processes, true);
}
Protected Overrides Sub ProcessRecord()

    '/ Get the current processes.
    Dim processes As Process()
    processes = Process.GetProcesses()

    '/ Write the processes to the pipeline making them available
    '/ to the next cmdlet. The second parameter of this call tells
    '/ PowerShell to enumerate the array, and send one process at a
    '/ time to the pipeline.
    WriteObject(processes, True)

End Sub 'ProcessRecord

Tudnivalók a bemeneti feldolgozásról

  • A bemenet alapértelmezett forrása egy explicit objektum (például egy sztring), amelyet a felhasználó a parancssorban biztosít. További információ: Parancsmag létrehozása parancssori bevitelifeldolgozásához.

  • A bemeneti feldolgozási módszer a folyamat egy felsőbb rétegbeli parancsmagjának kimeneti objektumából is fogadhat bemenetet. További információ: Parancsmag létrehozása folyamatbemeneti. Vegye figyelembe, hogy a parancsmag parancssori és folyamatforrások kombinációjából tud bemenetet fogadni.

  • Előfordulhat, hogy az alsóbb rétegbeli parancsmag hosszú ideig nem tér vissza, vagy egyáltalán nem. Ezért a parancsmag bemeneti feldolgozási metódusa nem tartalmazhat zárolásokat a System.Management.Automation.Cmdlet.WriteObject hívásai során, különösen azokat a zárolásokat, amelyek hatóköre túlnyúlik a parancsmagpéldányon.

Fontos

A parancsmagok soha ne hívjanak System.Console.Writeline* vagy annak megfelelőjét.

Előfordulhat például, hogy System.Management.Automation.Cmdlet.EndProcessing nem hívható meg, ha a parancsmag félúton van megszakítva, vagy ha a parancsmag bármely részén megszűnik a hiba. Ezért az objektumkarbantartást igénylő parancsmagnak implementálnia kell a teljes System.IDisposable mintát, beleértve a véglegesítőt is, hogy a futtatókörnyezet meghívhassa System.Management.Automation.Cmdlet.EndProcessing és System.IDisposable.Dispose* a feldolgozás végén.

Kódminta

A teljes C#-mintakódért lásd GetProcessSample01 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 regisztrálnia kell azt a Windows PowerShellben egy Windows PowerShell beépülő modulon keresztül. 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, a parancssorban futtatva tesztelheti. A minta Get-Proc parancsmag kódja kicsi, de továbbra is a Windows PowerShell-futtatókörnyezetet és egy meglévő .NET-objektumot használja, ami elég ahhoz, hogy hasznossá tegye. Teszteljük, hogy jobban megértsük, mit tehet Get-Proc, és hogyan használható a kimenete. 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.

  1. Indítsa el a Windows PowerShellt, és kérje le a számítógépen futó aktuális folyamatokat.

    Get-Proc
    

    Megjelenik a következő kimenet.

    Handles  NPM(K)  PM(K)  WS(K)  VS(M)  CPU(s)  Id   ProcessName
    -------  ------  -----  -----  -----  ------  --   ----------
    254      7       7664   12048  66     173.75  1200  QCTRAY
    32       2       1372   2628   31       0.04  1860  DLG
    271      6       1216   3688   33       0.03  3816  lg
    27       2       560    1920   24       0.01  1768  TpScrex
    ...
    
  2. Rendeljen hozzá egy változót a parancsmag eredményeihez a könnyebb kezelés érdekében.

    $p=Get-Proc
    
  3. A folyamatok számának lekérése.

    $p.Length
    

    Megjelenik a következő kimenet.

    63
    
  4. Egy adott folyamat lekérése.

    $p[6]
    

    Megjelenik a következő kimenet.

    Handles  NPM(K)  PM(K)  WS(K)  VS(M)  CPU(s)  Id    ProcessName
    -------  ------  -----  -----  -----  ------  --    -----------
    1033     3       2400   3336   35     0.53    1588  rundll32
    
  5. A folyamat kezdési időpontjának lekérése.

    $p[6].StartTime
    

    Megjelenik a következő kimenet.

    Tuesday, July 26, 2005 9:34:15 AM
    
    $p[6].StartTime.DayOfYear
    
    207
    
  6. Kérje le azokat a folyamatokat, amelyeknél a fogópontok száma nagyobb, mint 500, és rendezze az eredményt.

    $p | Where-Object {$_.HandleCount -gt 500 } | Sort-Object HandleCount
    

    Megjelenik a következő kimenet.

    Handles  NPM(K)  PM(K)  WS(K)  VS(M)  CPU(s)  Id   ProcessName
    -------  ------  -----  -----  -----  ------  --   ----------
    568      14      2164   4972   39     5.55    824  svchost
    716       7      2080   5332   28    25.38    468  csrss
    761      21      33060  56608  440  393.56    3300 WINWORD
    791      71      7412   4540   59     3.31    492  winlogon
    ...
    
  7. A Get-Member parancsmaggal listázhatja az egyes folyamatokhoz elérhető tulajdonságokat.

    $p | Get-Member -MemberType Property
    
        TypeName: System.Diagnostics.Process
    

    Megjelenik a következő kimenet.

    Name                     MemberType Definition
    ----                     ---------- ----------
    BasePriority             Property   System.Int32 BasePriority {get;}
    Container                Property   System.ComponentModel.IContainer Conta...
    EnableRaisingEvents      Property   System.Boolean EnableRaisingEvents {ge...
    ...
    

Lásd még:

Parancsmag létrehozása parancssori beviteli

Parancsmag létrehozása folyamatbemeneti

Windows PowerShell-parancsmag létrehozása

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

A Windows PowerShell működése

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

Windows PowerShell-referencia

parancsmagminták