Передача нескольких значений в один параметр сценария PowerShell
у меня есть скрипт, которому я передаю имя(ы) сервера в $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
4 ответа:
самый простой способ, вероятно, использовать два параметра: один для хостов (может быть массив) и один для 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
обратите внимание на запятую между значениями. Это собирает их в массив