Overzicht van cmdlets

Een cmdlet is een lichtgewicht opdracht die wordt gebruikt in de PowerShell-omgeving. De PowerShell-runtime roept deze cmdlets aan binnen de context van automatiseringsscripts die worden opgegeven op de opdrachtregel. De PowerShell-runtime roept ze ook programmatisch aan via PowerShell-API's.

Cmdlets

Cmdlets voeren een actie uit en retourneren doorgaans een Microsoft .NET object naar de volgende opdracht in de pijplijn. Een cmdlet is één opdracht die deelneemt aan de pijplijnsemantiek van PowerShell. Dit omvat binaire cmdlets (C#), geavanceerde scriptfuncties, CDXML en werkstromen.

In deze SDK-documentatie wordt beschreven hoe u binaire cmdlets maakt die zijn geschreven in C#. Zie voor meer informatie over cmdlets op basis van scripts:

Als u een binaire cmdlet wilt maken, moet u een cmdlet-klasse implementeren die is afgeleid van een van twee gespecialiseerde cmdlet-basisklassen. De afgeleide klasse moet:

  • Declareer een kenmerk dat de afgeleide klasse identificeert als een cmdlet.
  • Definieer openbare eigenschappen die zijn voorzien van kenmerken die de openbare eigenschappen identificeren als cmdlet-parameters.
  • Overschrijven een of meer van de invoerverwerkingsmethoden voor het verwerken van records.

U kunt de assembly die de klasse bevat rechtstreeks laden met behulp van de cmdlet Import-Module of u kunt een hosttoepassing maken die de assembly laadt met behulp van de API System.Management.Automation.Runspaces.Initialsessionstate. Beide methoden bieden programmatische en opdrachtregeltoegang tot de functionaliteit van de cmdlet.

Cmdlet-voorwaarden

De volgende termen worden vaak gebruikt in de PowerShell-cmdlet-documentatie:

Cmdlet-kenmerk

Een .NET-kenmerk dat wordt gebruikt om een cmdlet-klasse te declaren als een cmdlet. Hoewel PowerShell verschillende andere optionele kenmerken gebruikt, is het kenmerk Cmdlet vereist. Zie Cmdlet Attribute Declaratievoor meer informatie over dit kenmerk.

Cmdlet-parameter

De openbare eigenschappen die de parameters definiëren die beschikbaar zijn voor de gebruiker of voor de toepassing die de cmdlet wordt uitgevoerd. Cmdlets kunnen vereiste, benoemde, positionele en switchparameters hebben. Met switchparameters kunt u parameters definiëren die alleen worden geëvalueerd als de parameters zijn opgegeven in de aanroep. Zie Cmdlet Parameters (Cmdlet-parameters)voor meer informatie over de verschillende typen parameters.

Parameterset

Een groep parameters die in dezelfde opdracht kunnen worden gebruikt om een specifieke actie uit te voeren. Een cmdlet kan meerdere parametersets hebben, maar elke parameterset moet ten minste één unieke parameter hebben. Een goed cmdlet-ontwerp stelt sterk voor dat de unieke parameter ook een vereiste parameter is. Zie Cmdlet Parameter Sets (Cmdlet-parametersets) voor meer informatie over parametersets.

Dynamische parameter

Een parameter die tijdens runtime aan de cmdlet wordt toegevoegd. Normaal gesproken worden de dynamische parameters toegevoegd aan de cmdlet wanneer een andere parameter is ingesteld op een specifieke waarde. Zie Dynamische parameters voor cmdlet voormeer informatie over dynamische parameters.

Invoerverwerkingsmethoden

De klasse System.Management.Automation.Cmdlet biedt de volgende virtuele methoden die worden gebruikt om records te verwerken. Alle afgeleide cmdlet-klassen moeten een of meer van de eerste drie methoden overschrijven:

Zie Cmdlet Input Processing Methods (Invoerverwerkingsmethoden voor cmdlet) voor meer informatie over deze methoden.

Wanneer u een cmdlet implementeert, moet u ten minste een van deze invoerverwerkingsmethoden overschrijven. Normaal gesproken is ProcessRecord() de methode die u overschrijven, omdat deze wordt aangeroepen voor elke record die door de cmdlet wordt verwerkt. Daarentegen worden de methode BeginProcessing() en de methode EndProcessing() een keer aangeroepen om de records voor- of na te verwerken. Zie Invoerverwerkingsmethoden voor meer informatie over deze methoden.

De functie ShouldProcess

Met PowerShell kunt u cmdlets maken waarmee de gebruiker om feedback wordt gevraagd voordat de cmdlet het systeem wijzigt. Als u deze functie wilt gebruiken, moet de cmdlet declareeren dat deze de functie ondersteunt wanneer u het kenmerk Cmdlet declareerd en moet de cmdlet de methoden ShouldProcess System.Management.Automation.Cmdlet.ShouldProcess en System.Management.Automation.Cmdlet.ShouldContinue aanroepen vanuit een invoerverwerkingsmethode. Zie Bevestiging aanvragen voor meer informatie over het ondersteunen ShouldProcess van de functionaliteit.

Transactie

Een logische groep opdrachten die als één taak worden behandeld. De taak mislukt automatisch als een opdracht in de groep mislukt en de gebruiker de keuze heeft om de acties die in de transactie worden uitgevoerd, te accepteren of af te wijzen. Als u wilt deelnemen aan een transactie, moet de cmdlet declareer dat deze transacties ondersteunt wanneer het kenmerk Cmdlet is gedeclareerd. Ondersteuning voor transacties is geïntroduceerd in Windows PowerShell 2.0. Zie How to Support Transactions(Transacties ondersteunen) voor meer informatie over transacties.

Hoe cmdlets verschillen van opdrachten

Cmdlets verschillen op de volgende manieren van opdrachten in andere opdrachtshell-omgevingen:

  • Cmdlets zijn exemplaren van .NET-klassen; het zijn geen zelfuitvoerbare bestanden.
  • Cmdlets kunnen worden gemaakt van slechts een tiental regels code.
  • Cmdlets doen doorgaans niet hun eigen parsering, foutpresentatie of uitvoeropmaak. Parseren, foutpresentatie en uitvoeropmaak worden verwerkt door de PowerShell-runtime.
  • Cmdlets verwerken invoerobjecten van de pijplijn in plaats van uit tekststromen, en cmdlets leveren doorgaans objecten als uitvoer aan de pijplijn.
  • Cmdlets zijn recordgeoriënteerd omdat ze één object tegelijk verwerken.

Basisklassen van cmdlet

Windows PowerShell ondersteunt cmdlets die zijn afgeleid van de volgende twee basisklassen.

  • De meeste cmdlets zijn gebaseerd op .NET-klassen die zijn afgeleid van de basisklasse System.Management.Automation.Cmdlet. Door af te zien van deze klasse kan een cmdlet de minimale set afhankelijkheden van de Windows PowerShell gebruiken. Dit heeft twee voordelen. Het eerste voordeel is dat de cmdlet-objecten kleiner zijn en u minder waarschijnlijk wordt beïnvloed door wijzigingen in de PowerShell-runtime. Het tweede voordeel is dat u, indien nodig, rechtstreeks een exemplaar van het cmdlet-object kunt maken en dit vervolgens rechtstreeks kunt aanroepen in plaats van het aan te roepen via de PowerShell-runtime.

  • De complexere cmdlets zijn gebaseerd op .NET-klassen die zijn afgeleid van de basisklasse System.Management.Automation.PSCmdlet. Door af te zien van deze klasse hebt u veel meer toegang tot de PowerShell-runtime. Met deze toegang kan uw cmdlet scripts aanroepen, toegang krijgen tot providers en toegang krijgen tot de huidige sessietoestand. (Als u toegang wilt krijgen tot de huidige sessietoestand, krijgt u sessievariabelen en voorkeuren en stelt u deze in.) Als deze klasse wordt afgeleid, neemt de grootte van het cmdlet-object echter toe en betekent dit dat uw cmdlet beter is gekoppeld aan de huidige versie van de PowerShell-runtime.

In het algemeen moet u, tenzij u uitgebreide toegang tot de PowerShell-runtime nodig hebt, afleiden uit de klasse System.Management.Automation.Cmdlet. De PowerShell-runtime heeft echter uitgebreide logboekregistratiemogelijkheden voor de uitvoering van cmdlets. Als uw controlemodel afhankelijk is van deze logboekregistratie, kunt u de uitvoering van uw cmdlet vanuit een andere cmdlet voorkomen door af te dwingen van de klasse System.Management.Automation.PSCmdlet.

Cmdlet-kenmerken

PowerShell definieert verschillende .NET-kenmerken die worden gebruikt voor het beheren van cmdlets en om algemene functionaliteit op te geven die wordt geleverd door PowerShell en die mogelijk vereist is voor de cmdlet. Kenmerken worden bijvoorbeeld gebruikt om een klasse aan te wijzen als een cmdlet, om de parameters van de cmdlet op te geven en om de validatie van invoer aan te vragen, zodat cmdlet-ontwikkelaars die functionaliteit niet in hun cmdlet-code moeten implementeren. Zie PowerShell-kenmerkenvoor meer informatie over kenmerken.

Cmdlet-namen

PowerShell maakt gebruik van een naampaar met werkwoord en zelfstandig naamwoord om cmdlets te noemen. De cmdlet die is opgenomen in PowerShell wordt bijvoorbeeld gebruikt om alle cmdlets op te halen Get-Command die zijn geregistreerd in de opdrachtshell. Het werkwoord identificeert de actie die de cmdlet uitvoert en het zelfstandig naamwoord identificeert de resource waarop de cmdlet de actie uitvoert.

Deze namen worden opgegeven wanneer de .NET-klasse wordt gedeclareerd als een cmdlet. Zie Voor meer informatie over het declareer van een .NET-klasse als een cmdlet Cmdlet Kenmerkdeclaratie.

Cmdlet-code schrijven

Dit document biedt twee manieren om te ontdekken hoe cmdlet-code wordt geschreven. Zie Voorbeelden van cmdlet-codeals u de code liever zonder veel uitleg ziet. Als u liever meer uitleg over de code wilt, bekijkt u de onderwerpen GetProc Tutorial, StopProc Tutorialof SelectStr Tutorial.

Zie Ontwikkelingsrichtlijnen voor cmdletsvoor meer informatie over de richtlijnen voor het schrijven van cmdlets.

Zie ook

Concepten voor PowerShell-cmdlets

Een PowerShell-cmdlet schrijven

PowerShell SDK