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.
Krátký popis
Popisuje, jak funkce, které určují atribut CmdletBinding, mohou používat metody a vlastnosti, které jsou k dispozici pro kompilované rutiny.
Dlouhý popis
Funkce, které určují atribut CmdletBinding, mají přístup k dalším metodám a vlastnostem prostřednictvím proměnné $PSCmdlet. Mezi tyto metody patří následující metody:
- Stejné metody zpracování vstupu dostupné pro všechny funkce.
- Metody
ShouldProcessaShouldContinue, které slouží k získání zpětné vazby uživatelů před provedením akce. - Metoda
ThrowTerminatingErrorpro generování záznamů chyb. - Několik
Writemetod, které vracejí různé typy výstupu.
Pro pokročilé funkce jsou k dispozici všechny metody a vlastnosti třídy PSCmdlet. Další informace naleznete v tématu System.Management.Automation.PSCmdlet.
Další informace o atributu CmdletBinding naleznete v tématu about_Functions_CmdletBindingAttribute.
CmdletBindingAttribute třídy naleznete v tématu System.Management.Automation.CmdletBindingAttribute.
Metody zpracování vstupu
Metody popsané v této části se označují jako metody zpracování vstupu. Pro funkce jsou tyto tři metody reprezentovány begin, processa end bloky funkce. PowerShell 7.3 přidá metodu procesu bloku clean.
Ve svých funkcích nemusíte používat žádný z těchto bloků. Pokud pojmenovaný blok nepoužíváte, PowerShell vloží kód do end bloku funkce. Pokud ale použijete některý z těchto pojmenovaných bloků nebo definujete dynamicparam blok, musíte do pojmenovaného bloku vložit veškerý kód.
Následující příklad ukazuje osnovu funkce, která obsahuje blok begin pro jednorázové předběžné zpracování, blok process pro zpracování více záznamů a blok end pro jednorázové následné zpracování.
Function Test-ScriptCmdlet
{
[CmdletBinding(SupportsShouldProcess=$true)]
param ($Parameter1)
begin{}
process{}
end{}
clean{}
}
Poznámka
Tyto bloky platí pro všechny funkce, nejen funkce, které používají atribut CmdletBinding.
begin
Tento blok slouží k poskytnutí volitelného jednorázového předběžného zpracování funkce. Modul runtime PowerShellu používá kód v tomto bloku jednou pro každou instanci funkce v kanálu.
process
Tento blok slouží k zajištění zpracování záznamu po záznamu pro funkci. Můžete použít blok process bez definování ostatních bloků. Počet process spuštění bloku závisí na tom, jak funkci používáte a jaký vstup funkce přijímá.
Automatická proměnná $_ nebo $PSItem obsahuje aktuální objekt v kanálu pro použití v bloku process. Automatická $input proměnná obsahuje enumerátor, který je k dispozici pouze pro funkce a bloky skriptů.
Další informace naleznete v tématu about_Automatic_Variables.
- Volání funkce na začátku nebo mimo kanál spustí
processblok jednou. - V rámci kanálu se blok
processspustí jednou pro každý vstupní objekt, který dosáhne funkce. - Pokud je vstup kanálu, který dosáhne funkce, prázdný,
processblok spustit.- Bloky
begin,endacleanse stále spouštějí.
- Bloky
Důležitý
Pokud je parametr funkce nastavený tak, aby přijímal vstup kanálu a není definován blok process, zpracování záznamů po záznamu selže. V tomto případě se vaše funkce spustí jenom jednou bez ohledu na vstup.
Při vytváření funkce, která přijímá vstup kanálu a používá CmdletBinding, by blok process měl místo $_ nebo $PSItempoužít proměnnou parametru, kterou jste definovali pro vstup kanálu. Například:
function Get-SumOfNumbers {
[CmdletBinding()]
param (
[Parameter(Mandatory, Position=0, ValueFromPipeline)]
[int[]]$Numbers
)
begin { $retValue = 0 }
process {
foreach ($n in $Numbers) {
$retValue += $n
}
}
end { $retValue }
}
PS> Get-SumOfNumbers 1, 2, 3, 4
10
PS> 1,2,3,4 | Get-SumOfNumbers
10
end
Tento blok slouží k poskytnutí volitelného jednorázového následného zpracování funkce.
clean
Blok clean byl přidán v PowerShellu 7.3.
Blok clean je pohodlný způsob, jak uživatelům vyčistit prostředky, které se nachází v begin, processa end blocích. Je to sémanticky podobné bloku finally, který pokrývá všechny ostatní pojmenované bloky funkce skriptu nebo rutiny skriptu. Vyčištění prostředků se vynucuje pro následující scénáře:
- po dokončení provádění kanálu normálně bez ukončení chyby
- při přerušení spuštění kanálu kvůli ukončovací chybě
- po zastavení kanálu
Select-Object -First - když kanál zastavíte Ctrl+c nebo
StopProcessing()
Čistý blok zahodí všechny výstupy zapsané do datového proudu Success.
Opatrnost
Přidání bloku clean představuje zásadní změnu. Protože clean je analyzován jako klíčové slovo, brání uživatelům v přímém volání příkazu pojmenovaného clean jako první příkaz v bloku skriptu. Pravděpodobně to ale nebude problém. Příkaz lze přesto vyvolat pomocí operátoru volání (& clean).
Metody potvrzení
ShouldProcess
Tato metoda se volá k vyžádání potvrzení od uživatele před provedením akce, která by změnila systém. Funkce může pokračovat na základě logické hodnoty vrácené metodou. Tuto metodu lze volat pouze z process {} bloku funkce. Atribut CmdletBinding musí také deklarovat, že funkce podporuje ShouldProcess (jak je znázorněno v předchozím příkladu).
Další informace o této metodě naleznete v tématu System.Management.Automation.Cmdlet.ShouldProcess.
Další informace o tom, jak požádat o potvrzení, naleznete v tématu Žádost o potvrzení.
ShouldContinue
Tato metoda se volá k vyžádání druhé potvrzovací zprávy. Měla by být volána, když metoda ShouldProcess vrátí $true. Další informace o této metodě naleznete v tématu System.Management.Automation.Cmdlet.ShouldContinue.
Metody chyb
Funkce můžou při výskytu chyb volat dvě různé metody. Pokud dojde k neukončující chybě, měla by funkce volat metodu WriteError, která je popsána v části Write metody. Pokud dojde k ukončovací chybě a funkce nemůže pokračovat, měla by volat metodu ThrowTerminatingError. Můžete také použít příkaz throw pro ukončování chyb a rutinu Write-Error pro neukončující chyby.
Další informace naleznete v tématu System.Management.Automation.Cmdlet.ThrowTerminatingError.
Metody zápisu
Funkce může volat následující metody pro vrácení různých typů výstupu.
Všimněte si, že ne všechny výstupy přejdou na další příkaz v kanálu. Můžete také použít různé Write rutiny, například Write-Error.
WriteCommandDetail
Informace o metodě WriteCommandDetails naleznete v tématu System.Management.Automation.Cmdlet.WriteCommandDetail.
WriteDebug
Pokud chcete poskytnout informace, které lze použít k řešení potíží s funkcí, zavolejte funkci WriteDebug metodu. Metoda WriteDebug uživateli zobrazí zprávy ladění. Další informace naleznete v tématu System.Management.Automation.Cmdlet.WriteDebug.
Chyba zápisu
Funkce by měla tuto metodu volat, pokud dojde k neukončovacím chybám a funkce je navržena tak, aby pokračovala ve zpracování záznamů. Další informace naleznete v tématu System.Management.Automation.Cmdlet.WriteError.
Poznámka
Pokud dojde k ukončovací chybě, funkce by měla volat metodu ThrowTerminatingError.
WriteObject
Metoda WriteObject umožňuje funkci odeslat objekt do dalšího příkazu v kanálu. Ve většině případů je WriteObject metodou, která se má použít, když funkce vrátí data. Další informace naleznete v tématu System.Management.Automation.PSCmdlet.WriteObject.
WriteProgress
U funkcí s akcemi, které trvá dlouhou dobu, tato metoda umožňuje funkci volat WriteProgress metodu, aby se zobrazily informace o průběhu. Můžete například zobrazit procento dokončení.
Další informace naleznete v tématu System.Management.Automation.PSCmdlet.WriteProgress.
WriteVerbose
Pokud chcete poskytnout podrobné informace o tom, co funkce dělá, zavolejte funkci metodu WriteVerbose k zobrazení podrobných zpráv uživateli. Ve výchozím nastavení se podrobné zprávy nezobrazují. Další informace naleznete v tématu System.Management.Automation.PSCmdlet.WriteVerbose.
WriteWarning
Chcete-li poskytnout informace o podmínkách, které mohou způsobit neočekávané výsledky, proveďte volání metody WriteWarning k zobrazení upozornění zprávy pro uživatele. Ve výchozím nastavení se zobrazují zprávy upozornění. Další informace naleznete v tématu System.Management.Automation.PSCmdlet.WriteWarning.
Poznámka
Upozornění můžete zobrazit také konfigurací proměnné $WarningPreference nebo pomocí možností Verbose a Debug příkazového řádku. Další informace o proměnné $WarningPreference naleznete v tématu about_Preference_Variables.
Další metody a vlastnosti
Informace o dalších metodách a vlastnostech, ke kterým lze přistupovat prostřednictvím proměnné $PSCmdlet, naleznete v tématu System.Management.Automation.PSCmdlet.
Například vlastnost ParameterSetName umožňuje zobrazit použitou sadu parametrů. Sady parametrů umožňují vytvořit funkci, která provádí různé úlohy na základě parametrů zadaných při spuštění funkce.