无法在参数中处理多个值

时间:2016-05-26 11:51:02

标签: powershell

我正在尝试在Windows防火墙中为规则添加多个IP地址。出于某种原因,我在下面写的脚本只添加了我指定的IP地址之一,似乎覆盖了另一个。

这是剧本:

[CmdletBinding()]
param (

        [switch]$NormalHardening,
        [switch]$AcceptEULA,
        [switch]$AddCustomPort,
        [IPAddress[]]$AdditionalPorts
)

foreach ($Port in $AdditionalPorts)  
{ 
    Write-Host "Additional Ports added were: $Port"
    Get-NetFirewallRule -DisplayName "HTTP" | Set-NetFirewallRule -RemoteAddress "10.0.0.0/8","172.16.0.0/12","192.168.0.0/16",$Port
}

我在命令行输入:

.\test_additonal_ports.ps1 -NormalHardening -AdditionalPorts 32.25.48.97, 11.12.13.14

所以,我想要添加两个IP ......但是,它只添加其中一个。

我得到的结果是:

enter image description here

但是,在Windows防火墙中,它只显示添加了一个IP ...我可以在两者中添加任何想法吗?

enter image description here

1 个答案:

答案 0 :(得分:3)

您的语句在每次迭代时设置HTTP规则,因此您的循环设置地址列表

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
32.25.48.97

在第一次迭代中,然后用

替换它
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
11.12.13.14

在第二次迭代中。

在该规则中构建所需IP地址的完整列表,然后更新规则一次。

$addr = '10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16'
$addr += $AdditionalPorts

Get-NetFirewallRule -DisplayName 'HTTP' | Set-NetFirewallRule -RemoteAddress $addr

顺便说一句,你不应该将参数命名为$AdditionalPortsIP addressesports完全不同,所以不要混淆。参数名称$AdditionalAddresses$AdditionalIPRanges更合适。