Mam skrypt, do którego przekazuję nazwę (y) serwera w $ args.
W ten sposób mogę robić rzeczy na tym (tych) serwerze (ach) używając foreach
:
.\script.ps1 host1 host2 host3
foreach ($i in $args)
{
Do-Stuff $i
}
Chciałbym dodać nazwany opcjonalny parametr o nazwie vlan. Próbowałem:
Param(
[string]$vlan
)
foreach ($i in $args)
{
Write-Host $i
}
Write-Host $vlan
Działa, jeśli przekażesz -vlan
parametr, ale jeśli tego nie zrobisz, skrypt automatycznie przypisze ostatnią nazwę serwera $vlan
.
Jak więc można przekazać jeden lub wiele parametrów oraz opcjonalny nazwany parametr do skryptu programu PowerShell?
Idealnie, oto ważne przykłady:
.\script.ps1 host1
.\script.ps1 host1 host2 host3
.\script.ps1 host1 host2 -vlan office
źródło
Parametry przyjmują dane wejściowe przed argumentami. Zamiast tego powinieneś dodać parametr, który akceptuje tablicę i ustawić go jako parametr pierwszej pozycji. dawny:
param( [Parameter(Position = 0)] [string[]]$Hosts, [string]$VLAN ) foreach ($i in $Hosts) { Do-Stuff $i }
Następnie nazwij to tak:
Zwróć uwagę na przecinek między wartościami. To zbiera je w tablicy
źródło
Można to zrobić następująco:
param( [Parameter(Position=0)][String]$Vlan, [Parameter(ValueFromRemainingArguments=$true)][String[]]$Hosts ) ...
Umożliwiłoby to wprowadzenie wielu hostów ze spacjami.
źródło
Wywołuję zaplanowany skrypt, który musi połączyć się z listą serwerów w ten sposób:
Powershell.exe -File "YourScriptPath" "Par1,Par2,Par3"
Następnie wewnątrz skryptu:
param($list_of_servers) ... Connect-Viserver $list_of_servers.split(",")
Operator split zwraca tablicę ciągów
źródło