Sdílet prostřednictvím


o_Funkcích_Pokročilých

Krátký popis

Představuje pokročilé funkce, které představují způsob, jak vytvářet rutiny pomocí skriptů.

Dlouhý popis

Cmdlet je jeden příkaz, který se účastní sémantiky roury PowerShellu. To zahrnuje binární rutiny, pokročilé funkce PowerShellu a rutiny CDXML.

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í atribut CmdletBinding k identifikaci jako funkce, které fungují jako cmdlety. Atribut CmdletBinding je podobný atributu rutiny, který se používá v kompilovaných třídách rutin k identifikaci třídy jako rutiny. Další informace o tomto atributu naleznete v části about_Functions_CmdletBindingAttribute.

Parametry funkce jsou proměnné deklarované v příkazu param(). Volitelný atribut [Parameter()] můžete použít samostatně nebo v kombinaci s atributem [Alias()] nebo libovolným atributem ověření parametru. Další informace o deklarování parametrů naleznete v tématu about_Functions_Advanced_Parameters.

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 slova (Send) a podstatného jména (Greeting), podobně jako dvojice podstatné jméno-sloveso u kompilovaného cmdletu. Funkce ale nemusí mít název ve formě slovesa-podstatného jména.

function Send-Greeting
{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        [string]$Name
    )

    process
    {
        Write-Host ("Hello " + $Name + "!")
    }
}

Tato funkce provádí práci v bloku process, který odpovídá metodě ProcessingRecord použitou v kompilovaných rutinách. Blok process a další pojmenované bloky jsou popsány v about_Functions_Advanced_Methods.

Pokročilé funkce se liší od zkompilovaných rutin následujícími způsoby:

  • Pokročilé vazby parametrů funkcí nevyvolají výjimku, pokud je pole řetězců svázáno s logickým parametrem.
  • Atribut ValidateSet a atribut ValidatePattern nemohou předat pojmenované parametry.
  • Pokročilé funkce se nedají použít v transakcích.

PIPELINESTOPTOKEN

Počínaje PowerShellem 7.6-preview.4 $PSCmdlet zahrnuje vlastnost PipelineStopToken umožňující přístup ke zdroji událostí CancellationTo ken, který je svázaný se zdrojem událostí PowerShellu. Token se aktivuje, když kanál PowerShellu obdrží požadavek na zastavení. Použijte ji s metodou .NET, která přijímá přetížení CancellationToken ukončit metodu, pokud požadujete místo čekání na vrácení metody.

V následujícím příkladu funkce volá HttpClient.GetStringAsync, což může nějakou dobu trvat, než odpoví, když je síť pomalá nebo se vrací velké množství dat.

function Invoke-CancelableWebRequest {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        [string]
        $Url
    )

    $client = [System.Net.Http.HttpClient]::new()
    $client.GetStringAsync(
        $Url,
        $PSCmdlet.PipelineStopToken).GetAwaiter().GetResult()
}

Invoke-CancelableWebRequest -Url https://httpbin.org/delay/10
# Press ctrl+c to cancel

Viz také