【WinSW】远程桌面接入WIFi断连问题修复

444 阅读3分钟

问题

公司让我们用笔记本电脑工作,每天都要背着电脑回家,但电脑挺沉的,背着确实有点累。所以我就把公司的笔记本设置了远程桌面,在家也能连上用。
不过有时候远程连接之后,Wi-Fi会断开,这样远程桌面就用不了了。

(rustDesk,ToDesk都存在一定的问题,还是远程桌面比较好用)

通用解决方式

  1. 勾选“即使网络未广播也能连接(SSID)”;

  1. 修改“高级设置”

将“用户身份验证”--> "用户或计算机身份验证",并将红色都勾选上。

盲点发现华生了。 在我的机器上所有勾选都被禁用掉。无法修改,并且IT管理员也比较忙,就想其他的办法进行解决。

--WinSw方案。

思考

最终的目的:需要能够探测笔记本是否连上对应的WIFI,如果没有连接上,那么需要自动连接上。 如果连接上了,则输出日志即可。

windows不熟悉的情况下,首先需要找到对应的命令:netsh。让kimi生成一个大致可以用的脚本,改吧改吧后:

function CheckWLAN {
    Start-Transcript -Path "D:\code\script\netmgr.log"
    $wifiName = "#SSID"
    Write-Host "================== $(Get-Date) =================="
    # 检查无线网络是否已经连接
    $interface = netsh wlan show interfaces | Select-String -Pattern "$wifiName"
    if ($interface -ne $null) {
        Write-Host "Already connected to $wifiName."
    } else {
        # 如果无线网络没有连接,则尝试连接
        Write-Host "Not connected to $wifiName. Attempting to connect..."
        # 这里假设你已经有一个名为"VRVIU"的无线网络配置文件
        netsh wlan connect name=$wifiName
        if ($?) {
            Write-Host "Successfully connected to $wifiName."
        } else {
            Write-Host "Failed to connect to $wifiName."
        }
    }
    Write-Host "==================end=================="
    Stop-Transcript
}

while($true){
    CheckWLAN
    Start-Sleep -Seconds 60
}

其中Start-Tracnscript将Write-Host的输出重定向的指定日志中。 每次都会覆盖,无需担心日志问题。

将以上脚本作为windows后台进程执行即可。

这样可选择性会比较多:

  1. windows计划任务;
  2. windows服务;
  3. supervisord-win;

以上都有一定的问题:

#1#2 我对windows的功能不熟悉,也不知道准确性,

#3 需要安装python, pip 进行下载,还需要加入到windows进行管理。

那么同事推荐一个组件:WinSW。

WinSW

功能:WinSW 将任何应用程序作为 Windows 服务进行包装和管理。可以直接下载二进制文件即可使用:

github.com/winsw/winsw…

与supervisord进行对比,它可以将配置文件所定义的程序内置到windows服务中进行管理。

  1. 编写一个配置文件:
<service>
    <id>checkWifi</id>
    <name>checkWifi</name>
    <description>Used to detect the presence of wifi</description>
    <executable>powershell.exe</executable>
    <arguments>-ExecutionPolicy Bypass -File "D:\code\golearn\work\winScript\wifi.ps1"</arguments>
    <onfailure action="restart" delay="20 sec"/>
</service>

说明:将上面的脚本通过powershell.exe执行;

  1. 使用WinSw将服务发布到Windows服务中;
./WinSW-x64.exe stop wifi.xml
  1. 启动服务以及其他命令
# 启动服务
./WinSW-x64.exe start wifi.xml
# 停止服务
./WinSW-x64.exe stop wifi.xml
# 查看运行状态
./WinSW-x64.exe status wifi.xml
# 刷新服务文件
./WinSW-x64.exe refresh wifi.xml
# 卸载服务
./WinSW-x64.exe uninstall wifi.xml

配置文件定义:github.com/winsw/winsw…

总结

在当前所从事的行业领域中,开发Windows平台下的后台服务是一项常见需求,其中多数任务需借助PowerShell脚本来实现。

得益于现今先进的生成式人工智能模型的支持,在日常工作中我倾向于结合使用Kimi、Poe以及ChatGPT等工具,这些工具能够高效地辅助生成所需的脚本或命令行代码。
此外,对于Windows环境下后端服务的部署与管理,计划采用WinSW(Windows Service Wrapper)作为解决方案之一。该工具的功能定位类似于Linux系统中的SupervisorD,允许用户以较为统一且简便的方式管理和监控后台进程,从而减少了对Windows操作系统内部复杂特性的直接依赖。