about_Functions_Advanced

Kort beskrivning

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

Lång beskrivning

En cmdlet är ett enda kommando som deltar i pipelinesemantiken i PowerShell. Detta inkluderar binära cmdlets, avancerade skriptfunktioner, CDXML och arbetsflöden.

Med avancerade funktioner kan du skapa cmdlets som skrivs som en PowerShell-funktion. Avancerade funktioner gör det enklare att skapa cmdlets utan att behöva skriva och kompilera en binär cmdlet. Binära cmdlets ä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 cmdlets. 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 verbpar (Skicka) och substantivpar (Greeting) som verb-substantivparet i en kompilerad cmdlet. Funktioner behöver dock inte 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 parametervalideringsattribut. 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 i den tidigare funktionen utförs i processblocket, vilket motsvarar metoden ProcessingRecord som används av kompilerade cmdlets för att bearbeta de data som skickas till cmdleten. Det här blocket, tillsammans med start- och slutblocken, beskrivs i about_Functions_Advanced_Methods avsnitt.

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

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

Se även

about_Functions

about_Functions_Advanced_Methods

about_Functions_Advanced_Parameters

about_Functions_CmdletBindingAttribute

about_Functions_OutputTypeAttribute