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 folyamat egy objektuma, amely egy felsőbb rétegbeli parancsmagból származik. Ez a szakasz azt ismerteti, hogyan adhat hozzá paramétert a Get-Proc parancsmaghoz (a Az első parancsmag létrehozása) annak érdekében, hogy a parancsmag feldolgozhassa a folyamatobjektumokat.
Ez a Get-Proc parancsmag egy Name paramétert használ, amely fogadja a folyamatobjektum bemenetét, lekéri a folyamatadatokat a helyi számítógépről a megadott nevek alapján, majd megjeleníti a parancssorban a folyamatokkal kapcsolatos információkat.
A parancsmagosztály definiálása
A parancsmag létrehozásának első lépése mindig a parancsmag elnevezése és a parancsmagot implementáló .NET-osztály deklarálása. Ez a parancsmag lekéri a folyamatadatokat, így az itt kiválasztott ige 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.
A Get-Proc parancsmag definíciója a következő. Ennek a definíciónak a részleteit az 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
Bemenet definiálása a folyamatból
Ez a szakasz azt ismerteti, hogyan definiálhat bemenetet a folyamatból egy parancsmaghoz. Ez a Get-Proc parancsmag egy olyan tulajdonságot határoz meg, amely az Name paramétert jelöli az Parancssori bemenetetfeldolgozó paraméterek hozzáadása című cikkben leírtak szerint.
(A paraméterek deklarálásával kapcsolatos általános információkért tekintse meg ezt a témakört.)
Ha azonban egy parancsmagnak folyamatbemenetet kell feldolgoznia, a Windows PowerShell-futtatókörnyezetnek meg kell adnia a bemeneti értékekhez kötött paramétereit. Ehhez hozzá kell adnia a ValueFromPipeline kulcsszót, vagy hozzá kell adnia a ValueFromPipelineByProperty kulcsszót a System.Management.Automation.ParameterAttribute attribútumdeklarációhoz. Adja meg a ValueFromPipeline kulcsszót, ha a parancsmag hozzáfér a teljes bemeneti objektumhoz. Adja meg a ValueFromPipelineByProperty, ha a parancsmag csak az objektum egy tulajdonságához fér hozzá.
Itt található a folyamatbemenetet elfogadó Get-Proc parancsmag Name paraméterdeklarációja.
[Parameter(
Position = 0,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true)]
[ValidateNotNullOrEmpty]
public string[] Name
{
get { return this.processNames; }
set { this.processNames = value; }
}
<Parameter(Position:=0, ValueFromPipeline:=True, _
ValueFromPipelineByPropertyName:=True), ValidateNotNullOrEmpty()> _
Public Property Name() As String()
Get
Return processNames
End Get
Set(ByVal value As String())
processNames = value
End Set
End Property
Az előző deklaráció true állítja be a ValueFromPipeline kulcsszót, hogy a Windows PowerShell-futtatókörnyezet a paramétert a bejövő objektumhoz kösse, ha az objektum ugyanaz a típus, mint a paraméter, vagy ha ugyanarra a típusra kényszeríthető. A ValueFromPipelineByPropertyName kulcsszó is true van beállítva, így a Windows PowerShell-futtatókörnyezet ellenőrzi a bejövő objektumot egy Name tulajdonsághoz. Ha a bejövő objektum rendelkezik ilyen tulajdonsággal, a futtatókörnyezet a Name paramétert a bejövő objektum Name tulajdonságához köti.
Megjegyzés
A paraméter ValueFromPipeline attribútum kulcsszójának beállítása elsőbbséget élvez a ValueFromPipelineByPropertyName kulcsszó beállításával szemben.
Bemeneti feldolgozási módszer felülírása
Ha a parancsmag a folyamatbemenetet 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 .
Ez 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.ProcessRecordWriteObject(System.Object,System.Boolean) 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 a Windows PowerShell-futtatókörnyezetben számba vehesse a folyamatobjektumok tömbjét, é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);
} // End foreach (string name...).
}
}
Protected Overrides Sub ProcessRecord()
Dim processes As Process()
'/ If no process names are passed to the cmdlet, get all processes.
If processNames Is Nothing Then
processes = Process.GetProcesses()
Else
'/ 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 If
End Sub 'ProcessRecord
Kódminta
A teljes C# mintakódért lásd GetProcessSample03 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 egy Windows PowerShell beépülő modulon keresztül regisztrálni kell a Windows PowerShellben. 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, tesztelje a parancssorban való futtatásával. Tesztelje például a minta parancsmag kódját. 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.
A Windows PowerShell parancssorában adja meg a következő parancsokat a folyamaton keresztüli folyamat folyamaton keresztüli lekéréséhez.
PS> type ProcessNames | Get-ProcMegjelenik a következő kimenet.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 809 21 40856 4448 147 9.50 2288 iexplore 737 21 26036 16348 144 22.03 3860 iexplore 39 2 1024 388 30 0.08 3396 notepad 3927 62 71836 26984 467 195.19 1848 OUTLOOKÍrja be a következő sorokat az "IEXPLORE" nevű folyamatokból
Nametulajdonságú folyamatobjektumok lekéréséhez. Ez a példa aGet-Processparancsmagot használja (amelyet a Windows PowerShell biztosít) egy felsőbb rétegbeli parancsként az "IEXPLORE" folyamatok lekéréséhez.PS> Get-Process iexplore | Get-ProcMegjelenik a következő kimenet.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 801 21 40720 6544 142 9.52 2288 iexplore 726 21 25872 16652 138 22.09 3860 iexplore 801 21 40720 6544 142 9.52 2288 iexplore 726 21 25872 16652 138 22.09 3860 iexplore
Lásd még:
Parancssori bemenetet 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