Starkt rekommenderade riktlinjer för utveckling
I det här avsnittet beskrivs riktlinjer som du bör följa när du skriver dina cmdlets. De är indelade i riktlinjer för att utforma cmdlets och riktlinjer för att skriva din cmdlet-kod. Du kanske upptäcker att dessa riktlinjer inte gäller för alla scenarier. Men om de gäller och du inte följer dessa riktlinjer kan användarna få en dålig upplevelse när de använder dina cmdlets.
Designriktlinjer
Följande riktlinjer bör följas när du utformar cmdlets för att säkerställa en konsekvent användarupplevelse mellan att använda dina cmdlets och andra cmdlets. När du hittar en designriktlinjer som gäller för din situation bör du titta på riktlinjerna för Kod för liknande riktlinjer.
Använd ett specifikt substantiv för ett cmdlet-namn (SD01)
Substantiv som används i cmdlet-namngivning måste vara mycket specifika så att användaren kan identifiera dina cmdlets. Prefixet generiska substantiv som "server" med en förkortad version av produktnamnet. Om ett substantiv till exempel refererar till en server som kör en instans av Microsoft SQL Server använder du ett substantiv som "SQLServer". Kombinationen av specifika substantiv och den korta listan över godkända verb gör det möjligt för användaren att snabbt identifiera och förutse funktioner samtidigt som du undviker duplicering mellan cmdlet-namn.
För att förbättra användarupplevelsen bör substantivet som du väljer för ett cmdlet-namn vara singular. Använd till exempel namnet i Get-Process
stället för Get-Processes
. Det är bäst att följa den här regeln för alla cmdlet-namn, även om en cmdlet sannolikt kommer att agera på fler än ett objekt.
Använd Pascal-fall för cmdlet-namn (SD02)
Använd Pascal-case för parameternamn. Med andra ord versalerar du den första bokstaven i verbet och alla termer som används i substantivet. Exempel: "Clear-ItemProperty
".
Riktlinjer för parameterdesign (SD03)
En cmdlet behöver parametrar som tar emot de data som den måste arbeta med, samt parametrar som anger information som används för att fastställa egenskaperna för åtgärden. En cmdlet kan till exempel ha en parameter som tar emot data från pipelinen, och cmdleten kan ha en parameter som indikerar att cmdleten kan tvingas Name
Force
att utföra åtgärden. Det finns ingen gräns för hur många parametrar som en cmdlet kan definiera.
Använd standardparameternamn
Din cmdlet bör använda standardparameternamn så att användaren snabbt kan avgöra vad en viss parameter innebär. Om ett mer specifikt namn krävs använder du ett standardparameternamn och anger sedan ett mer specifikt namn som alias. Get-Service
Cmdleten har till exempel en parameter som har ett allmänt namn ( Name
) och ett mer specifikt alias ( ServiceName
). Båda termerna kan användas för att ange parametern.
Mer information om parameternamn och deras datatyper finns i Cmdlet Parameter Name and Functionality Guidelines (Riktlinjer för cmdlet-parameternamn och funktioner).
Använda singular parameternamn
Undvik att använda pluralnamn för parametrar vars värde är ett enda element. Detta inkluderar parametrar som tar matriser eller listor eftersom användaren kan ange en matris eller lista med endast ett element.
Pluralparameternamn bör endast användas i de fall där värdet för parametern alltid är ett värde med flera element. I dessa fall bör cmdleten verifiera att flera element har angetts och cmdleten ska visa en varning för användaren om flera element inte anges.
Använda Pascal-case för parameternamn
Använd Pascal-case för parameternamn. Med andra ord, versalisera den första bokstaven i varje ord i parameternamnet, inklusive den första bokstaven i namnet. Parameternamnet använder till exempel ErrorAction
rätt versaler. Följande parameternamn använder felaktig versalisering:
errorAction
erroraction
Parametrar som tar en lista med alternativ
Det finns två sätt att skapa en parameter vars värde kan väljas från en uppsättning alternativ.
Definiera en uppräkningstyp (eller använd en befintlig uppräkningstyp) som anger giltiga värden. Använd sedan uppräkningstypen för att skapa en parameter av den typen.
Lägg till attributet ValidateSet i parameterdeklarationen. Mer information om det här attributet finns i ValidateSet Attribute Declaration.
Använda standardtyper för parametrar
Använd standardtyper för parametrar där det är möjligt för att säkerställa konsekvens med andra cmdlets. Mer information om vilka typer som ska användas för olika parametrar finns i Parameternamn och typer för Standard-cmdlet. Det här avsnittet innehåller länkar till flera ämnen som beskriver namn och .NET Framework för grupper av standardparametrar, till exempel "aktivitetsparametrar".
Använda Strongly-Typed .NET Framework typer
Parametrar ska definieras som .NET Framework för att ge bättre parametervalidering. Till exempel ska parametrar som är begränsade till ett värde från en uppsättning värden definieras som en uppräkningstyp. För att stödja Uniform Resource Identifier (URI) definierar du parametern som en System.Uri-typ. Undvik grundläggande strängparametrar för alla egenskaper utom friformstext.
Använda konsekventa parametertyper
När samma parameter används av flera cmdlets ska du alltid använda samma parametertyp. Om parametern till exempel är en System.Int16-typ för en cmdlet ska du inte göra parametern för en annan Process
cmdlet till en Process
System.Uint16-typ.
Parametrar som tar true och false
Om parametern bara tar true
och false
definierar du parametern som typen System.Management.Automation.SwitchParameter.
En switch-parameter behandlas som true
när den anges i ett kommando. Om parametern inte ingår i ett kommando Windows PowerShell att värdet för parametern är false
. Definiera inte booleska parametrar.
Om parametern behöver skilja mellan 3 värden: $true, $false och "ospecificerade" definierar du en parameter av typen <bool> Nullbar. Behovet av ett tredje, ospecificerat värde inträffar vanligtvis när cmdleten kan ändra en boolesk egenskap för ett objekt. I det här fallet innebär "ospecificerade" att egenskapens aktuella värde inte ändras.
Stödmatriser för parametrar
Ofta måste användarna utföra samma åtgärd mot flera argument. För dessa användare bör en cmdlet acceptera en matris som parameterindata så att en användare kan skicka argumenten till parametern som en Windows PowerShell variabel. Till exempel använder cmdleten Get-Process en matris för de strängar som identifierar namnen på de processer som ska hämtas.
Stöd för PassThru-parametern
Som standard fungerar många cmdlets som ändrar systemet, till exempel cmdleten Stop-Process, som "mottagare" för objekt och returnerar inget resultat. Dessa cmdlet bör implementera PassThru
parametern för att tvinga cmdleten att returnera ett objekt. När parametern anges returnerar cmdleten ett -objekt med hjälp av ett anrop till metoden PassThru
System.Management.Automation.Cmdlet.WriteObject. Följande kommando stoppar till exempel Calc-processen och skickar den resulterande processen till pipelinen.
Stop-Process calc -passthru
I de flesta fall bör cmdletarna Add, Set och New ha stöd för en PassThru
parameter.
Stöd för parameteruppsättningar
En cmdlet är avsedd att uppnå ett enda syfte. Det finns dock ofta mer än ett sätt att beskriva åtgärden eller åtgärdsmålet. En process kan till exempel identifieras med dess namn, dess identifierare eller av ett processobjekt. Cmdleten bör ha stöd för alla rimliga representationer av dess mål. Normalt uppfyller cmdleten detta krav genom att ange uppsättningar med parametrar (kallas parameteruppsättningar) som fungerar tillsammans. En enda parameter kan tillhöra val av antal parameteruppsättningar. Mer information om parameteruppsättningar finns i Cmdlet Parameter Sets.
När du anger parameteruppsättningar anger du bara en parameter i uppsättningen till ValueFromPipeline. Mer information om hur du deklarerar parameterattributet finns i ParameterAttribute-deklaration.
När parameteruppsättningar används definieras standardparameteruppsättningen av attributet Cmdlet. Standardparameteruppsättningen bör innehålla de parametrar som troligen kommer att användas i en interaktiv Windows PowerShell session. Mer information om hur du deklarerar attributet Cmdlet finns i CmdletAttribute Declaration.
Ge feedback till användaren (SD04)
Använd riktlinjerna i det här avsnittet för att ge feedback till användaren. Den här feedbacken gör att användaren kan vara medveten om vad som händer i systemet och fatta bättre administrativa beslut.
Med Windows PowerShell kan en användare ange hur utdata ska hanteras från varje anrop till metoden Write
genom att ange en inställningsvariabel. Användaren kan ange flera inställningsvariabler, inklusive en variabel som avgör om systemet ska visa information och en variabel som avgör om systemet ska fråga användaren innan ytterligare åtgärder vidtas.
Stöd för metoderna WriteWarning, WriteVerbose och WriteDebug
En cmdlet bör anropa metoden System.Management.Automation.Cmdlet.WriteWarning när cmdleten är på väg att utföra en åtgärd som kan ha ett oavsiktligt resultat. En cmdlet bör till exempel anropa den här metoden om cmdleten är på väg att skriva över en skrivskyddad fil.
En cmdlet bör anropa metoden System.Management.Automation.Cmdlet.WriteVerbose när användaren behöver mer information om vad cmdleten gör. En cmdlet bör till exempel anropa den här informationen om cmdlet-författaren anser att det finns scenarier som kan kräva mer information om vad cmdleten gör.
Cmdleten bör anropa metoden System.Management.Automation.Cmdlet.WriteDebug när en utvecklare eller produktsupporttekniker måste förstå vad som har skadat cmdlet-åtgärden. Det är inte nödvändigt för cmdleten att anropa metoden System.Management.Automation.Cmdlet.WriteDebug i samma kod som anropar metoden System.Management.Automation.Cmdlet.WriteVerbose eftersom parametern visar båda informationsuppsättningarna. Debug
Stöd för WriteProgress för åtgärder som tar lång tid
Cmdlet-åtgärder som tar lång tid att slutföra och som inte kan köras i bakgrunden bör ha stöd för förloppsrapportering via periodiska anrop till metoden System.Management.Automation.Cmdlet.WriteProgress.
Använda värdgränssnitten
Ibland måste en cmdlet kommunicera direkt med användaren i stället för med hjälp av de olika metoderna Write eller Should som stöds av klassen System.Management.Automation.Cmdlet. I det här fallet ska cmdleten härledas från klassen System.Management.Automation.PSCmdlet och använda egenskapen System.Management.Automation.PSCmdlet.Host*. Den här egenskapen stöder olika nivåer av kommunikationstyp, inklusive typerna PromptForChoice, Prompt och WriteLine/ReadLine. På den mest specifika nivån finns också sätt att läsa och skriva enskilda nycklar och hantera buffertar.
Såvida inte en cmdlet är särskilt utformad för att generera ett grafiskt användargränssnitt (GUI), bör den inte kringgå värden med hjälp av egenskapen System.Management.Automation.PSCmdlet.Host*. Ett exempel på en cmdlet som har utformats för att generera ett grafiskt användargränssnitt är out-GridView-cmdleten.
Anteckning
Cmdlets bör inte använda System.Console-API:et.
Skapa en cmdlet-hjälpfil (SD05)
För varje cmdlet-sammansättning skapar du Help.xml som innehåller information om cmdleten. Den här informationen innehåller en beskrivning av cmdleten, beskrivningar av cmdletens parametrar, exempel på cmdletens användning med mera.
Riktlinjer för kod
Följande riktlinjer bör följas när du kodar cmdlets för att säkerställa en konsekvent användarupplevelse mellan att använda dina cmdlets och andra cmdlets. När du hittar en kodriktlinjer som gäller för din situation bör du titta på riktlinjerna för design för liknande riktlinjer.
Kodningsparametrar (SC01)
Definiera en parameter genom att deklarera en offentlig egenskap för cmdlet-klassen som är prydad med attributet Parameter. Parametrar behöver inte vara statiska medlemmar i den härledda .NET Framework för cmdleten. Mer information om hur du deklarerar parameterattributet finns i Deklaration av parameterattribut.
Stöd för Windows PowerShell sökvägar
Den Windows PowerShell sökvägen är mekanismen för att normalisera åtkomsten till namnområden. När du tilldelar Windows PowerShell sökväg till en parameter i cmdleten kan användaren definiera en anpassad "enhet" som fungerar som en genväg till en specifik sökväg. När en användare anger en sådan enhet kan lagrade data, till exempel data i registret, användas på ett konsekvent sätt.
Om cmdleten tillåter att användaren anger en fil eller en datakälla ska den definiera en parameter av typen System.String. Om mer än en enhet stöds ska typen vara en matris. Namnet på parametern ska vara Path
, med PSPath
aliaset .
Dessutom bör Path
parametern ha stöd för jokertecken. Om stöd för jokertecken inte krävs definierar du en LiteralPath
parameter.
Om de data som cmdleten läser eller skriver måste vara en fil ska cmdleten acceptera indata för Windows PowerShell-sökvägen och cmdleten ska använda egenskapen System.Management.Automation.Sessionstate.Path för att översätta Windows PowerShell-sökvägarna till sökvägar som filsystemet känner igen. De specifika mekanismerna omfattar följande metoder:
- System.Management.Automation.PSCmdlet.GetResolvedProviderPathFromPSPath
- System.Management.Automation.PSCmdlet.GetUnresolvedProviderPathFromPSPath
- System.Management.Automation.PathIntrinsics.GetResolvedProviderPathFromPSPath
- System.Management.Automation.PathIntrinsics.GetUnresolvedProviderPathFromPSPath
Om de data som cmdleten läser eller skriver bara är en uppsättning strängar i stället för en fil, bör cmdleten använda providerns innehållsinformation (medlem) för att läsa Content
och skriva. Den här informationen hämtas från egenskapen System.Management.Automation.Provider.CmdletProvider.InvokeProvider. Dessa mekanismer gör att andra datalager kan delta i läsning och skrivning av data.
Stöd för jokertecken
En cmdlet ska ha stöd för jokertecken om det är möjligt. Stöd för jokertecken finns på många platser i en cmdlet (särskilt när en parameter tar en sträng för att identifiera ett objekt från en uppsättning objekt). Stop-Proc
Exempel-cmdleten från StopProc Tutorial definierar till exempel en Name
parameter för att hantera strängar som representerar processnamn. Den här parametern stöder jokertecken så att användaren enkelt kan ange vilka processer som ska stoppas.
När det finns stöd för jokertecken skapar en cmdlet-åtgärd vanligtvis en matris. Ibland är det inte meningsfullt att stödja en matris eftersom användaren kanske bara använder ett enskilt objekt i taget. Till exempel behöver cmdleten Set-Location inte ha stöd för en matris eftersom användaren bara anger en enda plats. I det här fallet stöder cmdleten fortfarande jokertecken, men den tvingar upplösning till en enda plats.
Mer information om jokerteckenmönster finns i Stöd för jokertecken i cmdletparametrar.
Definiera objekt
Det här avsnittet innehåller riktlinjer för att definiera objekt för cmdlets och för att utöka befintliga objekt.
Definiera standardmedlemmar
Definiera standardmedlemmar för att utöka en objekttyp i en anpassad Types.ps1xml-fil (använd filen Windows PowerShell Types.ps1xml som mall). Standardmedlemmar definieras av en nod med namnet PSStandardMembers. Dessa definitioner tillåter att andra cmdlets och Windows PowerShell-körningen fungerar med ditt -objekt på ett konsekvent sätt.
Definiera ObjectMembers som ska användas som parametrar
Om du utformar ett objekt för en cmdlet ska du se till att dess medlemmar mappar direkt till parametrarna för de cmdlets som ska använda den. Den här mappningen gör att objektet enkelt kan skickas till pipelinen och skickas från en cmdlet till en annan.
Redan .NET Framework objekt som returneras av cmdlets saknar ofta några viktiga eller praktiska medlemmar som krävs av skriptutvecklaren eller användaren. Dessa saknade medlemmar kan vara särskilt viktiga för visning och för att skapa rätt medlemsnamn så att objektet kan skickas korrekt till pipelinen. Skapa en anpassad Types.ps1xml-fil för att dokumentera dessa obligatoriska medlemmar. När du skapar den här filen rekommenderar vi följande namngivningskonvention: <Your_Product_Name>. Types.ps1xml.
Du kan till exempel lägga till en skriptegenskap till typen Mode
System.IO.FileInfo för att visa attributen för en fil tydligare. Dessutom kan du lägga till en aliasegenskap till typen System.Array för att tillåta konsekvent användning Count
av egenskapsnamnet (i stället för Length
).
Implementera IComparable-gränssnittet
Implementera ett System.IComparable-gränssnitt för alla utdataobjekt. På så sätt kan utdataobjekt enkelt ledas till olika cmdlets för sortering och analys.
Uppdatera visningsinformation
Om visningen för ett objekt inte ger det förväntade resultatet skapar du en anpassad <YourProductName> . Format.ps1xml-fil för objektet.
Stöd för väldefinierade pipelineindata (SC02)
Implementera för mitten av en pipeline
Implementera en cmdlet som förutsätter att den anropas från mitten av en pipeline (det vill säga att andra cmdlet:ar producerar dess indata eller använder dess utdata). Du kan till exempel anta att cmdleten, eftersom den genererar data, endast används som den Get-Process
första cmdleten i en pipeline.
Men eftersom denna cmdlet är utformad för mitten av en pipeline, tillåter denna cmdlet att tidigare cmdlets eller data i pipelinen anger vilka processer som ska hämtas.
Stöd för indata från pipelinen
Inkludera minst en parameter som stöder indata från pipelinen i varje parameteruppsättning för en cmdlet. Med stöd för pipelineindata kan användaren hämta data eller objekt, skicka dem till rätt parameteruppsättning och skicka resultaten direkt till en cmdlet.
En parameter tar emot indata från pipelinen om attributet Parameter innehåller nyckelordet, nyckelordsattributet ValueFromPipeline
eller båda ValueFromPipelineByPropertyName
nyckelorden i deklarationen. Om ingen av parametrarna i en parameteruppsättning stöder nyckelorden eller kan cmdleten inte placeras på ett meningsfullt sätt efter en annan cmdlet eftersom den ignorerar ValueFromPipeline
ValueFromPipelineByPropertyName
alla pipelineindata.
Stöd för ProcessRecord-metoden
Om du vill acceptera alla poster från föregående cmdlet i pipelinen måste cmdleten implementera metoden System.Management.Automation.Cmdlet.ProcessRecord. Windows PowerShell anropar den här metoden flera gånger, en gång för varje post som skickas till din cmdlet.
Skriva enskilda poster till pipelinen (SC03)
När en cmdlet returnerar objekt ska cmdleten skriva objekten direkt när de genereras. Cmdleten bör inte innehålla dem för att buffra dem i en kombinerad matris. De cmdlets som tar emot objekten som indata kommer sedan att kunna bearbeta, visa eller bearbeta och visa utdataobjekten utan fördröjning. En cmdlet som genererar utdataobjekt ett i taget bör anropa metoden System.Management.Automation.Cmdlet.WriteObject. En cmdlet som genererar utdataobjekt i batchar (till exempel eftersom ett underliggande API returnerar en matris med utdataobjekt) bör anropa metoden System.Management.Automation.Cmdlet.WriteObject med den andra parametern inställd på true
.
Skapa cmdlets Case-Insensitive och Case-Preserving (SC04)
Som standard Windows PowerShell sig själv inte är icke-känslig. Men eftersom den hanterar många befintliga system, Windows PowerShell bevarar det här fallet för enkel drift och kompatibilitet. Om ett tecken med andra ord anges med versaler behåller Windows PowerShell det med versaler. För att system ska fungera bra måste en cmdlet följa den här konventionen. Om möjligt bör den fungera på ett icke-icke-känsligt sätt. Det bör dock bevara det ursprungliga fallet för cmdlets som inträffar senare i ett kommando eller i pipelinen.
Se även
Obligatoriska riktlinjer för utveckling
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för