Přidání parametrů, které zpracovávají vstup z příkazového řádku
Jedním zdrojem vstupu pro rutinu je příkazový řádek. Toto téma popisuje, jak přidat parametr do Get-Proc
rutiny (která je popsána v tématu Vytvoření první rutiny), aby rutina mohla zpracovávat vstup z místního počítače na základě explicitních objektů předaných do rutiny. Get-Proc
Rutina popsaná tady načte procesy na základě jejich názvů a potom zobrazí informace o procesech v příkazovém řádku.
Definování třídy rutiny
prvním krokem při vytváření rutiny je pojmenovávání rutin a deklarace třídy .NET Framework, která implementuje rutinu. Tato rutina načte informace o procesu, takže název příkazu, který tady zvolíte, je "Get". (Téměř jakýkoli druh rutiny, která je schopná načíst informace, může zpracovat vstup z příkazového řádku.) Další informace o schválených operacích rutin najdete v tématu názvy operací rutiny.
Zde je deklarace třídy Get-Proc
rutiny. Podrobnosti o této definici jsou k dispozici při vytváření první rutiny.
[Cmdlet(VerbsCommon.Get, "proc")]
public class GetProcCommand: Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
Inherits Cmdlet
Deklarace parametrů
Parametr rutiny umožňuje uživateli poskytnout vstup do rutiny. V následujícím příkladu Get-Proc
a Get-Member
jsou názvy zřetězených rutin a MemberType
je parametrem Get-Member
rutiny. Parametr má argument "Property".
PS> Get-proc; get-member
-MemberType – vlastnost
Chcete-li deklarovat parametry pro rutinu, je nutné nejprve definovat vlastnosti, které reprezentují parametry. v Get-Proc
rutině je jediným parametrem Name
, což v tomto případě představuje název objektu procesu .NET Framework, který se má načíst. Třída rutiny proto definuje vlastnost typu String pro příjem pole názvů.
Zde je deklarace parametru pro Name
parametr Get-Proc
rutiny.
/// <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
pro informování modulu runtime Windows PowerShell, že je tato vlastnost Name
parametr, je do definice vlastnosti přidán atribut System. Management. Automation. Parameterattribute . Základní syntaxe pro deklarování tohoto atributu je [Parameter()]
.
Poznámka
Parametr musí být explicitně označený jako Public. parametry, které nejsou označeny jako veřejné výchozí hodnoty, a nejsou nalezeny modulem runtime Windows PowerShell.
Tato rutina používá pole řetězců pro Name
parametr. Pokud je to možné, rutina by měla definovat také parametr jako pole, protože to umožňuje rutině přijmout více než jednu položku.
Věci, které si zapamatujete o definicích parametrů
předdefinované názvy parametrů Windows PowerShell a datové typy by měly být znovu použity co nejvíce, aby bylo zajištěno, že je vaše rutina kompatibilní s rutinami Windows PowerShell. Například pokud všechny rutiny používají předdefinovaný
Id
název parametru k identifikaci prostředku, uživatel bude snadno pochopit význam parametru bez ohledu na to, jakou rutinu používají. V podstatě názvy parametrů následují stejná pravidla jako ta, která se používají pro názvy proměnných v modulu CLR (Common Language Runtime). Další informace o pojmenovávání parametrů najdete v tématu názvy parametrů rutiny.Windows PowerShell vyhrazuje několik názvů parametrů, aby bylo možné zajistit konzistentní uživatelské prostředí. Nepoužívejte tyto názvy parametrů:
WhatIf
,Confirm
,Verbose
,Debug
,Warn
,ErrorAction
,, aErrorVariable
OutVariable
OutBuffer
. Kromě toho jsou rezervované následující aliasy těchto názvů parametrů:vb
,db
,ea
,ev
,ov
aob
.Name
je jednoduchý a běžný název parametru, který se doporučuje pro použití ve vašich rutinách. Je lepší zvolit název parametru, například to, že se jedná o složitý název, který je jedinečný pro konkrétní rutinu a obtížné si ho zapamatovat.u parametrů se nerozlišují velká a malá písmena v Windows PowerShell, i když ve výchozím nastavení prostředí zachovává velká a malá písmena. Rozlišování velkých a malých písmen argumentů závisí na operaci rutiny. Argumenty jsou předány parametru, jak je uvedeno na příkazovém řádku.
Příklady jiných deklarací parametrů naleznete v tématu parametry rutiny.
Deklarování parametrů jako poziční nebo pojmenované
Rutina musí nastavit každý parametr jako buď poziční, nebo pojmenovaný parametr. Oba typy parametrů akceptují jednotlivé argumenty, více argumentů oddělených čárkami a nastavení logických hodnot. Logický parametr, který se označuje také jako přepínač, zpracovává pouze logická nastavení. Přepínač slouží k určení přítomnosti parametru. Doporučená výchozí hodnota je false
.
Ukázková Get-Proc
rutina definuje Name
parametr jako poziční parametr s pozicí.
0. To znamená, že první argument, který uživatel zadá do příkazového řádku, je automaticky vložen pro tento parametr. Pokud chcete definovat pojmenovaný parametr, pro který musí uživatel zadat název parametru z příkazového řádku, ponechte Position
klíčové slovo mimo deklaraci atributu.
Poznámka
Pokud se nesmí zadat parametry, doporučujeme, abyste si přejmenovali nejpoužívanější parametry, aby uživatelé nemuseli zadávat název parametru.
Deklarování parametrů jako povinné nebo volitelné
Rutina musí nastavit každý parametr buď jako volitelný, nebo jako povinný parametr. V ukázkové Get-Proc
rutině Name
je parametr definován jako volitelný, protože Mandatory
klíčové slovo není nastaveno v deklaraci atributu.
Podpora ověřování parametrů
Ukázková Get-Proc
rutina přidá ověřovací atribut Input. System. Management. Automation. Validatenotnulloremptyattributedo Name
parametru pro povolení ověření, že vstup není null
ani prázdný. Tento atribut je jedním z několika ověřovacích atributů poskytovaných Windows PowerShell. Příklady jiných atributů ověřování najdete v tématu ověřování vstupu parametru.
[Parameter(Position = 0)]
[ValidateNotNullOrEmpty]
public string[] Name
Přepsání vstupní metody zpracování
Pokud vaše rutina zpracovává vstup z příkazového řádku, musí přepsat příslušné metody zpracování vstupu. Základní metody zpracování vstupu jsou představeny při vytváření první rutiny.
Get-Proc
Rutina přepisuje metodu System. Management. Automation. rutina. ProcessRecord pro zpracování Name
vstupu parametru poskytnutého uživatelem nebo skriptem. Tato metoda získá procesy pro každý požadovaný název procesu nebo pro procesy, pokud není zadán žádný název. Všimněte si, že v System. Management. Automation. rutine. ProcessRecordvolání System. Management. Automation. rutine WriteObject% 28System. Object% 2CSystem. Boolean %29 je výstupním mechanismem pro odesílání výstupních objektů do kanálu. druhý parametr tohoto volání, enumerateCollection
, je nastavena na hodnotu true
pro informování modulu runtime Windows PowerShell, aby vypsal výstupní pole objektů procesu a zapisoval jeden proces do příkazového řádku.
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
Vzorek kódu
Úplný ukázkový kód jazyka C# naleznete v tématu GetProcessSample02 Sample.
Definování typů objektů a formátování
Windows PowerShell předává informace mezi rutinami pomocí objektů .NET Framework. V důsledku toho může rutina potřebovat definovat vlastní typ, nebo může být nutné, aby rutina rozšířila existující typ poskytnutý 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 je nutné ji zaregistrovat pomocí Windows PowerShell pomocí modulu snap-in Windows PowerShell. Další informace o registraci rutin najdete v tématu jak registrovat rutiny, zprostředkovatele a hostitelské aplikace.
Testování rutiny
když je vaše rutina zaregistrovaná ve službě Windows PowerShell, můžete ji otestovat spuštěním na příkazovém řádku. Tady jsou dva způsoby testování kódu ukázkové rutiny. Další informace o použití rutin z příkazového řádku naleznete v tématu Začínáme with Windows PowerShell.
na příkazovém řádku Windows PowerShell použijte následující příkaz, který zobrazí seznam procesů aplikace Internet Explorer s názvem "iexplore".
get-proc -name iexplore
Zobrazí se následující výstup.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 354 11 10036 18992 85 0.67 3284 iexplore
chcete-li zobrazit seznam procesů aplikace Internet Explorer, Outlook a Poznámkový blok s názvem "iexplore", "Outlook" a "Notepad", použijte následující příkaz. Pokud je k dispozici více procesů, zobrazí se všechny.
get-proc -name iexplore, outlook, notepad
Zobrazí se následující výstup.
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
Viz také
Přidání parametrů, které zpracovávají vstup z kanálu
Rozšíření typů objektů a formátování
Jak registrovat rutiny, zprostředkovatele a hostitelské aplikace
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat Problémy GitHubu jako mechanismus zpětné vazby pro obsah a nahradíme ho novým systémem zpětné vazby. Další informace najdete tady:Odeslat a zobrazit názory pro