# switch-network **Repository Path**: yaojianfeng/switch-network ## Basic Information - **Project Name**: switch-network - **Description**: 使用powershell脚本,在不同状态之间切换网卡,以便于满足使用需求 - **Primary Language**: PowerShell - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-08 - **Last Updated**: 2024-06-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 这个 PowerShell 脚本的主要功能是通过监控网络适配器的速度,自动在两个网卡之间切换,以确保网络传输的效率。以下是脚本的运行逻辑和步骤描述: ### 初始化设置 1. **设置控制台输出编码为 UTF-8**: ```powershell [Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8 ``` 2. **定义网络适配器的描述和名称**: - `adapterDescriptions`:定义了两个适配器的描述(外部和内部)。 - `adapterNames`:定义了与描述对应的适配器名称。 3. **定义一些全局变量**: - `thresholdSpeed`:速度阈值(1M/s,以 kb/s 表示)。 - `speedCheckDuration`:每次检查的间隔时间(5秒)。 - `maxLowSpeedDurationCount`:低速持续的最大次数(15秒,即3次5秒间隔)。 - `currentAdapterDesc` 和 `currentAdapterName`:当前使用的适配器描述和名称。 - `speedBelowThresholdCount`:记录低于速度阈值的次数。 - `state`:当前状态机的状态。 ### 函数定义 4. **获取当前网卡速度的函数**: ```powershell function Get-CurrentAdapterSpeed { param([string]$adapterName) $adapter = Get-NetAdapterStatistics -Name $adapterName return @{ReceivedSpeed = [Math]::Round($adapter.ReceivedBytes / 1024); SentSpeed = [Math]::Round($adapter.SentBytes / 1024) } } ``` 5. **根据状态切换适配器的函数**: ```powershell function Switch-AdaptersIfNecessary { # 切换适配器的逻辑 } ``` ### 主监控逻辑 6. **初始化设置**: - 禁用外部适配器,启用内部适配器。 ```powershell Disable-NetAdapter -Name $adapterNames["External"] -Confirm:$false Enable-NetAdapter -Name $adapterNames["Internal"] -Confirm:$false ``` 7. **主监控循环**: - 不断地检查当前适配器的速度,根据速度和当前状态决定是否切换适配器。 - **状态机逻辑**: - `WaitingToReceiveFile`:等待接收文件。如果接收速度超过阈值,切换到 `ReceivingFile` 状态。 - `ReceivingFile`:正在接收文件。如果接收速度低于阈值计数器达到限制,切换到 `FileReceived` 状态并切换适配器。 - `WaitingToUploadFile`:等待上传文件。如果发送速度超过阈值,切换到 `UploadingFile` 状态。 - `UploadingFile`:正在上传文件。如果发送速度低于阈值计数器达到限制,切换到 `FileUploaded` 状态并切换适配器。 ### 具体执行步骤 1. **初始化和设置适配器**: - 初始化时禁用外部适配器,启用内部适配器。 2. **进入主循环**: - 每 5 秒检查一次当前适配器的接收和发送速度。 - 根据当前的状态和速度,更新状态机的状态。 - 如果当前速度低于阈值且次数达到限制,则切换适配器。 3. **状态管理**: - 根据不同的状态(接收文件、上传文件等)管理网卡的启用和禁用,实现自动化的适配器切换。 总之,这个脚本通过检测网络速度,利用状态机来管理网卡的切换,以确保网络传输效率。