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 skrivs 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 substantiv (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 parameterattributet. 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 med den tidigare funktionen utförs i processblocket, vilket motsvarar metoden ProcessingRecord som används av kompilerade cmdletar för att bearbeta de data som skickas till cmdleten. Det här blocket, tillsammans med blocken Begin och End, beskrivs i avsnittet about_Functions_Advanced_Methods .

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

  • Avancerad funktionsparameterbindning genererar 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