$ 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
最も簡単な方法は、おそらく2つのパラメーターを使用することです。1つはホスト用(アレイにすることができます)、もう1つはvlan用です。
param([String[]] $Hosts, [String] $VLAN)
の代わりに
foreach ($i in $args)
使用できます
foreach ($hostName in $Hosts)
ホストが1つしかない場合、foreachループは1回だけ反復します。複数のホストをスクリプトに渡すには、配列として渡します。
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
値の間のコンマに注意してください。これはそれらを配列に収集します
その方法の1つは次のようになります。
param(
[Parameter(Position=0)][String]$Vlan,
[Parameter(ValueFromRemainingArguments=$true)][String[]]$Hosts
) ...
これにより、複数のホストをスペースで入力できます。