有什么理由不在powershell param()块中抛出ArgumentException?

Jus*_*ing 6 powershell

当我发现这篇博文建议我做以下事情时,我一直在寻找一种在powershell中创建所需参数的方法:

param(
    [string] $ObjectName = $(Throw "Parameter -ObjectName must be set to the name of a database object")
);
Run Code Online (Sandbox Code Playgroud)

在消化了一段时间之后,我得出的结论是抛出ArgumentException而不是字符串可能会更好:

param(
    [string] $ObjectName = $(Throw New-Object System.ArgumentException "Parameter -ObjectName must be set to the name of a database object","ObjectNamt")
);
Run Code Online (Sandbox Code Playgroud)

现在从C#的角度来看,后者会更好.这种做法是否有任何原因无法在powershell中翻译?

Sha*_*evy 10

在PowerShell 2.0中,您可以将参数标记为Manadatory,并让PowerShell为您完成工作:

Param(
    [Parameter(Mandatory=$true,
        Position=0,
        HelpMessage='ObjectName must be set to the name of a database object')]
    [string]
    $ObjectName
)
Run Code Online (Sandbox Code Playgroud)

  • 请查看此帮助主题:about_Functions_Advanced_Parameters. (3认同)
  • 我会添加一个[ValidateNotNullOrEmpty()].如果您新增了所有可能的选项,也可以添加[ValidateSet()]. (3认同)