我正在尝试弄清楚如何编写一个脚本,以便我可以任意分配和删除系统的辅助 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
),但现在我有两个问题:
- 我不知道如何从该文本文件中获取数据,以便批处理脚本使用。(我相信这个问题很容易解决。)
- 这依赖于脚本是唯一接触辅助 IP 的东西。比脚本正常退出更可靠,但仍然不是 100%。
理想的选择是编写一个可以识别“主 IP”而不是“辅助 IP”的脚本,并且仅有的致力于后者。有办法做到这一点吗?
我需要一种与标准 Windows XP 版本或更高版本兼容的方法,几乎不使用第三方工具。虽然我更愿意批量执行此操作,但我也有兴趣了解有关 PowerShell 的更多信息,并且它安装在我将使用它的系统上。因此,基于 PowerShell 的解决方案也受到欢迎。
答案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'
使用此处的信息。这是我无法详细说明的部分,除非花更多时间,因为如上所示,地址行具有相同的格式。您的脚本必须将两个地址行 grep 到变量中,并且您只需 sed 第二个变量。
然后,您可以使用...运行编辑后的配置脚本。
netsh exec C:\netsh.txt
请注意,ipconfig
在您重新启动之前,它将同时显示新旧配置数据,但我认为它应该在 GUI 中正确显示。