PowerShell : 如何在没有指定参数的情况下显示帮助信息(语法),而不是错误。

问题描述 投票:0回答:1

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

所有这些工作都很好,但如果有人试图在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
)

当我在没有提供argumentsparameters的情况下运行这个程序时,我看到的是这样的结果。

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>]

如果有其他更好的方法,欢迎提出建议。

powershell syntax parameters
1个回答
0
投票

从这个链接。PS微软 我们可以看到。

<#
    .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

希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.