我写了一个脚本来检索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>]
如果有其他更好的方法,欢迎提出建议。
从这个链接。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
希望能帮到你