我编写了一个脚本来从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>]
也欢迎提出任何其他建议以更好的方式。
答案 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
希望这会有所帮助。