使用 CLI 向 Windows 防火墙添加许多 IP 地址部分失败

使用 CLI 向 Windows 防火墙添加许多 IP 地址部分失败

我有一个 PowerShell 脚本,它使用“netsh advfirewall”命令将 IP 地址添加到 Windows 防火墙。 (如本问题所述:如何附加 netsh 防火墙规则,而不仅仅是替换)。

问题是,当添加大量 IP 地址(目前超过 700 个)时,IP 地址串似乎在某个点被“切断”。实际上,只有总 IP 地址数量的 X 量被添加到防火墙,其余的……没有。

该脚本非常简单,如下所示:

$ip = "123.123.123.123,124.124.124.124,125.125.125.125 and so on"

netsh advfirewall firewall set rule name="*" new remoteip="$ip"

我尝试回显该字符串以查看它是否被截断;

echo $ip

但完整的字符串被正确回显。

netsh 命令是否存在某种字符串长度限制?或者其他可能导致此问题的原因?


编辑

我做了一些研究,发现字符串并没有被“截断”。我按升序重新排列了 IP 字符串,并将字符串的最后一个 IP 地址添加到了防火墙中。所以我想我可以得出结论,不存在某种字符串限制。

但是,随机 IP 被忽略了。我编写了几个“调试”脚本来弄清楚发生了什么,其中一个脚本生成了一个 IP 地址列表,这些 IP 地址在 IP 字符串中(因此应该在防火墙中),但防火墙中不存在。事实证明,它只是忽略了随机 IP 地址……我不知道为什么……

但是,被省略的 IP 地址是完全正常的 IP 地址(不是范围或任何其他内容,只是普通的 IP 地址)。

有任何想法吗?

答案1

作为执行的替代方法(由于已在 PowerShell 中):

这将为您提供每个 IP 的更多信息:这尚未经过测试,但应该为您提供更好的输出/格式,并且在最坏的情况下可以获得良好的开端并理论上可行。

$IPs = @("123.123.123.111", "123.123.123.112", "123.123.123.113") |`
   Foreach-object {
   netsh advfirewall firewall set rule name="*" new remoteip="$_"
   write-host "$_ Added $?"
}

如果它按预期工作,它将循环遍历 $IPs 的初始数组并尝试执行 netsh 命令。$?是上次运行的命令的状态,因此在成功的 netsh 命令上,它应该在 PowerShell Windows 上打印类似123.123.123.111 Added True或 的内容123.123.123.111 Added False

相关内容