about_Functions_Advanced

Korte beschrijving

Introduceert geavanceerde functies die een manier zijn om cmdlets te maken met behulp van scripts.

Lange beschrijving

Een cmdlet is één opdracht die deel uitmaakt van de pijplijnsemantiek van PowerShell. Dit omvat binaire cmdlets, geavanceerde scriptfuncties, CDXML en werkstromen.

Met geavanceerde functies kunt u cmdlets maken die zijn geschreven als een PowerShell-functie. Geavanceerde functies maken het eenvoudiger om cmdlets te maken zonder dat u een binaire cmdlet hoeft te schrijven en compileren. Binaire cmdlets zijn .NET-klassen die zijn geschreven in een .NET-taal, zoals C#.

Geavanceerde functies gebruiken het CmdletBinding kenmerk om ze te identificeren als functies die fungeren als cmdlets. Het CmdletBinding kenmerk is vergelijkbaar met het cmdlet-kenmerk dat wordt gebruikt in gecompileerde cmdlet-klassen om de klasse te identificeren als een cmdlet. Zie about_Functions_CmdletBindingAttribute voor meer informatie over dit kenmerk.

In het volgende voorbeeld ziet u een functie die een naam accepteert en vervolgens een begroeting afdrukt met behulp van de opgegeven naam. U ziet ook dat deze functie een naam definieert die een werkwoord (Send) en een zelfstandig naamwoordpaar (Begroeting) bevat, zoals het werkwoord-zelfstandig naamwoordpaar van een gecompileerde cmdlet. Functies zijn echter niet vereist om een naamwoord-zelfstandig naamwoord te hebben.

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

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

De parameters van de functie worden gedeclareerd met behulp van het kenmerk Parameter. Dit kenmerk kan alleen worden gebruikt of kan worden gecombineerd met het aliaskenmerk of met verschillende andere parametervalidatiekenmerken. Zie about_Functions_Advanced_Parameters voor meer informatie over het declareren van parameters (inclusief dynamische parameters die tijdens runtime worden toegevoegd).

Het werkelijke werk van de vorige functie wordt uitgevoerd in het procesblok, wat gelijk is aan de methode ProcessingRecord die wordt gebruikt door gecompileerde cmdlets om de gegevens te verwerken die worden doorgegeven aan de cmdlet. Dit blok, samen met de begin- en eindblokken, wordt beschreven in het onderwerp about_Functions_Advanced_Methods .

Geavanceerde functies verschillen van gecompileerde cmdlets op de volgende manieren:

  • Geavanceerde functieparameterbinding genereert geen uitzondering wanneer een matrix met tekenreeksen is gebonden aan een Booleaanse parameter.
  • Het kenmerk ValidateSet en het kenmerk ValidatePattern kunnen geen benoemde parameters doorgeven.
  • Geavanceerde functies kunnen niet worden gebruikt in transacties.

Zie ook