将多个值传递给单个PowerShell脚本参数
我有一个脚本,用$args向其传递服务器名称 这样,我就可以使用将多个值传递给单个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 如果您传递
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
是可选的。