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 op de opdrachtregel worden geleverd. 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 de twee gespecialiseerde cmdlet-basisklassen. De afgeleide klasse moet:
- Declareer een kenmerk dat de afgeleide klasse identificeert als een cmdlet.
- Definieer openbare eigenschappen die zijn ingericht met kenmerken die de openbare eigenschappen identificeren als cmdlet-parameters.
- Overschrijf een of meer van de invoerverwerkingsmethoden om records te verwerken.
U kunt de assembly die de klasse bevat rechtstreeks laden met behulp van de cmdlet Import-Module of u kunt een hosttoepassing maken waarmee de assembly wordt geladen met behulp van de System.Management.Automation.Runspaces.InitialSessionState-API. 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 als cmdlet te declareren. Hoewel PowerShell verschillende andere kenmerken gebruikt die optioneel zijn, is het cmdlet-kenmerk vereist. Zie Declaratie van cmdlet-kenmerkvoor meer informatie over dit kenmerk.
Cmdlet-parameter
De openbare eigenschappen waarmee de parameters worden gedefinieerd die beschikbaar zijn voor de gebruiker of voor de toepassing waarop de cmdlet wordt uitgevoerd. Cmdlets kunnen vereiste, benoemde, positionele en switch parameters hebben. Met switchparameters kunt u parameters definiëren die alleen worden geëvalueerd als de parameters zijn opgegeven in de aanroep. Zie Cmdlet Parametersvoor 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 parameter hebben die uniek is. Goed cmdlet-ontwerp suggereert sterk dat de unieke parameter ook een vereiste parameter is. Zie Cmdlet Parameter Setsvoor 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 Cmdlet Dynamic Parametersvoor meer informatie over dynamische parameters.
Invoerverwerkingsmethoden
De klasse System.Management.Automation.Cmdlet biedt de volgende virtuele methoden die worden gebruikt voor het verwerken van records. Alle afgeleide cmdlet-klassen moeten een of meer van de eerste drie methoden overschrijven:
- System.Management.Automation.Cmdlet.BeginProcessing-: wordt gebruikt om optionele eenmalige, preverwerkingsfunctionaliteit voor de cmdlet te bieden.
- System.Management.Automation.Cmdlet.ProcessRecord: wordt gebruikt om de functionaliteit voor record-by-recordverwerking voor de cmdlet te bieden. De methode System.Management.Automation.Cmdlet.ProcessRecord kan een willekeurig aantal keren of helemaal niet worden aangeroepen, afhankelijk van de invoer van de cmdlet.
- System.Management.Automation.Cmdlet.EndProcessing: wordt gebruikt om optionele functionaliteit voor eenmalige, naverwerking voor de cmdlet te bieden.
- System.Management.Automation.Cmdlet.StopProcessing: wordt gebruikt om de verwerking te stoppen wanneer de gebruiker de cmdlet asynchroon stopt (bijvoorbeeld door op Ctrl+Cte drukken).
Zie Cmdlet Input Processing Methodsvoor meer informatie over deze methoden.
Wanneer u een cmdlet implementeert, moet u ten minste één van deze invoerverwerkingsmethoden overschrijven. Normaal gesproken is de ProcessRecord() de methode die u overschrijft, omdat deze wordt aangeroepen voor elke record die door de cmdlet wordt verwerkt. Daarentegen worden de methode BeginProcessing() en de methode EndProcessing() één keer aangeroepen om de records vooraf te verwerken of na te verwerken. Zie Invoerverwerkingsmethodenvoor meer informatie over deze methoden.
ShouldProcess-functie
Met PowerShell kunt u cmdlets maken die de gebruiker om feedback vragen voordat de cmdlet een wijziging aanbrengt in het systeem. Als u deze functie wilt gebruiken, moet de cmdlet declareren dat deze de functie ShouldProcess
ondersteunt wanneer u het kenmerk Cmdlet declareert. De cmdlet moet de System.Management.Automation.Cmdlet.ShouldProcess en System.Management.Automation.Cmdlet.ShouldContinue-methoden aanroepen vanuit een invoerverwerkingsmethode. Zie Bevestigingsaanvraagvoor meer informatie over het ondersteunen van de ShouldProcess
-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 aangeven dat deze transacties ondersteunt wanneer het cmdlet-kenmerk wordt gedeclareerd. Ondersteuning voor transacties is geïntroduceerd in Windows PowerShell 2.0. Zie How to Support Transactionsvoor meer informatie over transacties.
Hoe cmdlets verschillen van opdrachten
Cmdlets verschillen van opdrachten in andere command-shell-omgevingen op de volgende manieren:
- Cmdlets zijn exemplaren van .NET-klassen; ze zijn geen zelfstandige uitvoerbare bestanden.
- Cmdlets kunnen worden gemaakt op basis van slechts een dozijn regels code.
- Cmdlets voeren over het algemeen geen eigen parsering, foutpresentatie of uitvoeropmaak uit. Parseren, foutpresentatie en uitvoeropmaak worden verwerkt door de PowerShell-runtime.
- Cmdlets verwerken invoerobjecten uit 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 voor cmdlets
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 System.Management.Automation.Cmdlet basisklasse. Als u deze klasse gebruikt, kan een cmdlet de minimale set afhankelijkheden van de Windows PowerShell-runtime gebruiken. Dit heeft twee voordelen. Het eerste voordeel is dat de cmdlet-objecten kleiner zijn en dat u minder waarschijnlijk last hebt van wijzigingen in de PowerShell-runtime. Het tweede voordeel is dat u, indien nodig, rechtstreeks een exemplaar van het cmdlet-object kunt maken en het 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 System.Management.Automation.PSCmdlet basisklasse. Als u afgeleid bent 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 sessiestatus. (Voor toegang tot de huidige sessiestatus krijgt en stelt u sessievariabelen en voorkeuren in.) Als u deze klasse maakt, wordt de grootte van het cmdlet-object echter groter en betekent dit dat uw cmdlet nauwer is gekoppeld aan de huidige versie van de PowerShell-runtime.
Over het algemeen moet u, tenzij u de uitgebreide toegang tot de PowerShell-runtime nodig hebt, afgeleid zijn van de System.Management.Automation.Cmdlet--klasse. De PowerShell-runtime heeft echter uitgebreide logboekregistratiemogelijkheden voor het uitvoeren van cmdlets. Als uw controlemodel afhankelijk is van deze logboekregistratie, kunt u voorkomen dat uw cmdlet in een andere cmdlet wordt uitgevoerd door de System.Management.Automation.PSCmdlet-klasse.
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 zijn voor de cmdlet. Kenmerken worden bijvoorbeeld gebruikt om een klasse aan te wijzen als cmdlet, om de parameters van de cmdlet op te geven en om de validatie van invoer aan te vragen, zodat cmdletontwikkelaars die functionaliteit niet hoeven te implementeren in hun cmdlet-code. Zie PowerShell-kenmerkenvoor meer informatie over kenmerken.
Cmdlet-namen
PowerShell maakt gebruik van een naamwoord-en-zelfstandig naamwoordpaar om cmdlets te noemen. De Get-Command
cmdlet die is opgenomen in PowerShell, wordt bijvoorbeeld gebruikt om alle cmdlets op te halen 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 cmdlet. Zie Cmdlet Attribute Declarationvoor meer informatie over het declareren van een .NET-klasse als cmdlet.
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 hebt, raadpleegt u de GetProc Tutorial, StopProc Tutorialof SelectStr Tutorial onderwerpen.
Zie Richtlijnen voor het ontwikkelen van cmdletsvoor meer informatie over de richtlijnen voor het schrijven van cmdlets.