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 PowerShell-funktioner och CDXML-cmdletar.

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.

Parametrarna för funktionen är variabler som deklareras i param()-instruktionen. Du kan använda det valfria [Parameter()]-attributet ensamt eller i kombination med attributet [Alias()] eller något av parameterverifieringsattributen. Mer information om hur du deklarerar parametrar finns i about_Functions_Advanced_Parameters.

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 + "!")
    }
}

Den här funktionen utför arbetet i process-blocket, vilket motsvarar metoden ProcessingRecord som används i kompilerade cmdletar. Blocket process och de andra namngivna blocken beskrivs i , about_Functions_Advanced_Methods,.

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