本文目录导读:

我来帮你编写自动切换网络配置脚本,根据不同需求提供几种方案:
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
注意事项
- 管理员权限:修改网络配置需要管理员/root权限
- 网卡名称:请根据实际情况修改脚本中的网卡名称
- 备份配置:切换前建议备份原配置
- 测试环境:先在测试环境验证脚本
你可以根据实际需求修改IP地址、子网掩码、网关和DNS等参数,如果需要自动检测功能,还可以添加更多检测逻辑。