Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多个值传递给单个PowerShell脚本参数_Powershell_Parameters - Fatal编程技术网

将多个值传递给单个PowerShell脚本参数

将多个值传递给单个PowerShell脚本参数,powershell,parameters,Powershell,Parameters,我有一个脚本,用$args向其传递服务器名称 这样,我就可以使用foreach对这个(这些)服务器进行操作: .\script.ps1 host1 host2 host3 foreach ($i in $args) { Do-Stuff $i } 我想添加一个名为vlan的命名可选参数。我试过: Param( [string]$vlan ) foreach ($i in $args) { Write-Host $i } Write-Host $vlan 如果您传递

我有一个脚本,用$args向其传递服务器名称

这样,我就可以使用
foreach
对这个(这些)服务器进行操作:

.\script.ps1 host1 host2 host3

foreach ($i in $args)
{
    Do-Stuff $i
}
我想添加一个名为vlan的命名可选参数。我试过:

Param(
    [string]$vlan
)

foreach ($i in $args)
{
    Write-Host $i
}
Write-Host $vlan
如果您传递一个
-vlan
参数,它就会工作,但如果您不传递,脚本会自动将最后一个服务器名称分配给
$vlan

那么,如何将单个或多个参数加上可选的命名参数传递给PowerShell脚本呢

理想情况下,以下是有效的示例:

.\script.ps1 host1
.\script.ps1 host1 host2 host3
.\script.ps1 host1 host2 -vlan office

最简单的方法可能是使用两个参数:一个用于主机(可以是阵列),另一个用于vlan

param([String[]] $Hosts, [String] $VLAN)
而不是

foreach ($i in $args)
你可以用

foreach ($hostName in $Hosts)
如果只有一个主机,foreach循环将只迭代一次。要将多个主机传递给脚本,请将其作为数组传递:

myScript.ps1 -Hosts host1,host2,host3 -VLAN 2

…或类似的东西。

参数在参数之前接受输入。您应该做的是添加一个接受数组的参数,并将其作为第一个位置参数。例:

param(
    [Parameter(Position = 0)]
    [string[]]$Hosts,
    [string]$VLAN
    )

foreach ($i in $Hosts)  
{ 
    Do-Stuff $i
}
那么就这样称呼它:

.\script.ps1 host1, host2, host3 -VLAN 2

请注意值之间的逗号。这会将它们收集到一个数组中

我调用一个计划脚本,该脚本必须通过以下方式连接到服务器列表:

Powershell.exe -File "YourScriptPath" "Par1,Par2,Par3"
然后在脚本中:

param($list_of_servers)
...
Connect-Viserver $list_of_servers.split(",")

split运算符返回字符串数组。一种方法如下:

 param(
       [Parameter(Position=0)][String]$Vlan,
       [Parameter(ValueFromRemainingArguments=$true)][String[]]$Hosts
    ) ...

这将允许使用空格输入多台主机。

感谢您提供有关如何调用脚本的信息-我经常会在powershell中遗漏类似的小片段。真是太好了!除了您的示例缺少一个“]”来关闭第二个参数属性。这应该是最好的答案。这就是方法。我不明白这如何允许
vlan
是可选的。