对于我的脚本,我有一些类似的参数:
[Alias("f")]
[string]$file
当用户在命令行输入时:“./ script.ps1 -f”
出现错误>“缺少参数的参数......” 我想自己处理这个错误,默认错误是技术性的,而且很麻烦。
我想让用户友好和可读,无论如何? 我读过的每一条建议都说它是强制性的。
但它不是强制性命令,我想要完成的是如果有人提供参数标记(AKA“-file”),但无法为其提供值。
答案 0 :(得分:2)
您可以使用[AllowNull()]
paremeter属性,然后检查并处理您的自我。
Advanced Fuction parameter validation
[Cmdletbinding()]
Param
(
[Alias("f")]
[AllowNull()]
[string]$file
)
Begin
{
If($PSBoundParameters.ContainsKey('file') -and -not $file)
{
Write-error 'ouch my user friendly error'
}
}
Process{}
End{}
注意:不需要begin,process,end blocks,但这是一个很好的标准。详细了解他们here和here。
缺点是仍需要传递$null
或''
参数值。
如果你开始研究这个问题,那么有很多关于人们尝试类似目标的帖子。
1 - passing-null-to-a-mandatory-parameter-to-a-function
答案 1 :(得分:0)
您想要的是使用 [Switch]
参数。开关参数是没有参数值的参数。它们只有在使用时才有效,而且只有一种效果。
您可以使用 get-help
验证您的脚本需求。在您的情况下,它会显示如下内容:
get-help .\script.ps1
script.ps1 [[-file] <Object>]
但是如果你像这样定义参数:
Param
(
[Alias("f")]
[Switch]$file
)
get-help
现在将显示不需要任何对象:
get-help .\script.ps1
script.ps1 [-file]
一个完整的例子看起来像这样:
Param
(
[Alias("f")]
[Switch]$file
)
If($file) {
Write-Host '-f Switch enabled'
}
Else {
Write-Host 'Missing -f Switch'
}
您现在可以像 .\script.ps1 -file
或 .\script.ps1 -f
一样调用您的脚本,并且控制台中的输出将是“-f Switch enabled”