2

Я пытаюсь выяснить, как написать скрипт, который позволит мне произвольно назначать и удалять дополнительный IP-адрес для системы. Мне больше всего нравится пакетный скриптинг, поэтому я бы предпочел сосредоточиться на решениях для этого, если это возможно.

Я почти уверен, что выяснил, как принять пользовательский ввод и использовать его для настройки нового IP-адреса и шлюза.

Пакетный скрипт ниже написан для интерфейса с именем "LAN".

SET /P NEW-IPADDR="Enter IP:"
SET /P NEW-MASK="Enter Subnet Mask:"
SET /P NEW-GW="Enter Gateway:"
netsh interface ip add address name=LAN addr=%NEW-IPADDR% mask=%NEW-MASK% gateway=%NEW-GW% gwmetric=0
PAUSE

PAUSE вставлена, чтобы дать возможность проверить наличие ошибок в netsh перед автоматическим выходом из окна консоли.

Я уверен, что скрипт может использовать некоторые дополнительные операторы для проверки ошибок (для обхода пустых пользовательских вводов или проверки того, что входные данные соответствуют шаблону IP-адреса). Но сейчас я беспокоюсь о том, как очистить ранее установленные вторичные IP-адреса.

Одним из простых вариантов было бы просто настроить сценарий на очистку всех IP-адресов каждый раз и иметь предварительно записанную строку, которая автоматически устанавливает первичный IP-адрес, прежде чем запрашивать вторичный. Хотя в идеале я бы хотел, чтобы скрипт работал только на вторичных IP-адресах.

Второй вариант - изменить последнюю строку приведенного выше сценария следующим образом:

ECHO "Secondary IP address configured.  Press any key to remove secondary IP."
PAUSE
netsh interface ip delete address name=LAN addr=%NEW-IPADDR% gateway=%NEW-GW%

Однако для этого необходимо верить, что сценарий не будет аварийно завершен во время PAUSE . Не совсем то, на что вы действительно можете положиться.

Другой вариант заключается в том, чтобы скрипт сохранял вторичные IP-адреса, которые он настраивает где-то постоянными, чтобы он мог получать значения позже и работать только с ними. Достаточно просто получить значения в постоянное хранилище (ECHO "%NEW-IPADDR%" > SecondaryIP.txt && ECHO "%NEW-MASK%" >> SecondaryIP.txt && ECHO "%NEW-GW%" >> SecondaryIP.txt) но сейчас у меня две проблемы:

  1. Я не знаю, как извлечь данные из этого текстового файла таким образом, чтобы его можно было использовать в пакетном скрипте. (Я уверен, что это легко можно исправить.)
  2. Это зависит от того, является ли скрипт единственным, что касается вторичного IP. Немного более заслуживающий доверия, чем скрипт, обычно завершающий работу, но все же не совсем на 100%.

Идеальным вариантом будет сценарий, который может распознавать "Первичный IP" в отличие от "Вторичного IP" и работать только с последним. Есть ли способ сделать это?

Мне нужен метод, который совместим со стандартной сборкой Windows XP или более поздней, практически без использования сторонних инструментов. Хотя я предпочел бы сделать это в пакетном режиме, мне также интересно узнать больше о PowerShell, и он установлен в системах, где я буду использовать это. Итак, решения на базе PowerShell также приветствуются.

1 ответ1

1

Я не могу придумать полный ответ, но это может помочь вам в правильном направлении.

Вы можете использовать netsh из PowerShell для вывода текущей конфигурации.

netsh interface ipv4 dump >C:\netsh.txt

Это должно дать вам что-то вроде этого:

# ----------------------------------
# IPv4 Configuration
# ----------------------------------
pushd interface ipv4

reset
set global icmpredirects=enabled
add route prefix=0.0.0.0/0 interface="WAN" nexthop=192.168.1.1 publish=Yes
set subinterface interface= subinterface=ethernet_6 mtu=1492
add address name="WAN" address=192.168.1.200 mask=255.255.255.0
add address name="WAN" address=192.168.1.210 mask=255.255.255.0


popd
# End of IPv4 configuration

Вы можете выполнять операции, аналогичные 'grep' и 'sed' в результирующем текстовом файле, используя приведенную здесь информацию. Это то, что я не могу детализировать, не затрачивая на это больше времени, потому что, как вы можете видеть выше, строки для адресов имеют идентичный формат. Ваш скрипт должен будет преобразовать обе строки адреса в переменные, а вы будете использовать только вторую переменную.

Затем вы можете запустить отредактированный скрипт конфигурации с помощью ..

netsh exec C:\netsh.txt

Обратите внимание, что ipconfig будет показывать как новые, так и старые данные конфигурации до перезагрузки, но я думаю, что они должны отображаться правильно в графическом интерфейсе.

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