安装-VSCode远程服务.psd1

@{
    RootModule           = '安装-VSCode远程服务.psm1'
    ModuleVersion        = '2.0.0'
    GUID                 = '2e2606a2-1d8b-418e-9d6d-a714a7704bdc'
    Author               = '埃博拉酱-机器人'
    CompanyName          = '一致行动党'
    Copyright            = '(c) 2026 一致行动党. 保留所有权利。'
    Description          = @'
通过 SSH 在远程主机上安装与本机 VS Code 版本严格匹配的 VS Code Server。
 
功能特性:
- 自动检测远程系统类型(Windows / Linux),无需用户指定;裸 IP/主机名连接时会从 ~/.ssh/config 反查该主机对应的账户与端口
- Windows 使用 HTTP 断点续传下载(基于 Range 头,中断后自动从已下载字节数处续传),按远程 PowerShell 版本自动选择通用版或 Win7 兼容版脚本;Win7 版压缩包由本机下载后中转上传,不在远程发起下载
- Linux 使用 sh 脚本下载安装,自动检测 x64 / arm64 / armhf 架构,支持 curl / wget,含备用下载源
- 自动读取本机 VS Code 提交号与发布通道(稳定版 / 预览版),下载与之完全对应的服务端
- 基于 SSH_ASKPASS 的密码复用,全程只需输入一次密码;已配置密钥免密的主机完全免交互
 
使用语法:
  安装-VSCode远程服务 -远程主机 <主机名或IP> [-远程账户 <账户>] [-SSH端口 <端口>] [-本地版本 <预览版|稳定版>]
  未指定账户或端口时,从 ~/.ssh/config 反查匹配项(优先 Host 精确/通配匹配,其次 HostName 等于主机名)
 
下载行为:Windows HTTP 断点续传 / Linux curl+wget 下载均无限重试、无超时
 
常用示例:
  # 基本用法(自动检测系统与版本)
  安装-VSCode远程服务 192.168.1.100 -远程账户 user
 
  # 指定端口与预览版
  安装-VSCode远程服务 10.15.49.6 -SSH端口 22112 -本地版本 预览版 -远程账户 v-jiamh
'@

    PowerShellVersion    = '5.1'
    RequiredModules      = @()
    FunctionsToExport    = @('安装-VSCode远程服务')
    CmdletsToExport      = @()
    VariablesToExport    = @()
    AliasesToExport      = @()
    PrivateData          = @{
        PSData = @{
            Tags         = @('PowerShell', 'VSCode', 'RemoteSSH', 'VSCodeServer', 'Windows', 'Linux', 'SSH')
            LicenseUri   = 'https://opensource.org/licenses/MIT'
            ProjectUri   = 'https://github.com/Ebola-Chan-bot/Install-VSCodeRemoteServer'
            ReleaseNotes = @'
Windows 通用版脚本不再使用 BITS(SSH 远程登录会话下 BITS 必然报 0x800704DD),改为基于 HTTP Range 头的断点续传下载:单次运行内任何传输中断都会自动从已下载字节数处续传,无限重试、无超时,失败等待间隔逐次递增。
裸 IP/主机名连接不再回退本机用户名:未指定 -远程账户/-SSH端口 时,从 ~/.ssh/config 按 Host(精确与通配符)、HostName、Port 反查匹配的账户与端口;显式指定时仍以用户输入为准。
安装目录改为新版 exec server 布局(<数据目录>/cli/servers/<质量名>-<提交号>/server,质量名按通道取 Insiders/Stable),旧 bin/<提交号> 布局弃用,Windows 三个脚本与 Linux 脚本同步修改;实测(远程机 cli/servers 目录时间线)Remote-SSH 自 VS Code 1.126(Insiders,2026-06)起开始使用新布局并自 1.137 起完全落地,早于 1.126 的 VS Code 只识别旧 bin 布局,本模块安装的服务端对其不再生效。
补装 Remote-SSH 引导所需的远程 CLI(数据根目录下 <code|code-insiders>-<提交号>[.exe],Windows 取 cli-win32-<架构> 包,Linux 按架构取 cli-alpine-* 或 cli-linux-armhf 包,均含递增间隔的无限重试);同提交号且结构完整(product.json 与 bin 并存)的 Server 直接复用,不再重复下载。
进度显示周期改为动态调整:进度不足 2/3 时每个报告周期比上个周期多 1 秒,超过 2/3 后每个周期比上个周期少 1 秒(下限 1 秒);进度信息的时间戳仅保留时分秒,不再包含日期。
SCP 上传失败的报错信息在远端空间不足类错误(quota exceeded、No space left 等)时额外指明完整上传目标路径(连接目标:远程路径),便于定位是哪台主机的哪个路径空间不足。
上传目标路径改为绝对路径:安装前先解析远端登录目录(Linux 取 $HOME、Windows 取 %USERPROFILE%),scp 上传目标以该目录为基准拼成完整绝对路径,报错时不再出现 ./xxx 相对路径而无法判断具体位置;解析失败时退回相对路径。
空间不足类上传报错补充要上传的文件大小,便于估算需要腾出的远端空间。
'@

        }
    }
}