如何在Powershell中的一行上调用多个参数的多个参数?

时间:2013-01-22 17:04:47

标签: powershell parameters arguments parameter-passing powershell-v2.0

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

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

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

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

我知道我可以像这样运行它来获取hostvalues,但它需要一个破折号:

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

这使得

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

有没有办法制作一个&#34;中学&#34;参数(例如--args)只能使用&#34; -q&#34;来调用,并接受以空格分隔的多个值?我可以创建另一个参数,但这将允许在没有&#34; -q&#34;的情况下意外调用它。参数,并且还需要参数之间的逗号:

[string[]]$hostvals

我想在PowerShell中做些什么?有没有人对我能做什么有任何想法?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用parametersetname:

[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,所以o on ...)以使输入在内部有用脚本。

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