powershell - PS exclusive parameter set switches - better error message for missing parameter?
问题描述
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"?
解决方案
你可以:
- 设置默认参数集
- 如果在函数内部设置了自定义错误并返回:
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"
}
}
}
}
推荐阅读
- python - 创建一个字谜函数
- php - 通过 PHP 使用 Gmail IMAP 读取电子邮件
- python - 使用 KMeans 对大量文本文件进行聚类
- python - ReLU 阈值中 numpy.ceil 和 numpy.clip 的缓慢性:瓶颈在哪里?
- arrays - 在 swift 中使用 for in 循环监视位置
- sql - 以下数据结构所需的数据透视
- apache-spark - 重复的列且不属于数据框的连接条件的列 - 如何在 PySpark 中删除?
- reactjs - 直接将 React 呈现为 HTML 的静态站点生成器(输出中没有 React)?
- javascript - 如何使用 selenium python 从动态网站中检索所有链接
- python - Python:如何分离函数读取文件并显示用户输入