Powershell脚本为防火墙规则添加多个远程地址

Nov*_*009 6 powershell

我正在尝试编写一个脚本,它将遍历本地防火墙规则并更新远程地址表.

这是我到目前为止所做的,它不起作用.应该很简单,所以不确定最新情况.该脚本运行时没有错误,但实际上并没有更新任何内容.

$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 
}
Run Code Online (Sandbox Code Playgroud)

$ 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 
}
Run Code Online (Sandbox Code Playgroud)

我唯一的另一个问题是,为什么它是$ r.DisplayName?

Kev*_*Kev 8

-RemoteAddress参数采用字符串数组,因此您应该更改:

$ips = "192.168.1.150, 192.168.1.151"
Run Code Online (Sandbox Code Playgroud)

至:

$ips = @("192.168.1.150", "192.168.1.151")
Run Code Online (Sandbox Code Playgroud)

更新:

根据您的评论,您不需要将结果Get-NetFirewallRule输入ftFormat-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
}
Run Code Online (Sandbox Code Playgroud)

你正在做的是直接迭代防火墙对象数组,效率稍高.

将IP地址添加到规则中的现有IP范围:

如果您已经有一个已分配了一个或多个IP的规则,则可以通过执行以下操作附加其他IP:

$ips = (Get-NetFirewallRule -DisplayName "MyRule" | Get-NetFirewallAddressFilter ).RemoteAddress
$ips += "192.168.1.123"
Set-NetFirewallRule -DisplayName "MyRule" -RemoteAddress $ips
Run Code Online (Sandbox Code Playgroud)

  • `$ips = @((Get-NetFirewallRule -DisplayName "MyRule" | Get-NetFirewallAddressFilter ).RemoteAddress)` 使其工作,即使现有的 IP 列表包含 1 个条目。否则 $ips 是一个字符串,+= 进行字符串连接。 (2认同)