我正在尝试在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 ......但是,它只添加其中一个。
我得到的结果是:
但是,在Windows防火墙中,它只显示添加了一个IP ...我可以在两者中添加任何想法吗?
答案 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
顺便说一句,你不应该将参数命名为$AdditionalPorts
。 IP addresses和ports完全不同,所以不要混淆。参数名称$AdditionalAddresses
或$AdditionalIPRanges
更合适。