Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En cmdlet är ett enkelt kommando som används i PowerShell-miljön. PowerShell-körningen anropar dessa cmdletar inom ramen för automationsskript som finns på kommandoraden. PowerShell-körningen anropar dem också programmatiskt via PowerShell-API:er.
cmdlets
Cmdletar utför en åtgärd och returnerar vanligtvis ett Microsoft .NET-objekt till nästa kommando i pipelinen. En cmdlet är ett enda kommando som deltar i pipeline-semantiken i PowerShell. Detta inkluderar binära cmdletar (C#), avancerade skriptfunktioner, CDXML och arbetsflöden.
Den här SDK-dokumentationen beskriver hur du skapar binära cmdletar som skrivits i C#. Information om skriptbaserade cmdletar 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 dekorerade 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 skapa ett värdprogram som läser in sammansättningen med hjälp av System.Management.Automation.Runspaces.InitialSessionState API. Båda metoderna ger programmatisk och kommandoradsåtkomst till cmdletens funktioner.
Cmdlet-villkor
Följande termer används ofta i PowerShell-cmdletdokumentationen:
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 cmdlet-attributet. Mer information om det här attributet finns i Cmdlet-attributdeklaration.
Cmdlet-parameter
De offentliga egenskaper som definierar de parametrar som är tillgängliga för användaren eller för det program som kör cmdleten. Cmdletar kan ha obligatoriska, namngivna, positionella och växla parametrar. Med switchparametrar 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 parametrar som kan användas i samma kommando för att utföra en specifik åtgärd. En cmdlet kan ha flera parameteruppsättningar, men varje parameteruppsättning måste ha minst en parameter som är unik. Bra cmdlet-design tyder starkt på att den unika parametern också är en obligatorisk parameter. Mer information om parameteruppsättningar finns i Cmdlet-parameteruppsättningar.
Dynamisk parameter
En parameter som läggs till i cmdleten vid körning. Vanligtvis läggs de dynamiska parametrarna till i cmdleten när en annan parameter anges till ett specifikt värde. Mer information om dynamiska parametrar finns i Dynamiska cmdletar.
Metoder för indatabearbetning
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 tre första metoderna:
- System.Management.Automation.Cmdlet.BeginProcessing: Används för att tillhandahålla valfria engångsfunktioner för förbearbetning för cmdleten.
- System.Management.Automation.Cmdlet.ProcessRecord: Används för att tillhandahålla post-för-post-bearbetningsfunktioner för cmdleten. Metoden System.Management.Automation.Cmdlet.ProcessRecord kan kallas valfritt antal gånger, eller inte alls, beroende på cmdletens indata.
- System.Management.Automation.Cmdlet.EndProcessing: Används för att tillhandahålla valfria engångsfunktioner efter bearbetning för cmdleten.
- System.Management.Automation.Cmdlet.StopProcessing: Används för att stoppa bearbetningen när användaren stoppar cmdleten asynkront (till exempel genom att trycka på CTRL+C).
Mer information om dessa metoder finns i Cmdlet-indatabearbetningsmetoder.
När du implementerar en cmdlet måste du åsidosätta minst en av dessa indatabearbetningsmetoder. Vanligtvis är ProcessRecord() den metod som du åsidosätter eftersom den anropas för varje post som cmdleten bearbetar. Däremot anropas metoden BeginProcessing() och metoden EndProcessing() en gång för att utföra förbearbetning eller efterbearbetning av posterna. Mer information om dessa metoder finns i indatabearbetningsmetoder.
Funktionen ShouldProcess
Med PowerShell kan du skapa cmdletar som uppmanar användaren att få feedback innan cmdleten ändrar systemet. Om du vill använda den här funktionen måste cmdleten deklarera att den stöder funktionen ShouldProcess
när du deklarerar cmdlet-attributet, och cmdleten måste anropa System.Management.Automation.Cmdlet.ShouldProcess och System.Management.Automation.Cmdlet.ShouldContinue metoder 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 har möjlighet att acceptera eller avvisa de åtgärder som utförs i transaktionen. För att delta i en transaktion måste cmdleten deklarera att den stöder transaktioner när cmdlet-attributet 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.
Hur cmdletar skiljer sig från kommandon
Cmdletar skiljer sig från kommandon i andra kommandogränssnittsmiljöer på följande sätt:
- Cmdletar är instanser av .NET-klasser. de är inte fristående körbara filer.
- Cmdletar kan skapas från så få som ett dussin rader med kod.
- Cmdletar utför vanligtvis inte sin egen parsning, felpresentation eller utdataformatering. Parsning, felpresentation och utdataformatering hanteras av PowerShell-körningen.
- Cmdletar bearbetar indataobjekt från pipelinen i stället för från textströmmar, och cmdletar levererar vanligtvis objekt som utdata till pipelinen.
- Cmdletar är postorienterade eftersom de bearbetar ett enskilt objekt i taget.
Cmdlet-basklasser
Windows PowerShell stöder cmdletar som härleds från följande två basklasser.
De flesta cmdletar baseras på .NET-klasser som härleds från basklassen System.Management.Automation.Cmdlet. Genom att härleda från den här klassen kan en cmdlet 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 benägna att påverkas av ändringar i PowerShell-körningen. Den andra fördelen är att du, om du måste, direkt kan skapa en instans av cmdlet-objektet och sedan anropa det direkt i stället för att anropa det via PowerShell-körningen.
De mer komplexa cmdletarna baseras på .NET-klasser som härleds från System.Management.Automation.PSCmdlet basklass. Genom att härleda från den här klassen får du mycket mer åtkomst till PowerShell-körningen. Med den här åtkomsten kan din cmdlet anropa skript, komma åt leverantörer och få åtkomst till det aktuella sessionstillståndet. (För att få åtkomst till det aktuella sessionstillståndet får du och anger sessionsvariabler och inställningar.) Om du härleder från den här klassen ökar dock storleken på cmdlet-objektet, och det innebär att cmdleten är mer nära kopplad till den aktuella versionen av PowerShell-körningen.
Om du inte behöver utökad åtkomst 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 cmdletar. Om granskningsmodellen är beroende av den här loggningen kan du förhindra körningen av din cmdlet inifrå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 cmdletar 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 sin cmdlet-kod. Mer information om attribut finns i PowerShell-attribut.
Cmdlet-namn
PowerShell använder ett verb-och-substantivnamnpar för att namnge cmdletar. Till exempel används den Get-Command
cmdlet som ingår i PowerShell för att hämta alla cmdletar som är registrerade i kommandogränssnittet. Verbet identifierar den åtgärd som cmdleten utför och substantivet identifierar den resurs som cmdleten utför sin åtgärd 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-attributdeklaration.
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 någon förklaring kan du läsa Exempel på Cmdlet Code. Om du föredrar mer förklaring av koden kan du läsa GetProc Tutorial, StopProc Tutorialeller SelectStr Tutorial.
Mer information om riktlinjerna för att skriva cmdletar finns i Cmdlet Development Guidelines.