如何编写自动切换网络配置脚本

wen 实用脚本 2

本文目录导读:

如何编写自动切换网络配置脚本

  1. Windows PowerShell 脚本
  2. Linux Bash 脚本
  3. 使用方式
  4. 高级功能 - 定时自动切换
  5. 注意事项

我来帮你编写自动切换网络配置脚本,根据不同需求提供几种方案:

Windows PowerShell 脚本

基础版 - 手动选择网络配置

# network_switch.ps1
param(
    [Parameter(Mandatory=$true)]
    [ValidateSet("办公室","会议室","出差","自动")]
    [string]$Profile
)
# 定义网络配置
$configs = @{
    "办公室" = @{
        IP = "192.168.1.100"
        Mask = "255.255.255.0"
        Gateway = "192.168.1.1"
        DNS = @("8.8.8.8", "114.114.114.114")
        Interface = "以太网"  # 请修改为你的网卡名称
    }
    "会议室" = @{
        IP = "10.0.0.100"
        Mask = "255.255.255.0"
        Gateway = "10.0.0.1"
        DNS = @("10.0.0.1")
        Interface = "以太网"
    }
    "出差" = @{
        # DHCP自动获取
        DHCP = $true
        Interface = "以太网"
    }
}
function Set-NetworkConfig {
    param($config)
    $interface = $config.Interface
    if ($config.DHCP) {
        Write-Host "设置 $interface 为DHCP自动获取..." -ForegroundColor Yellow
        netsh interface ip set address "$interface" dhcp
        netsh interface ip set dns "$interface" dhcp
    } else {
        Write-Host "设置 $interface 为静态IP: $($config.IP)..." -ForegroundColor Yellow
        # 设置IP和子网掩码
        netsh interface ip set address "$interface" static $config.IP $config.Mask $config.Gateway 1
        # 设置DNS
        netsh interface ip set dns "$interface" static $config.DNS[0]
        if ($config.DNS.Count -gt 1) {
            for ($i = 1; $i -lt $config.DNS.Count; $i++) {
                netsh interface ip add dns "$interface" $config.DNS[$i] index=$($i+1)
            }
        }
    }
    Write-Host "配置完成: $Profile" -ForegroundColor Green
}
# 执行配置切换
Set-NetworkConfig -config $configs[$Profile]

增强版 - 自动检测网络环境

# auto_network_switch.ps1
function Get-NetworkEnvironment {
    # 检测当前网络环境
    $detection_ips = @{
        "办公室" = "192.168.1.0"
        "会议室" = "10.0.0.0"
        "家庭" = "192.168.10.0"
    }
    $currentIP = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.InterfaceAlias -eq "以太网"}).IPAddress
    if ($currentIP) {
        foreach ($env in $detection_ips.Keys) {
            if ($currentIP -like "$($detection_ips[$env]-replace'\.0$','.*')*") {
                return $env
            }
        }
    }
    return "未知环境"
}
# 主逻辑
$env = Get-NetworkEnvironment
Write-Host "检测到当前环境: $env" -ForegroundColor Cyan
switch ($env) {
    "办公室" {
        Write-Host "切换到办公室网络配置" -ForegroundColor Green
        # 执行配置切换代码...
    }
    "会议室" {
        Write-Host "切换到会议室网络配置" -ForegroundColor Yellow
        # 执行配置切换代码...
    }
    default {
        Write-Host "使用DHCP自动获取IP" -ForegroundColor Gray
        # 执行DHCP配置...
    }
}

Linux Bash 脚本

基于 NetworkManager 的版本

#!/bin/bash
# network_switch.sh
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 配置函数
switch_to_office() {
    echo -e "${YELLOW}切换到办公室网络配置...${NC}"
    sudo nmcli con mod "办公室" ipv4.addresses "192.168.1.100/24"
    sudo nmcli con mod "办公室" ipv4.gateway "192.168.1.1"
    sudo nmcli con mod "办公室" ipv4.dns "8.8.8.8 114.114.114.114"
    sudo nmcli con mod "办公室" ipv4.method manual
    sudo nmcli con up "办公室"
    echo -e "${GREEN}办公室配置完成${NC}"
}
switch_to_conference() {
    echo -e "${YELLOW}切换到会议室网络配置...${NC}"
    sudo nmcli con mod "会议室" ipv4.addresses "10.0.0.100/24"
    sudo nmcli con mod "会议室" ipv4.gateway "10.0.0.1"
    sudo nmcli con mod "会议室" ipv4.dns "10.0.0.1"
    sudo nmcli con mod "会议室" ipv4.method manual
    sudo nmcli con up "会议室"
    echo -e "${GREEN}会议室配置完成${NC}"
}
switch_to_dhcp() {
    echo -e "${YELLOW}切换到DHCP自动获取...${NC}"
    sudo nmcli con mod "自动获取" ipv4.method auto
    sudo nmcli con up "自动获取"
    echo -e "${GREEN}DHCP配置完成${NC}"
}
show_current() {
    echo -e "${GREEN}当前网络状态:${NC}"
    ip addr show | grep -A2 "state UP"
    echo ""
    echo -e "${GREEN}当前DNS:${NC}"
    nmcli dev show | grep DNS
}
# 主菜单
case "$1" in
    office)
        switch_to_office
        ;;
    conference)
        switch_to_conference
        ;;
    dhcp)
        switch_to_dhcp
        ;;
    status)
        show_current
        ;;
    auto)
        # 自动检测和切换
        if ping -c 2 192.168.1.1 > /dev/null 2>&1; then
            switch_to_office
        elif ping -c 2 10.0.0.1 > /dev/null 2>&1; then
            switch_to_conference
        else
            switch_to_dhcp
        fi
        ;;
    *)
        echo "使用方法: $0 {office|conference|dhcp|status|auto}"
        echo ""
        echo "选项说明:"
        echo "  office     切换到办公室网络"
        echo "  conference 切换到会议室网络"
        echo "  dhcp       切换到自动获取"
        echo "  status     查看当前状态"
        echo "  auto       自动检测并切换"
        exit 1
        ;;
esac

使用方式

Windows 版本

# 以管理员身份运行
.\network_switch.ps1 -Profile "办公室"
.\network_switch.ps1 -Profile "会议室"
.\network_switch.ps1 -Profile "出差"

Linux 版本

# 设置执行权限
chmod +x network_switch.sh
# 使用
./network_switch.sh office
./network_switch.sh conference
./network_switch.sh dhcp
./network_switch.sh auto  # 自动检测
./network_switch.sh status  # 查看状态

高级功能 - 定时自动切换

#!/bin/bash
# timed_network_switch.sh
# 工作日时间表
case $(date +%u) in
    1|2|3|4|5)  # 周一至周五
        case $(date +%H) in
            09|10|11|12|13|14|15|16|17|18)
                switch_to_office
                ;;
            *)
                switch_to_dhcp
                ;;
        esac
        ;;
    6|7)  # 周末
        switch_to_dhcp
        ;;
esac

注意事项

  1. 管理员权限:修改网络配置需要管理员/root权限
  2. 网卡名称:请根据实际情况修改脚本中的网卡名称
  3. 备份配置:切换前建议备份原配置
  4. 测试环境:先在测试环境验证脚本

你可以根据实际需求修改IP地址、子网掩码、网关和DNS等参数,如果需要自动检测功能,还可以添加更多检测逻辑。

抱歉,评论功能暂时关闭!