Dela via


Begära bekräftelse från cmdlets

Cmdletar bör begära bekräftelse när de håller på att göra en ändring i systemet som ligger utanför Windows PowerShell-miljön. Om en cmdlet till exempel är på väg att lägga till ett användarkonto eller stoppa en process, bör cmdleten kräva bekräftelse från användaren innan den fortsätter. Om en cmdlet däremot håller på att ändra en Windows PowerShell-variabel behöver cmdleten inte kräva bekräftelse.

För att kunna göra en bekräftelsebegäran måste cmdleten ange att den stöder bekräftelsebegäranden, och den måste anropa metoderna System.Management.Automation.Cmdlet.ShouldProcess och System.Management.Automation.Cmdlet.ShouldContinue (valfritt) för att visa ett meddelande om bekräftelsebegäran.

Stöd för bekräftelsebegäranden

För att stödja bekräftelsebegäranden måste cmdleten ange SupportsShouldProcess-parametern för cmdlet-attributet till true. Detta möjliggör cmdlet-parametrarna Confirm och WhatIf som tillhandahålls av Windows PowerShell. Med parametern Confirm kan användaren styra om bekräftelsebegäran ska visas. Med parametern WhatIf kan användaren avgöra om cmdleten ska visa ett meddelande eller utföra åtgärden. Lägg inte till parametrarna Confirm och WhatIf manuellt i en cmdlet.

I följande exempel visas en cmdlet-attributdeklaration som stöder bekräftelsebegäranden.

[Cmdlet(VerbsDiagnostic.Test, "RequestConfirmationTemplate1",
        SupportsShouldProcess = true)]

Anropa metoderna för bekräftelsebegäran

I cmdlet-koden anropar du metoden System.Management.Automation.Cmdlet.ShouldProcess innan åtgärden som ändrar systemet utförs. Utforma cmdleten så att om anropet returnerar värdet falseutförs inte åtgärden och cmdleten bearbetar nästa åtgärd.

Anropa metoden ShouldContinue

De flesta cmdletar begär bekräftelse med hjälp av metoden System.Management.Automation.Cmdlet.ShouldProcess. Vissa fall kan dock kräva ytterligare bekräftelse. I dessa fall kompletterar du System.Management.Automation.Cmdlet.ShouldProcess samtal med ett anrop till metoden System.Management.Automation.Cmdlet.ShouldContinue. Detta gör att cmdleten eller providern kan kontrollera omfånget för Ja till alla svar på bekräftelseprompten.

Om en cmdlet anropar metoden System.Management.Automation.Cmdlet.ShouldContinue måste cmdleten också ange en Force switch-parameter. Om användaren anger Force när användaren anropar cmdleten bör cmdleten fortfarande anropa System.Management.Automation.Cmdlet.ShouldProcess, men den bör kringgå anropet till System.Management.Automation.Cmdlet.ShouldContinue.

System.Management.Automation.Cmdlet.ShouldContinue utlöser ett undantag när det anropas från en icke-interaktiv miljö där användaren inte kan uppmanas. Genom att lägga till en Force-parameter ser du till att kommandot fortfarande kan utföras när det anropas i en icke-interaktiv miljö.

I följande exempel visas hur du anropar System.Management.Automation.Cmdlet.ShouldProcess och System.Management.Automation.Cmdlet.ShouldContinue.

if (ShouldProcess (...) )
{
  if (Force || ShouldContinue(...))
  {
     // Add code that performs the operation.
  }
}

Beteendet för ett System.Management.Automation.Cmdlet.ShouldProcess-anrop kan variera beroende på vilken miljö cmdleten anropas i. Med hjälp av de tidigare riktlinjerna ser du till att cmdleten fungerar konsekvent med andra cmdletar, oavsett värdmiljö.

Ett exempel på hur du anropar metoden System.Management.Automation.Cmdlet.ShouldProcess finns i Så här begär du bekräftelser.

Ange effektnivå

När du skapar cmdleten anger du påverkansnivån (allvarlighetsgraden) för ändringen. För att göra detta anger du värdet för parametern ConfirmImpact för cmdlet-attributet till Hög, Medel eller Låg. Du kan bara ange ett värde för ConfirmImpact när du även anger parametern SupportsShouldProcess för cmdleten.

För de flesta cmdletar behöver du inte uttryckligen ange ConfirmImpact. Använd i stället standardinställningen för parametern, som är Medel. Om du anger ConfirmImpact till Hög bekräftas åtgärden som standard. Reservera den här inställningen för mycket störande åtgärder, till exempel omformatering av en hårddiskvolym.

Anropa icke-bekräftelsemetoder

Om cmdleten eller providern måste skicka ett meddelande men inte begära bekräftelse kan den anropa följande tre metoder. Undvik att använda metoden System.Management.Automation.Cmdlet.WriteObject för att skicka meddelanden av dessa typer eftersom System.Management.Automation.Cmdlet.WriteObject utdata blandas med den normala utdatan för din cmdlet eller provider, vilket gör skriptskrivning svårt.

Cmdletar och leverantörer anropar först följande metoder för att begära bekräftelse innan de försöker utföra en åtgärd som ändrar ett system utanför Windows PowerShell:

De gör det genom att anropa metoden System.Management.Automation.Cmdlet.ShouldProcess, som uppmanar användaren att bekräfta åtgärden baserat på hur användaren anropade kommandot.

Se även

Skriva en Windows PowerShell-cmdlet