Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 Vytvoření první rutiny), aby rutina mohl zpracovávat objekty kanálu.
Tato rutina Get-Proc používá parametr Name, který přijímá vstup z objektu kanálu, načte informace o procesu z místního počítače na základě zadaných názvů a pak zobrazí informace o procesech na příkazovém řádku.
Definování třídy rutiny
Prvním krokem při vytváření rutin 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 příkazu je Get. (Téměř jakýkoli druh rutiny, která dokáže načíst informace, může zpracovat vstup příkazového řádku.) Další informace o schválených rutinách naleznete v tématu Názvy příkazů rutin.
Následuje definice této rutiny Get-Proc. Podrobnosti o této definici jsou uvedeny v 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 rutina Get-Proc definuje vlastnost, která představuje parametr Name, jak je popsáno v Přidání parametrů, které zpracovávají vstupnípříkazového řádku .
(Obecné informace o deklarování parametrů najdete v tomto tématu.)
Pokud ale rutina potřebuje zpracovat vstup kanálu, musí mít parametry vázané na vstupní hodnoty modulem runtime Windows PowerShellu. K tomu je nutné přidat klíčové slovo ValueFromPipeline nebo přidat klíčové slovo ValueFromPipelineByProperty do deklarace atributu System.Management.Automation.ParameterAttribute. Pokud rutina přistupuje k úplnému vstupnímu objektu, zadejte klíčové slovo ValueFromPipeline. Zadejte ValueFromPipelineByProperty, pokud rutina přistupuje pouze k vlastnosti objektu.
Tady je deklarace parametru pro Name parametr této rutiny 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 ValueFromPipeline na true tak, aby modul runtime Windows PowerShellu sváže parametr s příchozím objektem, pokud je objekt stejného typu jako parametr, nebo pokud jej lze převést na stejný typ. Klíčové slovo ValueFromPipelineByPropertyName je také nastaveno na true tak, aby modul runtime prostředí Windows PowerShell zkontroloval příchozí objekt pro vlastnost Name. Pokud má příchozí objekt takovou vlastnost, modul runtime vytvoří vazbu Name parametru na Name vlastnost příchozího objektu.
Poznámka:
Nastavení klíčového slova atributu ValueFromPipeline pro parametr má přednost před nastavením pro klíčové slovo ValueFromPipelineByPropertyName.
Přepsání metody zpracování vstupu
Pokud vaše rutina zpracovává vstup kanálu, musí přepsat příslušné metody zpracování vstupu. Základní metody zpracování vstupu jsou zavedeny v Vytvoření první rutiny.
Tato rutina Get-Proc přepíše metodu System.Management.Automation.Automation.ProcessRecord pro zpracování vstupu parametrů Name poskytnutého uživatelem nebo skriptem. Tato metoda získá procesy pro každý požadovaný název procesu nebo všechny procesy, pokud není zadaný žádný název. Všimněte si, že v System.Management.Automation.Cmdlet.ProcessRecord, volání WriteObject(System.Object,System.Boolean) je výstupní mechanismus pro odesílání výstupních objektů do kanálu. Druhý parametr tohoto volání, enumerateCollection, je nastaven na true říct modulu runtime Prostředí Windows PowerShell, aby vypsal pole procesních objektů a zapsat jeden proces na 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
Ukázka kódu
Úplný vzorový kód jazyka C# najdete v tématu GetProcessSample03 Sample.
Definování typů objektů a formátování
Windows PowerShell předává informace mezi rutinami pomocí objektů .NET. Proto může být potřeba, aby rutina definovala vlastní typ, nebo může být potřeba rozšířit existující typ poskytovaný jinou rutinou. Další informace o definování nových typů nebo rozšíření existujících typů naleznete v tématu Rozšíření typů objektů a formátování.
Sestavení rutiny
Po implementaci rutiny musí být zaregistrované ve Windows PowerShellu prostřednictvím modulu snap-in Prostředí Windows PowerShell. Další informace o registraci rutin naleznete v tématu Postup registrace rutin, poskytovatelů a hostitelských aplikací.
Testování rutiny
Když je vaše rutina zaregistrovaná ve Windows PowerShellu, otestujte ji spuštěním na příkazovém řádku. Například otestujte 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 prostředím Windows PowerShell.
Na příkazovém řádku Windows PowerShellu zadejte následující příkazy, které načtou názvy procesů prostřednictvím kanálu.
PS> type ProcessNames | Get-ProcZobrazí 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 OUTLOOKZadáním následujících řádků získáte objekty procesu, které mají
Namevlastnost z procesů s názvem "IEXPLORE". Tento příklad používá rutinuGet-Process(poskytovanou prostředím Windows PowerShell) jako upstreamový příkaz k načtení procesů IEXPLORE.PS> Get-Process iexplore | Get-ProcZobrazí 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í vstupní příkazového řádku
vytvoření prvního rutiny
rozšíření typů objektů a formátování
registrace rutin, poskytovatelů a hostitelských aplikací
referenční prostředí Windows PowerShell