我正在尝试编写一个脚本,它将遍历本地防火墙规则并更新远程地址表。
这是我到目前为止所做的,它不起作用。应该很简单,所以不确定最新情况。该脚本运行时没有错误,但实际上并没有更新任何内容。
$name = Get-NetFirewallRule -DisplayName "*Desktop*" |ft -HideTableHeaders Displayname
$ips = "192.168.1.150, 192.168.1.151"
foreach ($r in $name)
{
Set-NetFirewallRule -DisplayName $r -RemoteAddress $ips
}
$ name变量传递我想要按名称更改的规则,$ ips变量传递我想要的IP地址。
这个脚本看起来不错吗?
更新
在@Kev的帮助下,由于某些原因,其评论/答案消失了,这是工作脚本....
$name = Get-NetFirewallRule -DisplayName "*Backup*"
#$ips = @("192.168.1.150", "192.168.1.151")
foreach ($r in $name)
{
Set-NetFirewallRule -DisplayName $r.DisplayName -RemoteAddress $ips
}
我唯一的另一个问题是,为什么是$ r.DisplayName?
答案 0 :(得分:8)
-RemoteAddress
参数采用字符串数组,因此您应该更改:
$ips = "192.168.1.150, 192.168.1.151"
为:
$ips = @("192.168.1.150", "192.168.1.151")
<强>更新强>
根据您的评论,您无需将Get-NetFirewallRule
的结果导入ft
或Format-Table
。这样做:
$name = Get-NetFirewallrule -DisplayName "*Desktop*"
$ips = @("1.1.1.1", "2.2.2.2")
foreach($r in $name)
{
Set-NetFirewallRule -DisplayName $r.DisplayName -RemoteAddress $ips
}
您正在做的是直接迭代防火墙对象数组,效率稍高。
将IP地址添加到规则中的现有IP范围:
如果您已经有一个已分配了一个或多个IP的规则,您可以执行以下操作附加其他IP:
$ips = (Get-NetFirewallRule -DisplayName "MyRule" | Get-NetFirewallAddressFilter ).RemoteAddress
$ips += "192.168.1.123"
Set-NetFirewallRule -DisplayName "MyRule" -RemoteAddress $ips
答案 1 :(得分:0)
结合上面的答案,这就是我最终使用的方法-此规则将IP的阵列添加到规则中的现有IP:
$ips = (Get-NetFirewallRule -DisplayName "MyRule" | Get-NetFirewallAddressFilter ).RemoteAddress
$newips = @("1.1.1.1","2.2.2.2")
$add = $ips + $newips
Set-NetFirewallRule -DisplayName "My Rule" -RemoteAddress $add