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.
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
Idparamé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ésOutBuffer. Ezenkívül a következő aliasok vannak fenntartva a paraméternevekhez:vb,db,ea,ev,ovésob.Nameegy 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 iexploreMegjelenik 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 iexploreAz 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, notepadMegjelenik 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