Reputation: 3923
I've writen a short function to retrive info/status on an installed vpn client - it has 4 switches to specify what information is returned:
Function Get-ConnectInfo() {
[CmdletBinding()]
Param(
[Parameter(ParameterSetName='Binaries')][switch]$BinaryPaths,
[Parameter(ParameterSetName='Status')][switch]$ConnectionStatus,
[Parameter(ParameterSetName='Profiles')][switch]$Profiles,
[Parameter(ParameterSetName='Version')][switch]$Version
)
#
Begin {
# Some code here
}
#
Process {
Switch ($PSBoundParameters.Keys) {
BinaryPaths {
Write-Host "BinaryDetail"
}
Version {
Write-Host "VersionInfo"
}
Profiles {
Write-Host "Profile Info"
}
ConnectionStatus {
Write-Host "Connection Status"
}
}
}
}
Thing is, if you don't pass any parameters, this is the error message:
Get-ConnectInfo : Parameter set cannot be resolved using the specified named parameters.
At line:1 char:1
+ Get-ConnectInfo
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-ConnectInfo], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Get-ConnectInfo
Is there an elegant way to change this error to something more informative like "Parameter not specified"?
Upvotes: 0
Views: 105
Reputation: 175065
You could:
function Get-ConnectInfo() {
[CmdletBinding(DefaultParameterSetName='noOptions')]
Param(
[Parameter(ParameterSetName='Binaries')][switch]$BinaryPaths,
[Parameter(ParameterSetName='Status')][switch]$ConnectionStatus,
[Parameter(ParameterSetName='Profiles')][switch]$Profiles,
[Parameter(ParameterSetName='Version')][switch]$Version
)
#
Begin {
if($PSCmdlet.ParameterSetName -eq 'noOptions'){
throw 'Please pass a switch argument of either "-Version", "-Profiles", "-ConnectionStatus", or "-BinaryPaths"'
return
}
}
#
Process {
Switch ($PSBoundParameters.Keys) {
BinaryPaths {
Write-Host "BinaryDetail"
}
Version {
Write-Host "VersionInfo"
}
Profiles {
Write-Host "Profile Info"
}
ConnectionStatus {
Write-Host "Connection Status"
}
}
}
}
Upvotes: 2