powershell - 如何在 Powershell 中的一行中调用具有多个参数的多个参数?

标签 powershell parameters arguments parameter-passing powershell-2.0

我有一个脚本,我想在其中调用多个参数,这些参数可能需要多个参数,同时格式如下:

.\MyScript.ps1 -q <int> --args <hostval1> <hostval2> ... <hostvaln>

现在,除了“q”之外,我还有其他参数,但它们不需要“--args”参数。我目前无法弄清楚如何实现“--args”,因为我目前的参数定义如下:

param(
    [Alias('c')]
    [string]$csv,
    [Alias('h')]
    [switch]$help,
    [Alias('f')]
    [switch]$fields,
    [Alias('s')]
    [string]$sql,
    [Alias('q')]
    [int]$query
)

我知道我可以像这样运行它来获取主机值,但它需要破折号:

.\MyScript.ps1 -q 1 -hostval1 -hostval3 -hostval4

这使得

$args[0] = -hostval1
$args[1] = -hostval3
$args[2] = -hostval4

有没有办法制作一个只能用“-q”调用的“辅助”参数(例如--args),并接受用空格分隔的多个值?我可以创建另一个参数,但这会导致在没有“-q”参数的情况下意外调用它,并且参数之间还需要逗号:

[string[]]$hostvals

我想要在 powershell 中做的事情可行吗?有人知道我能做什么吗?

最佳答案

您可以尝试使用参数集名称:

[CmdletBinding(DefaultParameterSetName="Q")]

param(    
    [Alias('c')]
    [string]$csv,   
    [Alias('h')]
    [switch]$help,    
    [Alias('f')]
    [switch]$fields,    
    [Alias('s')]
    [string]$sql,   
    [Parameter(ParameterSetName="Q", mandatory=$true)] 
    [Alias('q')]
    [int]$query,
    [Parameter(ParameterSetName="Q")] 
    [object[]]$arg        
)

这样就不能只使用-arg参数调用函数,还需要调用-query

$arg 接受一个数组,您可以输入以逗号分隔的主机值。如果您想要用空格分隔值,您可以声明 [string]$arg 并在引号中传递值,但您需要添加一些逻辑(空格上的 split 等) ...) 使输入在脚本中有用。

要向脚本添加自定义帮助,请阅读此处 http://blogs.technet.com/b/heyscriptingguy/archive/2010/01/07/hey-scripting-guy-january-7-2010.aspx

关于powershell - 如何在 Powershell 中的一行中调用具有多个参数的多个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14464033/

相关文章:

python - 计算Python中参数的实际数量

java - 非法参数异常 : n must be positive

ruby-on-rails-3 - 为什么这个 'validate' 方法会引发 ArgumentError?

powershell - 如何使用Powershell配置新的DCOM RunAs用户

python - 当 $env :path? 中定义了多个时,windows 如何决定使用哪个 python 可执行文件

powershell - Powershell中的Azure DevOps Rest API说没有参数匹配

arrays - 如何在powershell中用特定字符替换项目的字符?

c - 使用 C 数组,传递给 execv()

java - Spring:如何实例化一个带有运行时参数的 Spring bean?

php - 将未定义数量的参数转发给另一个函数