|
目录
3种方法介绍
电脑有两个无线网卡,还有几个手机接上开usb网络,结果发现下载东西时只能用一个。
看了一圈方法大概就是①cmd设置 InterfaceMetric(接口跃点数)、②powershell使用NetSwitchTeam命令创建创建一个网络交换机组,把所有网卡扔进去、③使用 Connectify Dispatch软件。
Connectify Installer软件
软件网上可以收到 po解 的橙色版本Connectify Installer (7.3.0.30245).exe,确实可以实现同时使用多个网络。但是在我电脑上实际使用之后发现:不能吃满每个网络的带宽;只看最大值确实可以,把实验室的网络叠加峰值到50Mbps,细看速率图,结果发现是和心电图似的上蹦下跳,隔一段时间还会随机断流一下,平均下来还不如单个网卡的速率,用下来还不如不用。
软件如果要用的话,设置要改一下才能用,不然就是 断流 或者 只有一个网卡工作,高级设置那里提示覆盖dns最好是不要开

netsh 命令设置跃点数
设置跃点数可以使用bat脚本实现(需要管理员)
需要 自动 递增/递减 设置跃点数可以使用第二个脚本。如果网卡过多 递增/递减 的跨度要缩小 或者 添加辅助 变量 和 一些 if语句 限制 递增/递减的跨度在一个 区间 之内,防止设置的跃点数 过大 或 小于零。
辅助变量及变量限制语句示例
:: 增加跃点数 set /a metricF+=5 set /a metric-=metricF
:: 如果 metricF 大于 20,则重新设置为 5 if !metricF! gtr 19 ( set metricF=5 ) :: 确保 metric 的最小值为 25 if !metric! lss 25 ( set metric=25 ) :: 如果 metric 大于 85,则设置为 85 if !metric! gtr 84 ( set metric=85 )
bat脚本1
@echo off setlocal enabledelayedexpansion
:: 获取所有网卡的名称 for /f "tokens=*" %%a in ('netsh interface ip show config ^| findstr "接口"') do ( echo %%a set "interface=%%a" echo interface=!interface! set "interface=!interface:接口 =!" set "interface=!interface: 的配置=!" echo interface=!interface! set "interface=!interface:"=!" echo interface=!interface!
:: 设置跃点数(Metric) echo 设置跃点数... netsh interface ip set interface "!interface!" metric=20 echo 设置跃点数完成。 echo.
) echo 所有网卡的跃点数设置完成。 pause
bat脚本2
补充一个可以递减/递增设置跃点数的代码。
set /a metric-=1,根据自己所需改一下符号 ,实现递增/递减 设置跃点数。设置一样的跃点数直接改为0就好。网上有些教程是全部设置为1,但这样有时候会用不了,或者断流、速度上不去。跃点数的取值是1~9999,正常来说设置 20~50 左右就行,但有些情况下设置一个比较大的数值才行。
比如我使用 NetSwitchTeam 创建交换机组合之后,多个网卡会合并成一个虚拟的 “以太网” 网卡。此时该网络的默认的 网关跃点数是比较大的 256 。这时候设置 跃点数(接口)为 1 会断流,需要设置大一点的数值,后来随便输入了个 7777 设置上速度就跑上去了。
其他情况可以自行修改代码测试。
@echo off setlocal enabledelayedexpansion
:: 初始化跃点数 set /a metric=10
:: 获取所有网卡的名称 for /f "tokens=*" %%a in ('netsh interface ip show config ^| findstr "接口"') do ( echo %%a set "interface=%%a" echo interface=!interface! set "interface=!interface:接口 =!" set "interface=!interface: 的配置=!" echo interface=!interface! set "interface=!interface:"=!" echo interface=!interface!
:: 设置跃点数(Metric) echo 设置跃点数为 !metric! ... netsh interface ip set interface "!interface!" metric=!metric! echo 设置跃点数完成。 echo.
:: 递增/递减跃点数 set /a metric-=1 )
echo 所有网卡的跃点数设置完成。
netsh interface ip show config pause

网上一些教程是用的route print 命令打印信息查看设置的跃点数,但我不推荐这个方法。因为我发现route print 命令打印出来的跃点数一些显示的是 网关跃点数 和 接口跃点数 相加的结果,而有些则是 接口跃点数 。我一开始用route print打印信息看到和我脚本设置的值不一样,弄半天才发现是这么个情况。
两个命令打印的信息对比如下:
netsh interface ip show config | findstr "接口" 命令打印的信息:

route print 命令打印的信息:

使用PowerShell中的NetSwitchTeam 命令实现
NetSwitchTeam 命令创建网络交换机团队
脚本在下面贴出来了。报错可以尝试第二个添加了报错处理: “自动 禁用-启用 无法添加到交换机组合” 的脚本
create_network_team.ps1脚本(需要管理员),这个方法添加之后会断网一会,然后就是 我的状态栏网速实时显示就用不了了,因为无法选中交换机组作为监测对象。所以我本人不推荐 -,-
此外我还新建了一个bat脚本用来 使用管理员 运行ps1脚本,因为我的右键菜单只有 右键单击bat文件时才会显示一个管理员运行。本来想通过创建 快捷方式 来实现管理员运行ps1脚本,点进去发现管理员运行选项是灰色的无法选中。。。


@echo off PowerShell -NoProfile -ExecutionPolicy Bypass -File "C:\Users\long\Desktop\create_network_team.ps1"


ps1脚本1
# 设置团队名称 $teamName = "SwitchTeam01" Write-Host "团队名称设置为:$teamName"
# 检查是否存在旧的网络团队 $existingTeam = Get-NetSwitchTeam -Name $teamName -ErrorAction SilentlyContinue if ($existingTeam) { # 删除旧的网络团队 Write-Host "删除旧的网络团队..." Remove-NetSwitchTeam -Name $teamName for ($i = 2; $i -gt 0; $i--) { Write-Host "删除完成!将在 $i 秒后开始创建" Start-Sleep -s 1 } }
# 获取网卡列表 Write-Host "获取网卡列表..." $adapters = Get-NetAdapter
# 找到状态为 Up 的网卡 $upAdapters = $adapters | Where-Object { $_.Status -eq "Up" } if ($upAdapters.Count -gt 0) { $firstAdapter = $upAdapters[0] try { New-NetSwitchTeam -Name $teamName -TeamMembers $firstAdapter.Name -ThrottleLimit 3 Write-Host "New-NetSwitchTeam创建网络团队,第一个添加网卡:$( $firstAdapter.Name)" } catch { Write-Host "创建网络团队时出错:$($_.Exception.Message)" }
# 存储未成功添加的网卡 $failedAdapters = @()
foreach ($adapter in $upAdapters) { if ($adapter.Name -ne $firstAdapter.Name) { Write-Host "添加网卡:$($adapter.Name)" try { # 检查网卡是否已经是团队成员 $isMember = Get-NetSwitchTeamMember -Team $teamName -ErrorAction SilentlyContinue | Where-Object { $_.Name -eq $adapter.Name } if (-not $isMember) { # 尝试添加网卡,强制捕获错误 Add-NetSwitchTeamMember -Team $teamName -Name $adapter.Name -ErrorAction Stop Write-Host "成功添加网卡:$($adapter.Name)" } else { Write-Host "网卡 $($adapter.Name) 已经是团队成员,跳过添加。" } } catch { # 特殊处理特定错误 if ($_.Exception.Message -like "*已保留的名称*") { Write-Host "无法添加网卡 $($adapter.Name):该名称已被保留。" } else { Write-Host "Add-NetSwitchTeamMember方法添加网卡时出错:$($_.Exception.Message)" } # 记录未成功添加的网卡 $failedAdapters += $adapter.Name } } }
# 如果有未成功添加的网卡,输出信息 if ($failedAdapters.Count -gt 0) { Write-Host "未成功添加的网卡:$($failedAdapters -join ', ')" } } else { Write-Host "没有找到状态为 'Up' 的网卡,无法创建网络团队。" }
# 显示网络团队信息 Write-Host "显示网络团队信息..." Get-NetSwitchTeam -Name "SwitchTeam01" for ($i = 3; $i -gt 0; $i--) { Write-Host "将在 $i 秒后退出..." Start-Sleep -s 1 } PAUSE
usb共享的网卡添加报错可以试试 重新插拔 或者 重新执行脚本,报错大致如下:
Add-NetSwitchTeamMember : 该函数尝试使用为让另一事务使用而保留的名称。 所在位置 C:\Users\long\Desktop\create_network_team.ps1:43 字符: 21 + ... Add-NetSwitchTeamMember -Team $teamName -Name $adapter.Na ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (MSFT_NetSwitchTeam:root\StandardCimv2\MSFT_NetSwitchTeam) [Add-NetSwitchT eamMember], CimException + FullyQualifiedErrorId : Windows System Error -2147018096,Add-NetSwitchTeamMember
网卡添加报错也尝试以下代码,在原来的基础上添加了 网卡添加报错自动 禁用-启用 并重新尝试添加的操作。目前在我电脑上 问题复现 可以正常添加。

ps1脚本2
# 设置团队名称 $teamName = "SwitchTeam01" Write-Host "团队名称设置为:$teamName"
# 检查是否存在旧的网络团队 $existingTeam = Get-NetSwitchTeam -Name $teamName -ErrorAction SilentlyContinue if ($existingTeam) { # 删除旧的网络团队 Write-Host "删除旧的网络团队..." Remove-NetSwitchTeam -Name $teamName for ($i = 2; $i -gt 0; $i--) { Write-Host "删除完成!将在 $i 秒后开始创建" Start-Sleep -s 1 } }
# 获取网卡列表 Write-Host "获取网卡列表..." $adapters = Get-NetAdapter
# 找到状态为 Up 的网卡 $upAdapters = $adapters | Where-Object { $_.Status -eq "Up" } if ($upAdapters.Count -gt 0) { $firstAdapter = $upAdapters[0] try { New-NetSwitchTeam -Name $teamName -TeamMembers $firstAdapter.Name -ThrottleLimit 3 Write-Host "New-NetSwitchTeam创建网络团队,第一个添加网卡:$( $firstAdapter.Name)" } catch { Write-Host "创建网络团队时出错:$($_.Exception.Message)" }
# 存储未成功添加的网卡 $failedAdapters = @() $reservedAdapters = @()
foreach ($adapter in $upAdapters) { if ($adapter.Name -ne $firstAdapter.Name) { Write-Host "添加网卡:$($adapter.Name)" try { # 检查网卡是否已经是团队成员 $isMember = Get-NetSwitchTeamMember -Team $teamName -ErrorAction SilentlyContinue | Where-Object { $_.Name -eq $adapter.Name } if (-not $isMember) { # 尝试添加网卡,强制捕获错误 Add-NetSwitchTeamMember -Team $teamName -Name $adapter.Name -ErrorAction Stop Write-Host "成功添加网卡:$($adapter.Name)" } else { Write-Host "网卡 $($adapter.Name) 已经是团队成员,跳过添加。" } } catch { if ($_.Exception.Message -like "*为让另一事务使用而保留的名称*") { Write-Host "无法添加网卡 $($adapter.Name):该名称已被保留。" $reservedAdapters += $adapter.Name # 禁用网卡 Disable-NetAdapter -Name $adapter.Name -Confirm:$false Start-Sleep -s 2 # 等待几秒钟 # 启用网卡 Enable-NetAdapter -Name $adapter.Name -Confirm:$false Write-Host "网卡 $($adapter.Name) 已被禁用并重新启动。" # 再次尝试添加网卡 try { Add-NetSwitchTeamMember -Team $teamName -Name $adapter.Name -ErrorAction Stop Write-Host "二次尝试成功添加网卡:$($adapter.Name)" } catch { Write-Host "再次尝试添加网卡时出错:$($_.Exception.Message)" # 记录未成功添加的网卡 $failedAdapters += $adapter.Name } } else { Write-Host "Add-NetSwitchTeamMember方法添加网卡时出错:$($_.Exception.Message)" # 记录未成功添加的网卡 $failedAdapters += $adapter.Name } } } }
# 如果有未成功添加的网卡,输出信息 if ($failedAdapters.Count -gt 0) { Write-Host "未成功添加的网卡:$($failedAdapters -join ', ')" } if ($reservedAdapters.Count -gt 0) { Write-Host "被保留的网卡:$($reservedAdapters -join ', ')" } } else { Write-Host "没有找到状态为 'Up' 的网卡,无法创建网络团队。" }
# 显示网络团队信息 Write-Host "显示网络团队信息..." Get-NetSwitchTeam -Name "SwitchTeam01" for ($i = 3; $i -gt 0; $i--) { Write-Host "将在 $i 秒后退出..." Start-Sleep -s 1 } EXIT (责任编辑:)
|