繁体   English   中英

如何在PowerShell中强制执行命令行参数检查

[英]How do I enforce command line argument checking in PowerShell

这是我的脚本(test.ps1):

[CmdLetBinding()]

Param
(
    [parameter(Mandatory=$true)][string]$environment,
    [switch][bool]$continue=$true
)

Write-Host $environment
Write-Host $continue

题:
如果我通过提供一个参数来调用此脚本,该参数是我在脚本中指定的参数的子字符串,如下所示:PS>。\\ test.ps1 -envi:blah,PowerShell似乎不会检查参数名称。 我希望PowerShell强制执行参数拼写,即它只应接受与脚本中的参数名称匹配的-environment。 除此之外,它应该引发一个例外。 那可行吗? 我怎么做?
谢谢。

它不是很漂亮,但是它将阻止您使用-environment作为参数名称。

Param
(
    [parameter(Mandatory=$true)][string]$environment,
    [parameter()]
     [ValidateScript({throw "Invalid parameter. 'environment' required."})]
     [string]$environmen,
    [switch][bool]$continue=$true
)


Write-Host $environment
Write-Host $continue
}

编辑:正如Matt在评论中指出的那样,自动消除歧义将迫使您指定足够的参数名称以查找唯一的子字符串匹配项。 我在这里所做的基本上是为它提供一个参数,该参数可以满足除最后一个字符以外的所有条件,以防止使用任何子字符串直到最后一个字符(因为其模棱两可),并抛出错误以阻止您使用它。

而且,FWIW,这很可能是我做过的最丑陋的参数验证,但是我现在没有更好的主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM