about_Return
Short description
Exits the current scope, which can be a function, script, or script block.
Long description
The return
keyword exits a function, script, or script block. It can be used
to exit a scope at a specific point, to return a value, or to indicate that the
end of the scope has been reached.
Users who are familiar with languages like C or C# might want to use the
return
keyword to make the logic of leaving a scope explicit.
In PowerShell, the results of each statement are returned as output, even
without a statement that contains the Return keyword. Languages like C or C#
return only the value or values that are specified by the return
keyword.
Note
Beginning in PowerShell 5.0, PowerShell added language for defining
classes, by using formal syntax. In the context of a PowerShell class,
nothing is output from a method except what you specify using a
return
statement. You can read more about PowerShell classes in
about_Classes.
Syntax
The syntax for the return
keyword is as follows:
return [<expression>]
The return
keyword can appear alone, or it can be followed by a value or
expression, as follows:
return
return $a
return (2 + $a)
Examples
The following example uses the return
keyword to exit a function at a
specific point if a conditional is met. Odd numbers are not multiplied
because the return statement exits before that statement can execute.
function MultiplyEven
{
param($number)
if ($number % 2) { return "$number is not even" }
$number * 2
}
1..10 | ForEach-Object {MultiplyEven -Number $_}
1 is not even
4
3 is not even
8
5 is not even
12
7 is not even
16
9 is not even
20
In PowerShell, values can be returned even if the return
keyword is not used.
The results of each statement are returned. For example, the following
statements return the value of the $a
variable:
$a
return
The following statement also returns the value of $a
:
return $a
The following example includes a statement intended to let the user know that the function is performing a calculation:
function calculation {
param ($value)
"Please wait. Working on calculation..."
$value += 73
return $value
}
$a = calculation 14
The "Please wait. Working on calculation..." string is not displayed. Instead,
it is assigned to the $a
variable, as in the following example:
PS> $a
Please wait. Working on calculation...
87
Both the informational string and the result of the calculation are returned
by the function and assigned to the $a
variable.
If you would like to display a message within your function, beginning in
PowerShell 5.0, you can use the Information
stream. The code below corrects
the above example using the Write-Information
cmdlet with a
InformationAction
of Continue.
function calculation {
param ($value)
Write-Information "Please wait. Working on calculation..." -InformationAction Continue
$value += 73
return $value
}
$a = calculation 14
Please wait. Working on calculation...
C:\PS> $a
87
Return values and the Pipeline
When you return a collection from your script block or function, PowerShell automatically unrolls the members and passes them one at a time through the pipeline. This is due to PowerShell's one-at-a-time processing. For more information, see about_pipelines.
This concept is illustrated by the following sample function that returns an
array of numbers. The output from the function is piped to the Measure-Object
cmdlet which counts the number of objects in the pipeline.
function Test-Return
{
$array = 1,2,3
return $array
}
Test-Return | Measure-Object
Count : 3
Average :
Sum :
Maximum :
Minimum :
Property :
To force a script block or function to return collection as a single object to the pipeline, use one of the following two methods:
Unary array expression
Utilizing a unary expression you can send your return value down the pipeline as a single object as illustrated by the following example.
function Test-Return { $array = 1,2,3 return (, $array) } Test-Return | Measure-Object
Count : 1 Average : Sum : Maximum : Minimum : Property :
Write-Output
with NoEnumerate parameter.You can also use the
Write-Output
cmdlet with the NoEnumerate parameter. The example below uses theMeasure-Object
cmdlet to count the objects sent to the pipeline from the sample function by thereturn
keyword.function Test-Return { $array = 1, 2, 3 return Write-Output -NoEnumerate $array } Test-Return | Measure-Object
Count : 1 Average : Sum : Maximum : Minimum : Property :