114

$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

では、1 つまたは複数のパラメーターとオプションの名前付きパラメーターを PowerShell スクリプトに渡すにはどうすればよいでしょうか。

理想的には、有効な例を次に示します。

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

5 に答える 5

204

最も簡単な方法は、おそらく 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

...または似たようなもの。

于 2013-02-27T19:30:23.493 に答える
26

パラメーターは、引数の前に入力を受け取ります。代わりにすべきことは、配列を受け入れるパラメーターを追加し、それを最初の位置パラメーターにすることです。元:

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

foreach ($i in $Hosts)  
{ 
    Do-Stuff $i
}

次に、次のように呼び出します。

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

値の間のコンマに注意してください。これはそれらを配列に集めます

于 2013-02-27T19:31:09.423 に答える
-7

この方法でサーバーのリストに接続する必要があるスケジュールされたスクリプトを呼び出します。

Powershell.exe -File "YourScriptPath" "Par1,Par2,Par3"

次に、スクリプト内で次のようにします。

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

分割演算子は文字列の配列を返します

于 2016-02-12T14:58:11.953 に答える