about_Functions_Advanced
Krátký popis
Představuje pokročilé funkce, které představují způsob, jak vytvářet rutiny pomocí skriptů.
Dlouhý popis
Rutina je jeden příkaz, který se účastní sémantiky kanálu PowerShellu. To zahrnuje binární rutiny, pokročilé skriptovací funkce, CDXML a Pracovní postupy.
Pokročilé funkce umožňují vytvářet rutiny, které jsou napsané jako funkce PowerShellu. Pokročilé funkce usnadňují vytváření rutin bez nutnosti psát a kompilovat binární rutinu. Binární rutiny jsou třídy .NET napsané v jazyce .NET, jako je C#.
Pokročilé funkce používají CmdletBinding
atribut k jejich identifikaci jako funkce, které fungují jako rutiny. Atribut CmdletBinding
je podobný atributu rutiny, který se používá ve zkompilovaných třídách rutin k identifikaci třídy jako rutiny. Další informace o tomto atributu najdete v tématu about_Functions_CmdletBindingAttribute.
Následující příklad ukazuje funkci, která přijímá název a pak vytiskne pozdrav pomocí zadaného názvu. Všimněte si také, že tato funkce definuje název, který obsahuje dvojici sloves (Send) a jmenné jméno (Greeting), jako je dvojice sloves-podstatné jméno zkompilované rutiny. Funkce ale nemusí mít název slovesa-podstatné jméno.
function Send-Greeting
{
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string] $Name
)
Process
{
Write-Host ("Hello " + $Name + "!")
}
}
Parametry funkce jsou deklarovány pomocí atributu Parameter
.
Tento atribut lze použít samostatně, nebo ho lze kombinovat s atributem Alias nebo s několika dalšími atributy ověření parametru. Další informace o deklarování parametrů (včetně dynamických parametrů při běhu) najdete v tématu about_Functions_Advanced_Parameters.
Skutečná práce předchozí funkce se provádí v process
bloku, který je ekvivalentní metodě ProcessingRecord , která je používána zkompilovanými rutinami ke zpracování dat předávaných rutinám. Tento blok spolu s begin
end
bloky je popsán v about_Functions_Advanced_Methods tématu.
Pokročilé funkce se liší od zkompilovaných rutin následujícími způsoby:
- Vazba rozšířeného parametru funkce nevyvolá výjimku, pokud je pole řetězců svázané s logickým parametrem.
- Atribut
ValidateSet
aValidatePattern
atribut nemohou předat pojmenované parametry. - Pokročilé funkce se nedají použít v transakcích.