CLI AI

Windows 上同样的工作流:PowerShell 与 cmd 平等

2026-03-03

CliAI 起步于 Linux 和 macOS,假设是 bash 或 zsh、Unix 风格的 fork-exec 移交。Windows 的路径真的不一样:没有 $SHELL,shell 启动器来自 $COMSPEC(或者终端直接打开 pwsh.exe),命令本身也不同。我们把「平等」当成产品目标,而不是打勾项。

「平等」是什么意思

它不是把 Unix 命令翻译成 Windows。它是同一句自然语言在你所处的 shell 下产出正确的命令。Linux 上问「列出监听端口」会看到 ss -ltnp;Windows 的 PowerShell 上问同样的话,会看到 Get-NetTCPConnection。

PowerShell
PS C:\> clai 列出监听 TCP 端口及对应进程名→ Get-NetTCPConnection -State Listen `    | Select-Object LocalAddress, LocalPort,                    @{N='Process';E={(Get-Process -Id $_.OwningProcess).ProcessName}}LocalAddress  LocalPort  Process0.0.0.0       80         nginx0.0.0.0       443        nginx

再看三个 PowerShell 例子

查找大于 100 MB 的文件

PowerShell
PS C:\> clai 在 D:\projects 下找出大于 100 MB 的文件→ Get-ChildItem -Path D:\projects -Recurse -File `    | Where-Object { $_.Length -gt 100MB } `    | Sort-Object Length -Descending `    | Select-Object FullName, Length

杀掉端口上的进程

PowerShell
PS C:\> clai 杀掉占用 8080 端口的进程→ Stop-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess -Force[Safety: CAUTION] — 等同于 SIGKILL。

跟踪日志文件

PowerShell
PS C:\> clai 跟踪 C:\app\error.log 最后 100 行→ Get-Content -Path C:\app\error.log -Tail 100 -Wait

底下做了什么

当你按 Enter 执行时,CliAI:

  1. 读取 $COMSPEC(默认 cmd.exe);如果当前宿主是 PowerShell,则使用 pwsh.exe。
  2. 把生成的命令作为参数启动 shell——Windows 没有 fork/exec 模型。
  3. 命令在你当前控制台运行,使用你的环境、当前目录和 PSReadLine 历史。

仍有差异的地方

  • 标准输入到 clai 自身有些小差异;尤其是 ANSI 颜色去除在 legacy cmd 中行为不同。Windows Terminal 或 pwsh 体验最好。
  • 路径展开。 拖入带空格的路径仍需要引号。CliAI 会引用生成的命令,但请你也加引号传源路径。

另见