-1

У меня есть сценарий PowerShell, который добавляет IP-адреса в брандмауэр Windows с помощью команды "netsh advfirewall". (Как описано в этом вопросе: Как добавить правила netsh firewall, а не просто заменить).

Проблема заключается в том, что при добавлении большого количества IP-адресов (в настоящее время их более 700) строка IP-адресов кажется «обрезанной» в какой-то момент. Только брандмауэр из общего количества IP-адресов фактически добавляется в брандмауэр, остальные ... нет.

Сценарий очень прост и выглядит примерно так:

$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-адресами).

Есть идеи?

1 ответ1

-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 она должна напечатать в Windows PowerShell что-то вроде 123.123.123.111 Added True или 123.123.123.111 Added False .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .