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.
Kort beskrivning
Beskriver hur funktioner som anger CmdletBinding attributet kan använda de metoder och egenskaper som är tillgängliga för kompilerade cmdletar.
Lång beskrivning
Funktioner som anger CmdletBinding attributet kan komma åt ytterligare metoder och egenskaper via variabeln $PSCmdlet . Dessa metoder omfattar följande metoder:
- Samma metoder för indatabearbetning som är tillgängliga för alla funktioner.
- Metoderna
ShouldProcessochShouldContinuesom används för att få användarfeedback innan en åtgärd utförs. - Metoden
ThrowTerminatingErrorför att generera felposter. - Flera
Writemetoder som returnerar olika typer av utdata.
Alla metoder och egenskaper för KLASSEN PSCmdlet är tillgängliga för avancerade funktioner. Mer information finns i System.Management.Automation.PSCmdlet.
Mer information om attributet finns i CmdletBinding about_Functions_CmdletBindingAttribute.
För klassen CmdletBindingAttribute, se System.Management.Automation.Cmdlet.CmdletBindingAttribute.
Metoder för indatabearbetning
Metoderna som beskrivs i det här avsnittet kallas för indatabearbetningsmetoder. För funktioner representeras dessa tre metoder av begin- och processend -blocken i funktionen. PowerShell 7.3 lägger till en clean blockprocessmetod.
Du behöver inte använda något av dessa block i dina funktioner. Om du inte använder ett namngivet block placerar PowerShell koden i funktionsblocket end . Men om du använder något av dessa namngivna block eller definierar ett dynamicparam block måste du placera all kod i ett namngivet block.
I följande exempel visas konturen för en funktion som innehåller ett begin block för engångsförbearbetning, ett process block för bearbetning av flera poster och ett end block för efterbearbetning en gång.
Function Test-ScriptCmdlet
{
[CmdletBinding(SupportsShouldProcess=$true)]
param ($Parameter1)
begin{}
process{}
end{}
clean{}
}
Kommentar
Dessa block gäller för alla funktioner, inte bara funktioner som använder attributet CmdletBinding .
begin
Det här blocket används för att tillhandahålla valfri engångsförbearbetning för funktionen. PowerShell-körningen använder koden i det här blocket en gång för varje instans av funktionen i pipelinen.
process
Det här blocket används för att tillhandahålla post-för-post-bearbetning för funktionen. Du kan använda ett process block utan att definiera de andra blocken. Antalet process blockkörningar beror på hur du använder funktionen och vilka indata funktionen tar emot.
Den automatiska variabeln $_ eller $PSItem innehåller det aktuella objektet i pipelinen för användning i process blocket. Den $input automatiska variabeln innehåller en uppräknare som bara är tillgänglig för funktioner och skriptblock.
Mer information finns i about_Automatic_Variables.
- När funktionen anropas
processi början, eller utanför en pipeline, körs blocket en gång. - I en pipeline
processkörs blocket en gång för varje indataobjekt som når funktionen. - Om pipelineindata som når funktionen är tomma
processkörs inte blocket.- Blocken
begin,endochcleankörs fortfarande.
- Blocken
Viktigt!
Om en funktionsparameter är inställd på att acceptera pipelineindata och ett process block inte har definierats misslyckas bearbetningen av post för post. I det här fallet körs funktionen bara en gång, oavsett indata.
När du skapar en funktion som accepterar pipelineindata och använder CmdletBindingska process blocket använda parametervariabeln som du definierade för pipelineindata i stället för $_ eller $PSItem. Till exempel:
function Get-SumOfNumbers {
[CmdletBinding()]
param (
[Parameter(Mandatory, Position=0, ValueFromPipeline)]
[int[]]$Numbers
)
begin { $retValue = 0 }
process {
foreach ($n in $Numbers) {
$retValue += $n
}
}
end { $retValue }
}
PS> Get-SumOfNumbers 1, 2, 3, 4
10
PS> 1,2,3,4 | Get-SumOfNumbers
10
end
Det här blocket används för att tillhandahålla valfri engångspostbearbetning för funktionen.
clean
Blocket clean lades till i PowerShell 7.3.
Blocket clean är ett bekvämt sätt för användare att rensa resurser som sträcker sig över blocken begin, processoch end . Det liknar semantiskt ett finally block som omfattar alla andra namngivna block i en skriptfunktion eller en skript-cmdlet. Resursrensning tillämpas för följande scenarier:
- när pipelinekörningen slutförs normalt utan att felet avslutas
- när pipelinekörningen avbryts på grund av ett avslutande fel
- när pipelinen stoppas av
Select-Object -First - när pipelinen stoppas av Ctrl+c eller
StopProcessing()
Det rena blocket tar bort alla utdata som skrivs till dataströmmen Lyckades .
Varning
clean Att lägga till blocket är en icke-bakåtkompatibel ändring. Eftersom clean parsas som ett nyckelord hindrar det användare från att direkt anropa ett kommando med namnet clean som den första instruktionen i ett skriptblock. Det är dock inte troligt att det är ett problem. Kommandot kan fortfarande anropas med hjälp av anropsoperatorn (& clean).
Bekräftelsemetoder
ShouldProcess
Den här metoden anropas för att begära bekräftelse från användaren innan funktionen utför en åtgärd som skulle ändra systemet. Funktionen kan fortsätta baserat på det booleska värde som returneras av metoden. Den här metoden kan bara anropas inifrån funktionsblocket process {} . Attributet CmdletBinding måste också deklarera att funktionen stöder ShouldProcess (som du ser i föregående exempel).
Mer information om den här metoden finns i System.Management.Automation.Cmdlet.ShouldProcess.
Mer information om hur du begär bekräftelse finns i Begära bekräftelse.
ShouldContinue
Den här metoden anropas för att begära ett andra bekräftelsemeddelande. Den ska anropas när ShouldProcess metoden returnerar $true. Mer information om den här metoden finns i System.Management.Automation.Cmdlet.ShouldContinue.
Felmetoder
Funktioner kan anropa två olika metoder när fel inträffar. När ett icke-avslutande fel inträffar ska funktionen anropa WriteError metoden, som beskrivs i Write avsnittet metoder. När ett avslutande fel inträffar och funktionen inte kan fortsätta bör den anropa ThrowTerminatingError metoden. Du kan också använda -instruktionen throw för att avsluta fel och cmdleten Write-Error för icke-avslutande fel.
Mer information finns i System.Management.Automation.Cmdlet.ThrowTerminatingError.
Skrivmetoder
En funktion kan anropa följande metoder för att returnera olika typer av utdata.
Observera att inte alla utdata går till nästa kommando i pipelinen. Du kan också använda de olika Write cmdletarna, till exempel Write-Error.
WriteCommandDetail
Information om metoden finns i WriteCommandDetails System.Management.Automation.Cmdlet.WriteCommandDetail.
WriteDebug
Om du vill ange information som kan användas för att felsöka en funktion gör du så att funktionen anropar WriteDebug metoden. Metoden WriteDebug visar felsökningsmeddelanden för användaren. Mer information finns i System.Management.Automation.Cmdlet.WriteDebug.
WriteError
Functions bör anropa den här metoden när icke-avslutande fel inträffar och funktionen är utformad för att fortsätta bearbeta poster. Mer information finns i System.Management.Automation.Cmdlet.WriteError.
Kommentar
Om ett avslutande fel inträffar ska funktionen anropa metoden ThrowTerminatingError .
WriteObject
Med WriteObject metoden kan funktionen skicka ett objekt till nästa kommando i pipelinen. I de flesta fall WriteObject är den metod som ska användas när funktionen returnerar data. Mer information finns i System.Management.Automation.PSCmdlet.WriteObject.
WriteProgress
För funktioner med åtgärder som tar lång tid att slutföra tillåter den här metoden att funktionen anropar WriteProgress metoden så att förloppsinformation visas. Du kan till exempel visa procent färdigt.
Mer information finns i System.Management.Automation.PSCmdlet.WriteProgress.
WriteVerbose
Om du vill ge detaljerad information om vad funktionen gör, gör funktionen anropa WriteVerbose metoden för att visa utförliga meddelanden för användaren. Som standard visas inte utförliga meddelanden. Mer information finns i System.Management.Automation.PSCmdlet.WriteVerbose.
WriteWarning
Om du vill ange information om villkor som kan orsaka oväntade resultat kan du göra så att funktionen anropar metoden WriteWarning för att visa varningsmeddelanden för användaren. Som standard visas varningsmeddelanden. Mer information finns i System.Management.Automation.PSCmdlet.WriteWarning.
Kommentar
Du kan också visa varningsmeddelanden genom att konfigurera variabeln $WarningPreference eller med hjälp av kommandoradsalternativen Verbose och Debug . Mer information om variabeln finns i $WarningPreference about_Preference_Variables.
Andra metoder och egenskaper
Information om andra metoder och egenskaper som kan nås via variabeln finns i $PSCmdletSystem.Management.Automation.PSCmdlet.
Med egenskapen ParameterSetName kan du till exempel se parameteruppsättningen som används. Med parameteruppsättningar kan du skapa en funktion som utför olika uppgifter baserat på de parametrar som anges när funktionen körs.