Översikt över cmdlets

En cmdlet är ett enkelt kommando som används i PowerShell-miljön. PowerShell-körningen anropar dessa cmdlets i kontexten för automationsskript som finns på kommandoraden. PowerShell-körningen anropar dem också programmatiskt via PowerShell-API:er.

Cmdletar

Cmdlets utför en åtgärd och returnerar vanligtvis Microsoft .NET ett objekt till nästa kommando i pipelinen. En cmdlet är ett enda kommando som deltar i pipelinesemantiken i PowerShell. Detta inkluderar binära (C#)-cmdlets, avancerade skriptfunktioner, CDXML och arbetsflöden.

Den här SDK-dokumentationen beskriver hur du skapar binära cmdlets skrivna i C#. Information om skriptbaserade cmdlets finns i:

Om du vill skapa en binär cmdlet måste du implementera en cmdlet-klass som härleds från en av två specialiserade cmdlet-basklasser. Den härledda klassen måste:

  • Deklarera ett attribut som identifierar den härledda klassen som en cmdlet.
  • Definiera offentliga egenskaper som är färgade med attribut som identifierar de offentliga egenskaperna som cmdlet-parametrar.
  • Åsidosätt en eller flera av indatabearbetningsmetoderna för att bearbeta poster.

Du kan läsa in sammansättningen som innehåller klassen direkt med hjälp av cmdleten Import-Module, eller så kan du skapa ett värdprogram som läser in sammansättningen med hjälp av API:et System.Management.Automation.Runspaces.Initialsessionstate. Båda metoderna ger programmatisk och kommandoradsåtkomst till cmdletens funktioner.

Cmdlet-villkor

Följande termer används ofta i PowerShell-cmdlet-dokumentationen:

Cmdlet-attribut

Ett .NET-attribut som används för att deklarera en cmdlet-klass som en cmdlet. Även om PowerShell använder flera andra attribut som är valfria krävs attributet Cmdlet. Mer information om det här attributet finns i Cmdlet Attribute Declaration.

Cmdlet-parameter

De offentliga egenskaper som definierar de parametrar som är tillgängliga för användaren eller programmet som kör cmdleten. Cmdlets kan ha obligatoriska, namngivna, positions- och växelparametrar. Med växlingsparametrar kan du definiera parametrar som endast utvärderas om parametrarna anges i anropet. Mer information om de olika typerna av parametrar finns i Cmdlet-parametrar.

Parameteruppsättning

En grupp med parametrar som kan användas i samma kommando för att utföra en viss åtgärd. En cmdlet kan ha flera parameteruppsättningar, men varje parameteruppsättning måste ha minst en unik parameter. Bra cmdlet-design tyder starkt på att den unika parametern också är en obligatorisk parameter. Mer information om parameteruppsättningar finns i Cmdlet Parameter Sets.

Dynamisk parameter

En parameter som läggs till i cmdleten vid körning. Normalt läggs de dynamiska parametrarna till i cmdleten när en annan parameter har angetts till ett specifikt värde. Mer information om dynamiska parametrar finns i Cmdlet dynamiska parametrar.

Bearbetningsmetoder för indata

Klassen System.Management.Automation.Cmdlet innehåller följande virtuella metoder som används för att bearbeta poster. Alla härledda cmdlet-klasser måste åsidosätta en eller flera av de första tre metoderna:

Mer information om dessa metoder finns i Cmdlet Input Processing Methods.

När du implementerar en cmdlet måste du åsidosätta minst en av dessa metoder för bearbetning av indata. ProcessRecord() är vanligtvis den metod som du åsidosätter eftersom den anropas för varje post som cmdleten bearbetar. Däremot anropas metoden BeginProcessing() och EndProcessing() en gång för att utföra förbearbetning eller efterbearbetning av posterna. Mer information om dessa metoder finns i Metoder för bearbetning av indata.

Funktionen ShouldProcess

Med PowerShell kan du skapa cmdlets som uppmanar användaren att lämna feedback innan cmdleten gör en ändring i systemet. Om du vill använda den här funktionen måste cmdleten deklarera att den stöder funktionen när du deklarerar ShouldProcess cmdlet-attributet, och cmdleten måste anropa metoderna System.Management.Automation.Cmdlet.ShouldProcess och System.Management.Automation.Cmdlet.ShouldContinue inifrån en indatabearbetningsmetod. Mer information om hur du stöder funktionen ShouldProcess finns i Begära bekräftelse.

Transaktion

En logisk grupp med kommandon som behandlas som en enda uppgift. Uppgiften misslyckas automatiskt om något kommando i gruppen misslyckas och användaren kan välja att godkänna eller avvisa de åtgärder som utförs i transaktionen. Om du vill delta i en transaktion måste cmdleten deklarera att den stöder transaktioner när attributet Cmdlet deklareras. Stöd för transaktioner introducerades i Windows PowerShell 2.0. Mer information om transaktioner finns i Så här stöder du transaktioner.

Så skiljer sig cmdlets från kommandon

Cmdlets skiljer sig från kommandon i andra kommandogränssnittsmiljöer på följande sätt:

  • Cmdlets är instanser av .NET-klasser. De är inte fristående körbara filer.
  • Cmdlets kan skapas från så få som dussintals kodrader.
  • Cmdlets gör vanligtvis inte sin egen parsning, felpresentation eller utdataformatering. Parsning, felpresentation och utdataformatering hanteras av PowerShell-körningen.
  • Cmdlets bearbetar indataobjekt från pipelinen i stället för från textströmmar, och cmdlets levererar vanligtvis objekt som utdata till pipelinen.
  • Cmdlets är postorienterade eftersom de bearbetar ett enskilt objekt i taget.

Cmdlet-basklasser

Windows PowerShell har stöd för cmdlets som härleds från följande två basklasser.

  • De flesta cmdlets baseras på .NET-klasser som härleds från basklassen System.Management.Automation.Cmdlet. Härlett från den här klassen gör att en cmdlet kan använda den minsta uppsättningen beroenden på Windows PowerShell-körningen. Detta har två fördelar. Den första fördelen är att cmdlet-objekten är mindre och att du är mindre troligt att påverkas av ändringar i PowerShell-körningen. Den andra fördelen är att om du behöver skapa en instans av cmdlet-objektet direkt och sedan anropa den direkt i stället för att anropa den via PowerShell-körningen.

  • De mer komplexa cmdletarna baseras på .NET-klasser som härleds från basklassen System.Management.Automation.PSCmdlet. Genom att härleda från den här klassen får du mycket mer åtkomst till PowerShell-körningen. Den här åtkomsten gör att din cmdlet kan anropa skript, komma åt providers och komma åt det aktuella sessionstillståndet. (För att få åtkomst till det aktuella sessionstillståndet hämtar och anger du sessionsvariabler och inställningar.) Men härleds från den här klassen ökar storleken på cmdlet-objektet, och det innebär att din cmdlet är mer nära kopplad till den aktuella versionen av PowerShell-körningen.

Om du inte behöver den utökade åtkomsten till PowerShell-körningen bör du i allmänhet härleda från klassen System.Management.Automation.Cmdlet. PowerShell-körningen har dock omfattande loggningsfunktioner för körning av cmdlets. Om granskningsmodellen är beroende av den här loggning kan du förhindra körningen av cmdleten från en annan cmdlet genom att härleda från klassen System.Management.Automation.PSCmdlet.

Cmdlet-attribut

PowerShell definierar flera .NET-attribut som används för att hantera cmdlets och för att ange vanliga funktioner som tillhandahålls av PowerShell och som kan krävas av cmdleten. Attribut används till exempel för att ange en klass som en cmdlet, för att ange parametrarna för cmdleten och för att begära validering av indata så att cmdlet-utvecklare inte behöver implementera den funktionen i cmdlet-koden. Mer information om attribut finns i PowerShell-attribut.

Cmdlet-namn

PowerShell använder ett namnpar med verb och substantiv för att namnge cmdlets. Cmdleten som ingår i PowerShell används till exempel för att hämta Get-Command alla cmdlets som är registrerade i kommandogränssnittet. Verbet identifierar åtgärden som cmdleten utför och substantivet identifierar resursen som cmdleten utför åtgärden på.

Dessa namn anges när .NET-klassen deklareras som en cmdlet. Mer information om hur du deklarerar en .NET-klass som en cmdlet finns i Cmdlet Attribute Declaration.

Skriva cmdlet-kod

Det här dokumentet innehåller två sätt att identifiera hur cmdlet-kod skrivs. Om du föredrar att se koden utan mycket förklaring kan du se Exempel på cmdlet-kod. Om du föredrar en mer förklaring av koden kan du läsa avsnitten GetProc Tutorial, StopProc Tutorialeller SelectStr Tutorial.

Mer information om riktlinjerna för att skriva cmdlets finns i Cmdlet Development Guidelines.

Se även

Begrepp relaterade till PowerShell-cmdletar

Skriva en PowerShell-cmdlet

PowerShell SDK