使用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
  • 在“条件”标签中,根据需要配置电源选项。
  • 在“设置”标签中,根据需要配置任务行为。
  • 完成并保存任务。
时间:2024/03/23
/
浏览:433 Views views
/
分类:编程技术
/