about_Functions_Advanced
Krótki opis
Wprowadza funkcje zaawansowane, które są sposobem tworzenia poleceń cmdlet przy użyciu skryptów.
Długi opis
Polecenie cmdlet to jedno polecenie, które uczestniczy w semantyce potoku programu PowerShell. Obejmuje to polecenia cmdlet binarne, zaawansowane funkcje programu PowerShell i polecenia cmdlet CDXML.
Funkcje zaawansowane umożliwiają tworzenie poleceń cmdlet napisanych jako funkcja programu PowerShell. Funkcje zaawansowane ułatwiają tworzenie poleceń cmdlet bez konieczności pisania i kompilowania binarnego polecenia cmdlet. Polecenia cmdlet binarne to klasy platformy .NET napisane w języku .NET, takim jak C#.
Funkcje zaawansowane używają atrybutu do identyfikowania CmdletBinding
ich jako funkcji, które działają jak polecenia cmdlet. Atrybut CmdletBinding
jest podobny do atrybutu cmdlet używanego w skompilowanych klasach poleceń cmdlet w celu zidentyfikowania klasy jako polecenia cmdlet. Aby uzyskać więcej informacji na temat tego atrybutu, zobacz about_Functions_CmdletBindingAttribute.
Parametry funkcji to zmienne zadeklarowane w instrukcji param()
. Można użyć opcjonalnego atrybutu [Parameter()]
sam lub w połączeniu z atrybutem [Alias()]
lub dowolnym atrybutem weryfikacji parametru. Aby uzyskać więcej informacji na temat deklarowania parametrów, zobacz about_Functions_Advanced_Parameters.
W poniższym przykładzie pokazano funkcję, która akceptuje nazwę, a następnie drukuje powitanie przy użyciu podanej nazwy. Zwróć również uwagę, że ta funkcja definiuje nazwę zawierającą czasownik (Send) i parę noun (Greeting), taką jak para czasowników skompilowanego polecenia cmdlet. Jednak funkcje nie muszą mieć nazwy czasownika.
function Send-Greeting
{
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$Name
)
process
{
Write-Host ("Hello " + $Name + "!")
}
}
Ta funkcja wykonuje pracę w bloku process
, który jest odpowiednikiem metody ProcessingRecord używanej w skompilowanych poleceniach cmdlet. Blok process
i inne nazwane bloki są opisane w about_Functions_Advanced_Methods.
Funkcje zaawansowane różnią się od skompilowanych poleceń cmdlet w następujący sposób:
- Zaawansowane powiązanie parametrów funkcji nie zgłasza wyjątku, gdy tablica ciągów jest powiązana z parametrem logicznym.
- Atrybut
ValidateSet
iValidatePattern
atrybut nie mogą przekazać nazwanych parametrów. - Funkcje zaawansowane nie mogą być używane w transakcjach.