Pokyny, které byste měli zvážit při vývoji rutin

Tato část popisuje pokyny, které byste měli zvážit, abyste zajistili dobré vývojové a uživatelské prostředí. Někdy můžou platit a někdy ne.

Pokyny k návrhu

Při navrhování rutin byste měli zvážit následující pokyny. Když najdete pokyny k návrhu, které platí pro vaši situaci, podívejte se na pokyny pro kód, kde najdete podobné pokyny.

Podpora parametru InputObject (AD01)

Protože Windows PowerShell přímo s objekty Microsoft .NET Framework, je často k dispozici objekt .NET Framework, který přesně odpovídá typu, který uživatel potřebuje k provedení konkrétní operace. InputObject je standardní název parametru, který přijímá takový objekt jako vstup. Ukázková rutina v kurzu StopProc například definuje parametr typu Stop-Proc InputObject Proces, který podporuje vstup z kanálu. Uživatel může získat sadu procesních objektů, manipulovat s nimi, vybrat přesné objekty, které se mají zastavit, a pak je předat přímo Stop-Proc do rutiny.

Podpora parametru vynucení (AD02)

V některých případech rutina potřebuje chránit uživatele před provedením požadované operace. Taková rutina by měla podporovat parametr Force, který uživateli umožní přepsat tuto ochranu, pokud má uživatel oprávnění k provedení operace.

Například rutina Remove-Item obvykle neodebere soubor jen pro čtení. Tato rutina ale podporuje parametr Force, aby uživatel mohl vynutit odebrání souboru jen pro čtení. Pokud už uživatel má oprávnění k úpravě atributu jen pro čtení a uživatel soubor odebere, použití parametru Force operaci zjednoduší. Pokud ale uživatel nemá oprávnění k odebrání souboru, nemá parametr Force žádný vliv.

Zpracování přihlašovacích údajů prostřednictvím Windows PowerShell (AD03)

Rutina by měla definovat parametr Credential pro reprezentaci přihlašovacích údajů. Tento parametr musí být typu System.Management.Automation.PSCredential a musí být definován pomocí deklarace atributu Credential. Tato podpora automaticky vyzve uživatele k zadání uživatelského jména, hesla nebo obou, pokud se přímo nezadá úplné přihlašovací údaje. Další informace o atributu Credential najdete v tématu Deklarace atributu Credential.

Podpora parametrů kódování (AD04)

Pokud vaše rutina čte nebo zapisuje text do nebo z binárního formátu, jako je zápis nebo čtení ze souboru v systému souborů, musí mít rutina parametr Encoding, který určuje, jak se text kóduje v binární podobě.

Testovací rutiny by měly vracet logickou hodnotu (AD05)

Rutiny, které provádějí testy svých prostředků, by měly do kanálu vrátit typ System.Boolean, aby je bylo možné použít v podmíněných výrazech.

Pokyny pro kód

Při psaní kódu rutiny byste měli zvážit následující pokyny. Když najdete pokyny, které platí pro vaši situaci, podívejte se na pokyny k návrhu, kde najdete podobné pokyny.

Dodržujte zásady vytváření názvů tříd rutin (AC01)

Pomocí standardních konvencí pro vytváření názvů můžete zajistit, aby rutiny lépe zjišťovatelné a pomohly uživateli přesně pochopit, co tyto rutiny dělají. Tento postup je zvlášť důležitý pro ostatní vývojáře, kteří používají Windows PowerShell, protože rutiny jsou veřejné typy.

Definování rutiny ve správném oboru názvů

Za normálních okolností definujete třídu pro rutinu v .NET Framework, který připojí ". Příkazy" k oboru názvů, který představuje produkt, ve kterém se rutina spouští. Například rutiny, které jsou součástí Windows PowerShell jsou definovány v oboru Microsoft.PowerShell.Commands názvů .

Pojmete třídu rutiny tak, aby odpovídala názvu rutiny.

Když pojmenujte třídu .NET Framework, která implementuje rutinu , pojmenujte třídu " ", kde zástupné symboly a nahradíte slovesem a podstatné jméno použité pro název <Verb><Noun><Command> <Verb> <Noun> rutiny. Například rutinu Get-Process implementuje třída s názvem GetProcessCommand .

Pokud žádný vstup kanálu nepřepíše metodu BeginProcessing (AC02)

Pokud vaše rutina nepřijímá vstupy z kanálu, zpracování by mělo být implementováno v metodě System.Management.Automation.Cmdlet.BeginProcessing. Použití této metody umožňuje Windows PowerShell zachovat řazení mezi rutinami. První rutina v kanálu vždy vrátí své objekty předtím, než zbývající rutiny v kanálu kanálu příležitosti ke spuštění zpracování.

Zpracování žádostí o zastavení potlačí metodu StopProcessing (AC03)

Přepište metodu System.Management.Automation.Cmdlet.StopProcessing tak, aby vaše rutina zpracuje signál stop. Dokončení některých rutin trvá dlouhou dobu a umožňují dlouho mezi voláními modulu runtime Windows PowerShell, například když rutina blokuje vlákno v dlouho běžících voláních RPC. To zahrnuje rutiny, které pro volání metody System.Management.Automation.Cmdlet.WriteObject, metody System.Management.Automation.Cmdlet.WriteError a dalších mechanismů zpětné vazby, které mohou trvat delší dobu. V těchto případech může být nutné, aby uživatel těmto rutinám poslal signál k zastavení.

Implementace rozhraní IDisposable (AC04)

Pokud vaše rutina obsahuje objekty, které metoda System.Management.Automation.Cmdlet.ProcessRecord neuškodí (zapisují do kanálu), může vaše rutina vyžadovat další vyřazení objektů. Pokud například vaše rutina otevře popisovač souboru ve své metodě System.Management.Automation.Cmdlet.BeginProcessing a udržuje popisovač otevřený pro použití metodou System.Management.Automation.Cmdlet.ProcessRecord, musí být tento popisovač na konci zpracování uzavřen.

Modul runtime Windows PowerShell ne vždy volá metodu System.Management.Automation.Cmdlet.EndProcessing. Například metoda System.Management.Automation.Cmdlet.EndProcessing nemusí být volána, pokud je rutina zrušena uprostřed své operace nebo pokud dojde k ukončující chybě v jakékoli části rutiny. Proto by třída .NET Framework pro rutinu, která vyžaduje vyčištění objektu, měla implementovat kompletní vzor rozhraní System.IDisposable, včetně finalizační metody, aby modul runtime Windows PowerShell mohl na konci zpracování volat metody System.Management.Automation.Cmdlet.EndProcessing a System.IDisposable.Dispose*.

Použití typů parametrů s popisem serializace (AC05)

Chcete-li podporovat spouštění rutiny na vzdálených počítačích, použijte typy, které lze snadno serializovat na klientském počítači a potom dosa potom dosaží na serverový počítač. Následující typy jsou vhodné pro serializaci.

Primitivní typy:

  • Bajt, SByte, Decimal, Single, Double, Int16, Int32, Int64, Uint16, UInt32 a UInt64.

  • Boolean, Guid, Byte[], TimeSpan, DateTime, Uri a Version.

  • Char, String, XmlDocument.

Předdefinované typy rehydarytable:

  • PSPrimitiveDictionary

  • Přepínací parametr

  • PSListModifier

  • Přihlašovací údaje PSCredential

  • IP Adresa, MailAddress

  • Cultureinfo

  • X509Certificate2, X500DistinguishedName

  • DirectorySecurity, FileSecurity, RegistrySecurity

Další typy:

  • Securestring

  • Kontejnery (seznamy a slovníky výše uvedeného typu)

Použití SecureString pro citlivá data (AC06)

Při zpracování citlivých dat vždy používejte datový typ System.Security.Securestring. To může zahrnovat vstup kanálu do parametrů a také vrácení citlivých dat do kanálu.

Viz také

Pokyny, které je nutné dodržovat při vývoji rutin

Doporučované pokyny pro vývoj rutin

Vytvoření rutiny Windows PowerShellu