好的,我尝试查找并了解如何做到这一点,但是未能弄清楚。以下是我的想法。
# Run script normally
.\myscript.ps1 "blah" "yo"
这些应该做同样的事情
Get-Help .\myscript.ps1
.\myscript.ps1
我希望能够使用Get-Help语法,但不想在某个参数开关语句中重复它。如果这个问题已经在其他地方得到解答,请指引我去那里。
好的,我尝试查找并了解如何做到这一点,但是未能弄清楚。以下是我的想法。
# Run script normally
.\myscript.ps1 "blah" "yo"
这些应该做同样的事情
Get-Help .\myscript.ps1
.\myscript.ps1
我希望能够使用Get-Help语法,但不想在某个参数开关语句中重复它。如果这个问题已经在其他地方得到解答,请指引我去那里。
if($args.Count -eq 0) {
Get-Help $MyInvocation.MyCommand.Definition
return
}
$PSBoundParameters.Values.Count可以给您在脚本中使用param()传递的参数计数。然后,您可以使用$args查找输入的任何其他内容,这些内容位于这些参数之外。因此,如果您在使用param时进行双重测试,则可以获得帮助响应。
示例parametertest.ps1
param([string]$val1,$val2,[switch]$val3)
if ( $PSBoundParameters.Values.Count -eq 0 -and $args.count -eq 0 ) {
Get-Help $MyInvocation.MyCommand.Definition
return
}
if ( $PSBoundParameters.Values.Count -eq 0 ){
Write-Output ("No parameters passed")
return
}
else { write-output("val1=$val1 val2=$val2 val3=$val3") }
if ( $args -and $args.count -gt 0 ) {
Write-Output ("Found Args $args") }
if ( $PSBoundParameters.Values.Count -eq 0 -and $args -and $args.count -eq 0
示例输出
powershell -File parametertest.ps1
parametertest.ps1 [[-val1] < string>] [[-val2] < Object>] [-val3]
powershell -File parametertest.ps1 sometest 123
val1=sometest val2=123 val3=False
powershell -File parametertest.ps1 -val1 stuff -val2 123 -val3
val1=stuff val2=123 val3=True
powershell -File parametertest.ps1 -unknown parameter
未传递参数
找到Args -unknown参数
Get-ChildItem
一样,什么都不需要显示。 - Matt