about_Functions_Advanced_Methods
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
ShouldProcess
ochShouldContinue
som används för att få användarfeedback innan en åtgärd utförs. - Metoden
ThrowTerminatingError
för att generera felposter. - Flera
Write
metoder 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 process
end
-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
process
i början, eller utanför en pipeline, körs blocket en gång. - I en pipeline
process
körs blocket en gång för varje indataobjekt som når funktionen. - Om pipelineindata som når funktionen är tomma
process
körs inte blocket.- Blocken
begin
,end
ochclean
kö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 CmdletBinding
ska 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
, process
och 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 $PSCmdlet
System.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.