我想编写一个powershell ps1脚本,它需要2个参数集( - a -d),每个脚本最多可以有n个属性。如何实现?
example : DoTheTask -a <task name 1> <task name 2> ... -d <machine name 1> <machine name 2>...
答案 0 :(得分:6)
你可以这样做:
param(
[string[]]$a,
[string[]]$d
)
write-host $a
write-host ----
write-host $d
然后你可以拨打DoTheTask -a task1,task2 -d machine1,machine2
答案 1 :(得分:0)
您是否可以组织您的任务名称和计算机名称,以便将它们放入带分隔符的单个字符串中。
换句话说,你的-a参数是一个字符串,逗号分隔的任务名称和你的-d参数是一串逗号分隔的机器名吗?如果是这样,那么您需要做的就是在脚本开头将字符串解析为其组件。
答案 2 :(得分:0)
如果要将这些参数传递给脚本本身,则可以利用$args
内部变量,尽管键/值映射会有点棘手,因为PowerShell会将每个语句解释为参数。我建议(和其他人一样)你使用另一个分隔符,这样你就可以更容易地进行映射。
尽管如此,如果您想继续这样做,您可以使用如下所示的功能:
Function Parse-Arguments {
$_args = $script:args # set this to something other than $script:args if you want to use this inside of the script.
$_ret = @{}
foreach ($_arg in $_args) {
if ($_arg.substring(0,1) -eq '-') {
$_key = $_arg; [void]$foreach.moveNext() # set the key (i.e. -a, -b) and moves to the next element in $args, or the tasks to do for that switch
while ($_arg.substring(0,1) -ne '-') { # goes through each task until it hits another switch
$_val = $_arg
switch($_key) {
'-a' {
write-host "doing stuff for $_key"
$ret.add($_key,$_val) # puts the arg entered and tasks to do for that arg.
}
# put more conditionals here
}
}
}
}
}