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
ésVerbose
Debug
Warn
ErrorAction
ErrorVariable
OutVariable
OutBuffer
. Emellett a következő aliasok vannak fenntartva a paraméternevekhez:vb
, , , , ésdb
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