用于分配和删除接口的任意辅助 IP 的脚本

用于分配和删除接口的任意辅助 IP 的脚本

我正在尝试弄清楚如何编写一个脚本,以便我可以任意分配和删除系统的辅助 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。但理想情况下,我希望脚本只在辅助 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

我无法给出完整的答案,但这可能会帮助你找到正确的方向。

您可以使用netshPowerShell 来转储当前配置。

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'使用此处的信息。这是我无法详细说明的部分,除非花更多时间,因为如上所示,地址行具有相同的格式。您的脚本必须将两个地址行 grep 到变量中,并且您只需 sed 第二个变量。

然后,您可以使用...运行编辑后的配置脚本。

netsh exec C:\netsh.txt

请注意,ipconfig在您重新启动之前,它将同时显示新旧配置数据,但我认为它应该在 GUI 中正确显示。

相关内容