PowerShell:当未指定参数时,如何显示帮助消息(语法)而不是错误

时间:2020-06-03 13:17:32

标签: powershell syntax parameters

我编写了一个脚本来从VMware vCenter检索VM指标。
用户需要提供2个参数/参数。
一个是vCenter服务器,另一个是以下之一:
单个VM名称包含VM列表的文件。

所有这些都可以正常工作,但是如果有人尝试在PS控制台上运行此脚本而不提供任何参数,它将引发异常。 (如下所示)
问题:
1)异常指向我不知道的问题吗?
2)我希望向用户显示语法而不是异常。有可能吗?

[CmdletBinding()]
Param (
    [Parameter( Mandatory = $true, ParameterSetName ='List' )]
    [Parameter( Mandatory = $true, ParameterSetName ='OneVM' )]
    [string]$vCenterServer,

    [Parameter( Mandatory = $true, ParameterSetName ='List' )]
    [ValidateNotNullOrEmpty()]
    [ValidateScript( { Test-Path -LiteralPath $_ -Type Leaf })]
    [string]$vmListFile,

    [Parameter( Mandatory = $true, ParameterSetName ='OneVM' )]
    [string]$MyVM
)

当我在不提供参数/参数的情况下运行它时,这就是我所看到的。

PS> c:\Temp\vCenter_RT_PerfData.ps1
C:\Temp\vCenter_RT_PerfData.ps1 : Parameter set cannot be resolved using the specified named parameters.
    + CategoryInfo          : InvalidArgument: (:) [vCenter_RT_PerfData.ps1], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : AmbiguousParameterSet,vCenter_RT_PerfData.ps1

这就是我希望他们看到的东西。

SYNTAX
    C:\Temp\vCenter_RT_PerfData.ps1 -vCenterServer <String> -MyVM <String> [<CommonParameters>]

    C:\Temp\vCenter_RT_PerfData.ps1 -vCenterServer <String> -vmListFile <String> [<CommonParameters>]

也欢迎提出任何其他建议以更好的方式。

1 个答案:

答案 0 :(得分:0)

通过此链接:PS Microsoft我们可以看到:

<#
    .SYNOPSIS
      Displays a list of WMI Classes based upon a search criteria
    .EXAMPLE
     Get-WmiClasses -class disk -ns rootcimv2″
     This command finds wmi classes that contain the word disk. The
     classes returned are from the rootcimv2 namespace.
#>
  If($local:paramMissing)
    {
      throw “USAGE: getwmi2 -class <class type> -ns <wmi namespace>”
    } #$local:paramMissing

希望这会有所帮助。

相关问题