Function parameters in PowerShell
Solution 1
In V1, it really is just a preference. Using the param
statement has traditionally been more formal, but functionally it's the same thing.
You will probably see a lot more use of PARAM in PowerShell V2 because of the ability to add attributes to parameters, similar to attributes in C#.
param
(
[Parameter( Mandatory=$true,
Position=0,
ValueFromPipeline = $true,
ValueFromPipelineByPropertyName = $true)]
[Alias("name")]
[String]
$path
)
Here you can specify the parameter attribute and a bunch of arguments to that attribute. You can also specify aliases and a number of other validation requiremets.
Keith makes a couple of great points as well. You can use the param statement to pass parameters to annonymous scriptblocks (lambda expressions) or to a PS1 script.
Solution 2
param() is required to specify the parameters for a script file and for scriptblocks:
PS> $sb = {param($x,$y) $x + $y}
PS> &$sb 1 3
4
Having it also be available for traditional functions is just a consistency thing IMO. It is nicer for advanced functions which tend to have a lot of baggage, er metadata, per parameter.
Solution 3
Possibly as a consistency measure? Always specifying parameters the same way improves readability.
Mike Shepard
Solutions Architect for Jack Henry & Associates (after being a DBA for 10 years).
Updated on June 17, 2022Comments
-
Mike Shepard almost 2 years
Is there any reason to use the "Param( ... )" construction inside a function definition?
My understanding is that you should use this for specifying parameters to scripts (and scriptblocks). I see a lot of examples on the web with parameters listed this way instead of just listing the parameters after the function name.
Example:
function Foo([string]$Bar){ #Body of function }
Or,
function Foo{ Param([string]$Bar) }