How to pass an argument to a powershell script
For named parameters, first line in the script has to be a param
declaration:
param([string]$comment)
or to declare multiple named parameters
param(
[string]$comment,
[int32]$LicenseID
)
Then you can do validation and handle gracefully, for example
if ($comment -eq "") {
write-host "you must give a comment"
exit
}
A simple if brutal way to bail if a required argument was not specified
param ( [string]$comment = $(throw "Please specify a comment" ))
Can also use a type of boolean parameter called a switch
Param([switch]$IsGood)
Then $IsGood will be $false, unless the parameter was specified
".\script1.ps1" # $IsGood = $false
".\script1.ps1 -IsGood" # $IsGood = $true
".\script1.ps1 -isGood:$true" # $IsGood = $true
".\script1.ps1 -isGood:$false" # $IsGood = $false
Don't like named parameters? Fine! Use positional
$name=$args[0]
$height=$args[1]
...like it's 1999.
Validate the parameters
But if you do use real params
you can also enforce simple validation:
For example -- string, length from 1 to 10...
Param(
[ValidateLength(1,10)][string]$mystring
)
Or how about a number that must be within a range...
Param(
[ValidateRange(0,10)][int]$myinteger
)
What about -- a filename that must be an existing file...
Param(
[ValidateScript({Test-Path $_})][string]$smolibrary
)
Source
- http://stackoverflow.com/questions/5592531/how-to-pass-an-argument-to-a-powershell-script
- http://powershell.org/wp/forums/topic/understanding-switch-parameters/
- https://www.mssqltips.com/sqlservertip/4198/validating-powershell-parameters--part-i/
See also
- console: ndesk options -- for doing the same in a C# console app.
- How to do default parameter values in Powershell
- Parameters: general guide