Windows 11 工具链部署与 SSH 踩坑笔记

设备:MAXSUN MS-H110ZL / 8GB RAM / NVIDIA Quadro P1000

系统:Windows 11 IoT Enterprise LTSC 2024(NTLite 精简镜像)

一、已部署工具链

全部放在 C:\Users\root\AppData\Local\Microsoft\WindowsApps\(默认在 PATH):

工具 文件 说明
neofetch winfetch.ps1 + neofetch.cmd PowerShell 版,GitHub: lptstr/winfetch
busybox busybox.exe + 180 个硬链接 v1.38.0,0.7MB
curl 系统自带 真·curl 8.8.0
wget busybox 的 wget 链接

1.1 busybox 使用

powershell

复制代码
busybox --install   # 生成 grep/sed/awk/tar/vi/sh 等 180 个硬链接(不占额外磁盘)
busybox --list      # 查看全部 applet
sh -c "..."         # 迷你 unix shell

1.2 neofetch 安装

powershell

复制代码
# 下载 winfetch.ps1
curl -sL "https://raw.githubusercontent.com/lptstr/winfetch/master/winfetch.ps1" -o /tmp/winfetch.ps1

# 创建 neofetch.cmd 包装器
$neofetchCmd = "@echo off`r`npowershell -NoProfile -ExecutionPolicy Bypass -File `"C:\Users\root\AppData\Local\Microsoft\WindowsApps\winfetch.ps1`" %*"
[System.IO.File]::WriteAllText('C:\Users\root\AppData\Local\Microsoft\WindowsApps\neofetch.cmd', $neofetchCmd, [System.Text.Encoding]::ASCII)

关键: winfetch.ps1 必须使用 UTF-8 with BOM 编码才能在 PowerShell 5.1 中正常运行,否则会出现乱码或执行失败。

1.3 curl/wget 别名冲突

PowerShell 内置了 curlwget 别名,指向 Invoke-WebRequest,会挡住同名 exe。已在 PowerShell profile 中移除别名,现在:

  • curl = 微软原生 curl 8.8.0

  • wget = busybox wget

二、踩坑笔记(SSH 远程操作 Windows)

以下记录在 Linux 端通过 SSH 远程操作 Win11 时遇到的主要问题。

坑 1:PowerShell 引号地狱

ssh host 'powershell -Command "..."' 要经过三层解析(bash → ssh → PowerShell),双引号嵌套极易翻车。

可靠替代方案(按优先级):

  1. scp 推脚本文件再执行 ------ 最稳,任何复杂度都适用

  2. 单层单引号包 PS 命令,内部只用简单语法

  3. -EncodedCommand(base64 UTF-16LE)------ 可行但生成麻烦

坑 2:cmd echo 会展开变量

远程默认 shell 是 PowerShell 时,cmd /c "echo if ($env:X) ..." 里的 $env:X 会被外层 PowerShell 先展开成实际值。

结论: 凡是含 $ 的内容,一律走 scp 推文件,不要用命令行拼接。

坑 3:注册表值名带空格/括号

reg add ... /v "SimSun & NSimSun (TrueType)" 引号穿三层必挂。

解法:.reg 文件,scp 过去后用 reg import

坑 4:执行策略重启后重置

RemoteSigned 策略在一次重启后可能失效,profile 加载失败 → SSH 又乱码。

修复命令:

powershell

复制代码
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

坑 5:per-user 服务禁不掉

OneSyncSvcWpnUserService 这类带 _数字后缀 的服务,Stop/Set-Service 只对当前实例生效,登录一次就复活。

解决: 必须改 HKLM 模板 Start=4

坑 6:GitHub 直链资产名猜不中

Weasel release 资产实际叫 weasel-0.17.4.0-installer.exe,与直觉不符。

正确做法: 先用 API 列出资产再下载:

powershell

复制代码
iwr api.github.com/repos/rime/weasel/releases/latest | ConvertFrom-Json |
  Select -Expand assets | Select name, browser_download_url

Win11 本机直连 GitHub 不通时,从 Linux 中转下载再 scp。

坑 7:NTLite 精简系统的隐藏地雷

  • Defender 可能被物理删除(不是禁用),装第三方安全软件前先确认

  • 字体被裁剪 → 老软件乱码第一嫌疑是缺 simsun.ttc

  • winget 缺失、商店服务缺失属正常,不必浪费时间排查

三、Windows 激活状态

当前已从评估版转换为 Windows 11 IoT Enterprise LTSC 2024 永久激活

转换步骤

  1. 下载 SKU 文件,解压后将 IoTEnterpriseS 文件夹复制到 C:\Windows\System32\spp\tokens\skus\

  2. 执行转换命令:

cmd

复制代码
cscript.exe %windir%\system32\slmgr.vbs /rilc
cscript.exe %windir%\system32\slmgr.vbs /upk
cscript.exe %windir%\system32\slmgr.vbs /ckms
cscript.exe %windir%\system32\slmgr.vbs /cpky
cscript.exe %windir%\system32\slmgr.vbs /ipk KBN8V-HFGQ4-MGXVD-347P6-PDQGT
  1. 用 MAS 激活:C:\Users\root\MAS_AIO.cmd /HWID

去除水印

cmd

复制代码
reg add "HKCU\Control Panel\Desktop" /v PaintDesktopVersion /t REG_DWORD /d 0 /f
taskkill /f /im explorer.exe
start explorer.exe

四、内存盘备忘(未部署)

Windows 原生无内存盘。如需使用,推荐 ImDisk(开源,CLI 友好):

cmd

复制代码
imdisk -a -s 1G -m R: -p "/fs:ntfs /q /y"
imdisk -D

8GB 内存建议 ≤2GB。

五、快速恢复命令

powershell

复制代码
# 修复执行策略
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

# 更新 SSH profile
# 确认 profile 存在且编码正确
notepad $PROFILE
相关推荐
一隅论数智12 小时前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
小羊没烦恼!12 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
rockmelodies12 小时前
# Windows Server2008 R2 Standard(SP1镜像U盘)重置本地管理员密码【完整详细步骤】
windows·密码破解
深圳老胡14 小时前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
Because_of_Her115 小时前
并查集-听课笔记
笔记·算法·并查集
彧azz15 小时前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
陈卫军老师16 小时前
陈卫军:把口味写在一张纸上,店才稳得住
经验分享·笔记·流量运营
`流年づ16 小时前
人工智能学习笔记 - 补充
人工智能·笔记·深度学习·学习
qeen8716 小时前
【Linux】操作系统之进程介绍(二)
linux·笔记·学习·进程
从零开始的嵌入式之旅17 小时前
day47
arm开发·经验分享·笔记·嵌入式硬件