Dela via


about_Functions_Advanced

Kort beskrivning

Introducerar avancerade funktioner som är ett sätt att skapa cmdletar med hjälp av skript.

Lång beskrivning

En cmdlet är ett enda kommando som deltar i pipeline-semantiken i PowerShell. Detta omfattar binära cmdletar, avancerade skriptfunktioner, CDXML och arbetsflöden.

Med avancerade funktioner kan du skapa cmdletar som skrivs som en PowerShell-funktion. Avancerade funktioner gör det enklare att skapa cmdletar utan att behöva skriva och kompilera en binär cmdlet. Binära cmdletar är .NET-klasser som är skrivna på ett .NET-språk, till exempel C#.

Avancerade funktioner använder CmdletBinding attributet för att identifiera dem som funktioner som fungerar som cmdletar. Attributet CmdletBinding liknar cmdlet-attributet som används i kompilerade cmdlet-klasser för att identifiera klassen som en cmdlet. Mer information om det här attributet finns i about_Functions_CmdletBindingAttribute.

I följande exempel visas en funktion som accepterar ett namn och sedan skriver ut en hälsning med det angivna namnet. Observera också att den här funktionen definierar ett namn som innehåller ett verb (Skicka) och substantivpar (hälsning) som verb-substantivparet för en kompilerad cmdlet. Funktioner krävs dock inte för att ha ett verb-substantivnamn.

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

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

Parametrarna för funktionen deklareras med hjälp av attributet Parameter . Det här attributet kan användas ensamt eller kombineras med aliasattributet eller med flera andra parameterverifieringsattribut. Mer information om hur du deklarerar parametrar (inklusive dynamiska parametrar som läggs till vid körning) finns i about_Functions_Advanced_Parameters.

Det faktiska arbetet för den tidigare funktionen utförs i process blocket, vilket motsvarar metoden ProcessingRecord som används av kompilerade cmdletar för att bearbeta de data som skickas till cmdleten. Det här blocket beskrivs tillsammans med blocken begin och end i det about_Functions_Advanced_Methods ämnet.

Avancerade funktioner skiljer sig från kompilerade cmdletar på följande sätt:

  • Avancerad funktionsparameterbindning utlöser inget undantag när en matris med strängar är bunden till en boolesk parameter.
  • Attributet ValidateSet och ValidatePattern attributet kan inte skicka namngivna parametrar.
  • Avancerade funktioner kan inte användas i transaktioner.

Se även