如何在PowerShell中未提供参数时显示Get-Help

7

好的,我尝试查找并了解如何做到这一点,但是未能弄清楚。以下是我的想法。

# Run script normally
.\myscript.ps1 "blah" "yo" 

这些应该做同样的事情

Get-Help .\myscript.ps1
.\myscript.ps1

我希望能够使用Get-Help语法,但不想在某个参数开关语句中重复它。如果这个问题已经在其他地方得到解答,请指引我去那里。


1
我不确定这是一个好主意——它违反了其他每个PowerShell命令的工作方式,可能会让用户感到烦恼。 - user2226112
1
高级函数具有基于参数的帮助。如果用户做错了什么,PowerShell 将请求缺少什么。无需显示所有帮助。就像输入 Get-ChildItem 一样,什么都不需要显示。 - Matt
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - caffein
2个回答

6
你可以将以下代码添加到你的脚本顶部:

if($args.Count -eq 0) {
    Get-Help $MyInvocation.MyCommand.Definition
    return
}

3
只有在没有必需的参数时,此方法才能正常工作。 - Michael Brown

2

$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参数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接