通过 PowerShell 启用 DHCP 会导致 2 个 WiFi 连接到同一网络

通过 PowerShell 启用 DHCP 会导致 2 个 WiFi 连接到同一网络

我的网络上有一个 VM,我有时会使用它作为网关,而大多数时候我只是将 PC 配置为使用 DHCP,然后让所有内容都通过路由器。我一直在手动切换连接属性表单,但我决定尝试制作 PowerShell 脚本来简化该过程。

我还在通过虚拟机路由时禁用 IPv6,但在使用 DHCP 时重新启用它。要切换到使用虚拟机作为网关,我使用以下命令:

# Get the adapter to change
$wmi = Get-WmiObject win32_networkadapterconfiguration -filter "ipenabled ='true'";

# Get current IPv4 address of host
$ip = $wmi.IpAddress[0];

# Configure adapter to use 192.168.1.135 as the default gateway
$wmi.EnableStatic($ip, "255.255.255.0");
$wmi.SetGateways("192.168.1.135", 1);
$wmi.SetDNSServerSearchOrder("192.168.1.135");

# Disable IPv6
Get-NetAdapterBinding | Where-Object {$_.ComponentID.Equals("ms_tcpip6")} | ForEach-Object {
    Disable-NetAdapterBinding -InterfaceAlias $_.Name -ComponentID ms_tcpip6
}

这与我手动配置时完全一样。我的正常网络连接在网络和共享中心中更改为“NetworkName 2”。要切换回 DHCP,我运行此脚本:

# Get the adapter to change
$wmi = Get-WmiObject win32_networkadapterconfiguration -filter "ipenabled ='true'";

# Configure adapter to use DHCP and automatic DNS
$wmi.EnableDHCP();
$wmi.SetDNSServerSearchOrder();

# Enable IPv6
Get-NetAdapterBinding | Where-Object {$_.ComponentID.Equals("ms_tcpip6")} | ForEach-Object {
    Enable-NetAdapterBinding -InterfaceAlias $_.Name -ComponentID ms_tcpip6
}

之后,我通过 WiFi 连接到我的网络,一个称为“网络名称”的专用网络和一个名为“网络名称 3”的公共网络。两者都启用了 IPv6 和 DHCP。

我的 DHCP 脚本有什么问题导致此问题?当我通过对话框切换回 DHCP 时,这种情况没有发生。

更新:切换回 DHCP 后运行 ipconfig 时我注意到了这一点:

Wireless LAN adapter Wi-Fi:

   Connection-specific DNS Suffix  . : 
   IPv6 Address. . . . . . . . . . . : 2001:48f8:1042:732:889c:d2c1:37c9:804e
   Temporary IPv6 Address. . . . . . : 2001:48f8:1042:732:a085:fec9:46b9:3d8
   Link-local IPv6 Address . . . . . : fe80::889c:d2c1:37c9:804e%4
   IPv4 Address. . . . . . . . . . . : 192.168.1.141
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : fe80::4af8:b3ff:fe80:6530%4
                                       192.168.1.135
                                       192.168.1.1

它仍使用 192.168.1.135 作为网关,以及我的普通路由器 - 192.168.1.1。

答案1

已评论这里. 在将要更改的适配器存储在 $wmi 中后,您无法使用此命令删除网关

Remove-NetRoute -InterfaceIndex $wmi.InterfaceIndex -NextHop 192.168.1.135

或者,您可以使用 netsh,如同一篇文章所示:

Invoke-Expression ("netsh interface ipv4 set address index=""{0}"" source=dhcp" -f $wmi.InterfaceIndex)

Netsh 的行为与 GUI 相同。

相关内容