Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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, hogy a parancsmag objektumváltozókkal rendelkezik, amelyeket törölni kell a feldolgozás befejezésekor (például ha megnyitja a System.Management.Automation.Cmdlet.BeginProcessing metódust, és nyitva tartja a leírót a System.Management.Automation.Cmdlet.ProcessRecord). Fontos megjegyezni, hogy a Windows PowerShell-futtatókörnyezet nem mindig hívja meg a System.Management.Automation.Cmdlet.EndProcessing metódust, amelynek objektumkarbantartást kell végeznie.
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.
Indítsa el a Windows PowerShellt, és kérje le a számítógépen futó aktuális folyamatokat.
Get-ProcMegjelenik 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 ...Rendeljen hozzá egy változót a parancsmag eredményeihez a könnyebb kezelés érdekében.
$p=Get-ProcA folyamatok számának lekérése.
$p.LengthMegjelenik a következő kimenet.
63Egy 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 rundll32A folyamat kezdési időpontjának lekérése.
$p[6].StartTimeMegjelenik a következő kimenet.
Tuesday, July 26, 2005 9:34:15 AM$p[6].StartTime.DayOfYear207Ké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 HandleCountMegjelenik 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 ...A
Get-Memberparancsmaggal listázhatja az egyes folyamatokhoz elérhető tulajdonságokat.$p | Get-Member -MemberType PropertyTypeName: System.Diagnostics.ProcessMegjelenik 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
Parancsmagok, szolgáltatók és gazdagépalkalmazások regisztrálása