Láncbemenetet feldolgozó paraméterek hozzáadása
A parancsmagok bemenetének egyik forrása a folyamat egy objektuma, amely egy upstream parancsmagból származik. Ez a szakasz azt ismerteti, hogyan adhat hozzá paramétert a Get-Proc-parancsmaghoz (lásd az első parancsmag létrehozását) annak érdekében, hogy a parancsmag feldolgozni tudja a folyamatobjektumokat.
Ez Get-Proc parancsmag egy olyan paramétert használ, amely bemenetet fogad egy folyamatobjektumból, lekéri a folyamatadatokat a helyi számítógépről a megadott nevek alapján, majd megjeleníti a folyamatokkal kapcsolatos információkat Name
a parancssorban.
A parancsmagosztály meghatározása
A parancsmag létrehozásának első lépése mindig a parancsmag elnevezése és a parancsmagot megvalósító .NET-osztály deklarációja. Ez a parancsmag lekéri a folyamatadatokat, így az itt kiválasztott művelet neve "Get". (Szinte bármilyen olyan parancsmag, amely képes információleolvasásra, képes feldolgozni a parancssori bemenetet.) A jóváhagyott parancsmagokkal kapcsolatos további információkért lásd: Parancsmagok parancsmagnevei.
A következő a parancsmag Get-Proc definí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
Bemenet definiálása a folyamatból
Ez a szakasz azt ismerteti, hogyan definiálhat bemenetet a folyamatból egy parancsmaghoz. Ez Get-Proc parancsmag egy tulajdonságot határoz meg, amely a paramétert jelöli a parancssori bemenetet feldolgozására vonatkozó paraméterek Name
hozzáadásával kapcsolatos leírásban leírtak szerint.
(A paraméterek deklarozásának általános információiért tekintse meg ezt a témakört.)
Ha azonban egy parancsmagnak fel kell feldolgoznia a folyamat bemenetét, a paramétereinek a bemeneti értékekhez kell kötveük a Windows PowerShell futásidejű. Ehhez hozzá kell adnia a kulcsszót, vagy hozzá kell adnia a kulcsszót a ValueFromPipeline
ValueFromPipelineByProperty
System.Management.Automation.Parameterattribute attribútumdeklarációhoz. Adja meg ValueFromPipeline
a kulcsszót, ha a parancsmag hozzáfér a teljes bemeneti objektumhoz. Adja meg ValueFromPipelineByProperty
a értéket, ha a parancsmag csak az objektum egy tulajdonságához fér hozzá.
Lássunk egy paraméterdeklarációt a Get-Proc bemenetet elfogadó Name
parancsmag 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ó a kulcsszót a következőre állítja be: , hogy a Windows PowerShell-futtatás kösse a paramétert a bejövő objektumhoz, ha az objektum ugyanolyan típusú, mint a paraméter, vagy ha ugyanabba a típusba lehet őket ValueFromPipeline
összeküldni. true
A ValueFromPipelineByPropertyName
kulcsszó szintén a következőre van beállítva, hogy a Windows PowerShell futásidejű futtatás ellenőrizze a bejövő objektum true
Name
tulajdonságát. Ha a bejövő objektum rendelkezik ilyen tulajdonságokkal, a futásidő a paramétert a bejövő objektum Name
Name
tulajdonságához köti.
Megjegyzés
Egy paraméter attribútumszavának beállítása elsőbbséget élvez a kulcsszó ValueFromPipeline
ValueFromPipelineByPropertyName
beállításával.
Bemeneti feldolgozási metódus felülbírálása
Ha a parancsmag a folyamat bemenetének kezeléséhez szükséges, 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.
Ez Get-Proc parancsmag felülbírálja a System.Management.Automation.Cmdlet.ProcessRecord metódust a felhasználó vagy egy parancsfájl által megadott paraméterbemenet Name
kezeléséhez. Ez a metódus le fogja kérni az egyes kért folyamatnevekkel vagy az összes folyamattal kapcsolatos folyamatokat, ha nem ad meg nevet. Figyelje meg, hogy a System.Management.Automation.Cmdlet.ProcessRecordfájlban a WriteObject(System.Object,System.Boolean) hívása a kimeneti objektumok folyamatnak való küldésének kimeneti mechanizmusa. A hívás második paramétere ( ) úgy van beállítva, hogy a Windows PowerShell-runtime számba veszi a folyamatobjektumok tömböt, és egyszerre egy folyamatot írjon enumerateCollection
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);
} // 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ódot a GetProcessSample03 mintacímű cikk tartalmazza.
Objektumtípusok és formázás meghatározása
Windows PowerShell .NET-objektumok használatával továbbítja az információkat a parancsmagok között. Emiatt előfordulhat, hogy egy parancsmagnak meg kell határoznia a saját típusát, vagy a parancsmagnak ki kell terjesztenie egy másik parancsmag által biztosított meglévő típust. Az új típusok meghatározásával vagy a meglévő típusok kiterjesztésével kapcsolatos további információkért lásd: Extending Object Types and Formatting(Objektumtípusok kiterjesztése és formázás).
A parancsmag kiépítése
A parancsmagot a megvalósítása után regisztrálni kell a Windows PowerShell egy Windows PowerShell beépülő modulon keresztül. További információ a parancsmagok regisztrálásról: How to Register Cmdlets, Providers, and Host Applications (Parancsmagok, szolgáltatók és gazdaalkalmazások regisztrálása).
A parancsmag tesztelése
Miután regisztrálta a parancsmagot a Windows PowerShell, tesztelje a parancssorban való futtatásával. Tesztelje például a minta parancsmag kódját. A parancsmagok parancssorból való használatával kapcsolatos további információkért lásd: Getting Started with Windows PowerShell.
A Windows PowerShell írja be a következő parancsokat a folyamaton keresztüli folyamatnevek lekérése érdekében.
PS> type ProcessNames | get-proc
Az alábbi kimenet jelenik meg.
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
Adja meg a következő sorokat az "IEXPLORE" nevű folyamatok tulajdonságának
Name
megfelelő folyamatobjektumok lehívása érdekében. Ez a példa a (Windows PowerShell által biztosított) parancsmagot használja felfelé irányuló parancsként azGet-Process
"IEXPLORE" folyamatok lekérése során.PS> get-process iexplore | get-proc
Az alábbi kimenet jelenik meg.
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 gazdaalkalmazások regisztrálása
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: