使用PowerShell脚本实现OpenVPN自动切换连接
每次在家中和办公室都需要手动切换连接OpenVpn,以实现从家中连接到公司或从公司连回家里,虽然只是点几次鼠标,长期下来但还是挺烦的,所以借助ChatGPT的帮助,利用PowerShell脚本和任务管理器实现接入网络的不同,自动切换连接。
1. 创建一个PowerShell脚本check_openvpn.ps1
# 获取OpenVPN进程
$openVpnProcess = Get-Process -Name "openvpn" -ErrorAction SilentlyContinue
# 如果已经有OpenVPN连接,先断开
if ($openVpnProcess) {
#Write-Output "OpenVPN is running, disconnecting..."
Stop-Process -Name "openvpn-gui" -Force
Stop-Process -Name "openvpn" -Force
Start-Sleep -Seconds 5 # 等待几秒确保OpenVPN彻底断开
}
# 检查当前网络并根据网络连接相应的OpenVPN配置
$networkName = Get-NetConnectionProfile | Where-Object { $_.InterfaceAlias -like 'Ethernet*' } | Select-Object -ExpandProperty Name
#Write-Output $networkName
#"Network is $($networkName)" | Out-File "C:\Users\depeng\PsLogFile.txt"
switch ($networkName) {
'PAIHO' {
#Write-Output "Connecting to the Home VPN..."
Start-Process "C:\Program Files\OpenVPN\bin\openvpn-gui.exe" -ArgumentList "--connect Home.ovpn" -NoNewWindow
}
'HOME_NET' {
#Write-Output "Connecting to the Office VPN..."
Start-Process "C:\Program Files\OpenVPN\bin\openvpn-gui.exe" -ArgumentList "--connect WXPH.ovpn" -NoNewWindow
}
default {
#Write-Output "Network unknown, Connecting to the Office VPN..."
Start-Process "C:\Program Files\OpenVPN\bin\openvpn-gui.exe" -ArgumentList "--connect WXPH.ovpn" -NoNewWindow
}
}
exit 0
2. 在任务计划程序中创建任务
- 打开“任务计划程序(Task Scheduler)”。
- 选择“创建任务(Create Task)”。
- 在“常规(Greneral)”标签中,给任务命名,例如“Auto VPN Switch”。
- 在“触发器(Triggers)”标签中,选择“新建(New…)”,设置触发器为“在事件时(On an Event)”
- 选择“日志(Log)”为“系统(System)”,“来源”为“Power-Troubleshooter”,“事件ID”为“1”。这个事件ID对应于计算机从睡眠状态唤醒的事件。
- 在“操作(Action)”标签中,选择“新建(New…)”,然后选择“启动程序(Start a program)”,浏览并选择您之前创建的批处理脚本。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
参数为-File C:\Users\depeng\check_openvpn.ps1
- 在“条件”标签中,根据需要配置电源选项。
- 在“设置”标签中,根据需要配置任务行为。
- 完成并保存任务。