Přidání parametrů, které zpracovávají vstup z kanálu
Jedním ze zdrojů vstupu pro rutinu je objekt v kanálu, který pochází z upstreamové rutiny. Tato část popisuje, jak přidat parametr do rutiny Get-Proc (popsané v tématu Vytvoření první rutiny ),aby rutina zpracuje objekty kanálu.
Tato Get-Proc rutina používá parametr, který přijímá vstup z objektu kanálu, načítá informace o zpracování z místního počítače na základě zadaných názvů a pak zobrazuje informace o procesech Name
na příkazovém řádku.
Definování třídy rutiny
Prvním krokem při vytváření rutiny je vždy pojmenování rutiny a deklarování třídy .NET, která tuto rutinu implementuje. Tato rutina načte informace o procesu, takže zde zvolený název slovesa je "Get". (Téměř jakýkoli druh rutiny, která dokáže načítá informace, dokáže zpracovat vstup z příkazového řádku.) Další informace o schválených příkazech rutin najdete v tématu Názvy rutin.
Následuje definice pro tuto rutinu Get-Proc. Podrobnosti o této definici najdete v tématu Vytvoření první rutiny.
[Cmdlet(VerbsCommon.Get, "proc")]
public class GetProcCommand : Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
Inherits Cmdlet
Definování vstupu z kanálu
Tato část popisuje, jak definovat vstup z kanálu pro rutinu. Tato Get-Proc rutina definuje vlastnost, která představuje parametr , jak je popsáno v tématu Name
Přidání parametrů, které zpracovávají vstup příkazového řádku.
(Obecné informace o deklaraci parametrů najdete v tomto tématu.)
Pokud ale rutina potřebuje zpracovat vstup kanálu, musí mít své parametry vázané na vstupní hodnoty Windows PowerShell runtime. Chcete-li to provést, musíte přidat klíčové slovo nebo přidat klíčové slovo ValueFromPipeline
ValueFromPipelineByProperty
do deklarace atributu System.Management.Automation.Parameterattribute. Pokud ValueFromPipeline
rutina přistupuje k úplnému vstupnímu objektu, zadejte klíčové slovo . ValueFromPipelineByProperty
Určete, jestli rutina přistupuje jenom k vlastnosti objektu .
Tady je deklarace parametru pro parametr této rutiny Name
Get-Proc který přijímá vstup kanálu.
[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
Předchozí deklarace nastaví klíčové slovo na , aby modul runtime Windows PowerShell sváže parametr s příchozím objektem, pokud je objekt stejný typ jako parametr, nebo pokud může být přinucen ke ValueFromPipeline
true
stejnému typu. Klíčové slovo je také nastavené na , takže Windows PowerShell runtime zkontroluje příchozí ValueFromPipelineByPropertyName
true
objekt pro Name
vlastnost. Pokud má příchozí objekt takovou vlastnost, modul runtime vytvoří vazbu parametru na Name
Name
vlastnost příchozího objektu.
Poznámka
Nastavení klíčového slova atributu pro parametr má přednost před ValueFromPipeline
nastavením klíčového ValueFromPipelineByPropertyName
slova .
Přepsání metody vstupního zpracování
Pokud má vaše rutina zpracovat vstup kanálu, musí přepsat příslušné metody zpracování vstupu. Základní metody zpracování vstupu jsou uvedené v tématu Vytvoření první rutiny.
Tato Get-Proc rutina přepíše metodu System.Management.Automation.Cmdlet.ProcessRecord pro zpracování vstupu parametru poskytnutého uživatelem Name
nebo skriptem. Tato metoda získá procesy pro každý požadovaný název procesu nebo všechny procesy, pokud není žádný název. Všimněte si, že v rámci System.Management.Automation.Cmdlet.ProcessRecordje volání WriteObject(System.Object,System.Boolean) výstupním mechanismem pro odesílání výstupních objektů do kanálu. Druhý parametr tohoto volání, , je nastaven na , aby se modulu runtime Windows PowerShell říká, že má vytvořit výčet pole procesních objektů a zapisovat jeden proces po druhém na enumerateCollection
true
příkazový řádek.
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
Vzorek kódu
Kompletní vzorový kód jazyka C# najdete v části Ukázka GetProcessSample03.
Definování typů objektů a formátování
Windows PowerShell předává informace mezi rutinami pomocí objektů .NET. V důsledku toho může rutina potřebovat definovat vlastní typ nebo rutina může potřebovat rozšířit existující typ poskytovaný jinou rutinou. Další informace o definování nových typů nebo rozšíření existujících typů najdete v tématu Rozšíření typů objektůa formátování .
Sestavení rutiny
Po implementaci rutiny musí být tato rutina zaregistrovaná Windows PowerShell prostřednictvím Windows PowerShell modulu snap-in. Další informace o registraci rutin najdete v tématu Postup registrace rutin, zprostředkovatelů a hostitelských aplikací.
Testování rutiny
Když je vaše rutina zaregistrovaná v Windows PowerShell, otestujte ji tak, že ji na příkazovém řádku použijete. Otestujte například kód ukázkové rutiny. Další informace o používání rutin z příkazového řádku najdete v tématu Začínáme s Windows PowerShell.
Na Windows PowerShell příkazového řádku zadejte následující příkazy, které prostřednictvím kanálu načítá názvy procesů.
PS> type ProcessNames | get-proc
Zobrazí se následující výstup.
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
Zadáním následujících řádků získáte objekty procesu, které mají vlastnost z procesů
Name
s názvem IEXPEXPEXPEXP. Tento příklad používáGet-Process
rutinu (poskytnutou Windows PowerShell) jako upstreamový příkaz k načtení procesů "IEXPREQUEST".PS> get-process iexplore | get-proc
Zobrazí se následující výstup.
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
Viz také
Přidání parametrů, které zpracovávají vstup z příkazového řádku
Rozšíření typů objektů a formátování
Registrace rutin, poskytovatelů a hostitelských aplikací
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro