WSL Windows脚本运行程序
一种桥接服务,允许WSL环境在Windows主机上自动执行Windows脚本(.bat、.ps1),并进行完整的日志记录和监控。
概述
此工具解决了从WSL(Linux的Windows子系统)运行Windows本机脚本的问题。它监视队列文件夹中的新脚本,在Windows上自动执行它们,捕获完整的输出日志,并组织完成的脚本。
非常适合:在WSL中运行的AI助手(如Claude)需要执行Windows命令、自动化工作流、测试或WSL需要触发Windows端操作的任何场景。
特性
- 自动执行:放置在队列文件夹中的脚本会立即执行
- 完整日志记录:使用时间戳完成stdout/stderr捕获
- 文件稳定性检测:执行前等待文件完全写入
- 有组织的产出:自动分类到已完成/存档文件夹
- 退出代码跟踪:通过适当的日志记录进行成功/失败检测
- 多种脚本类型:支持.ps1、.bat和.cmd文件
- WSL集成:用于提交的易于使用的bash辅助脚本
- 服务模式:作为Windows计划任务运行(从启动时开始)
- 错误恢复:故障时自动重启
- MCP集成:用于本机Claude Code集成的可选MCP服务器
集成选项
选项1:MCP服务器(建议用于Claude代码)⭐
MCP(模型上下文协议)服务器提供与专用工具的本地Claude集成:
windows_execute-通过一次工具调用执行PowerShell命令windows_get_status-检查转轮状态windows_list_logs-查看最近的日志windows_read_log-读取特定日志文件
设置:
cd /mnt/d/Dev2/wsl-windows-script-runner/mcp-server
./setup.sh
./configure-claude.sh看 mcp服务器/README.md 获取完整文档。
Claude中的用法:
Use windows_execute to get the Windows computer name
Use windows_execute to list all running Chrome processes
Check the Windows script runner status选项2:Bash助手脚本
使用 wsl-submit.sh 直接使用辅助脚本:
/mnt/d/Dev2/wsl-windows-script-runner/wsl-submit.sh script.ps1此选项需要更多的手动步骤,但无需MCP设置即可工作。
建筑
WSL Environment Windows Host
┌─────────────────┐ ┌──────────────────────┐
│ │ │ │
│ Claude/User │ │ Script Watcher │
│ ↓ │ │ (Scheduled Task) │
│ wsl-submit.sh │───────┐ │ ↓ │
│ ↓ │ │ │ FileSystemWatcher │
│ Copy to queue │ │ │ ↓ │
│ │ │ │ Execute Script │
└─────────────────┘ │ │ ↓ │
│ │ Capture Logs │
Shared Folder │ │ ↓ │
┌─────────────────────────┼───────┼──────────────────────┐
│ /mnt/d/Dev2/wsl-... │ │ D:\Dev2\wsl-... │
│ │ │ │
│ queue/ ←───────────────┘ │ ← Monitor │
│ logs/ │ → Write │
│ completed/ │ → Move (success) │
│ archive/ │ → Move (failure) │
└─────────────────────────────────┴──────────────────────┘目录结构
wsl-windows-script-runner/
├── queue/ # Drop scripts here (monitored)
├── logs/ # Execution logs with timestamps
├── completed/ # Successfully executed scripts
├── archive/ # Failed scripts
├── ScriptWatcher.ps1 # Main file watcher service
├── Install-ScriptWatcher.ps1 # Installation script
├── Uninstall-ScriptWatcher.ps1 # Removal script
├── Get-WatcherStatus.ps1 # Status checker
├── wsl-submit.sh # WSL helper script
└── README.md # This file安装
步骤1:安装计划任务(Windows,作为管理员)
# Open PowerShell as Administrator
cd D:\Dev2\wsl-windows-script-runner
# Install the service
.\Install-ScriptWatcher.ps1这将:
- 创建一个名为“WSL Windows ScriptRunner”的计划任务
- 将其配置为在系统启动时运行
- 以SYSTEM权限运行以获得最大兼容性
- 设置故障时自动重启
步骤2:验证安装
# Check status (Windows)
.\Get-WatcherStatus.ps1
# Or from WSL
/mnt/d/Dev2/wsl-windows-script-runner/wsl-submit.sh --status步骤3:可选-将WSL助手添加到PATH
# Add to your ~/.bashrc or ~/.zshrc
echo 'alias wsl-run="/mnt/d/Dev2/wsl-windows-script-runner/wsl-submit.sh"' >> ~/.bashrc
source ~/.bashrc
# Now you can use:
wsl-run script.ps1
wsl-run --status
wsl-run --logs用法
来自WSL
提交脚本以供执行
# Using the helper script
/mnt/d/Dev2/wsl-windows-script-runner/wsl-submit.sh myscript.ps1
# Or if you added the alias
wsl-run myscript.ps1
# Or copy directly
cp myscript.bat /mnt/d/Dev2/wsl-windows-script-runner/queue/检查状态
wsl-run --status查看日志
# List recent logs
wsl-run --logs
# Filter logs
wsl-run --logs backup
# Tail a specific log
wsl-run --tail backup_20250115_143022.log实时观察队列
wsl-run --watch从Windows
手动执行(测试)
# Run the watcher manually (for testing)
.\ScriptWatcher.ps1
# Press Ctrl+C to stop检查状态
.\Get-WatcherStatus.ps1
# Or check the scheduled task
Get-ScheduledTask -TaskName "WSL-Windows-ScriptRunner"启动/停止服务
# Start
Start-ScheduledTask -TaskName "WSL-Windows-ScriptRunner"
# Stop
Stop-ScheduledTask -TaskName "WSL-Windows-ScriptRunner"
# Restart
Stop-ScheduledTask -TaskName "WSL-Windows-ScriptRunner"
Start-ScheduledTask -TaskName "WSL-Windows-ScriptRunner"例子
示例1:简单PowerShell脚本
来自WSL:
# Create a test script
cat > /tmp/test.ps1 /tmp/backup.bat &1
echo Backup process completed
EOF
wsl-run /tmp/backup.bat
# Check the archive (failed scripts)
ls /mnt/d/Dev2/wsl-windows-script-runner/archive/示例3:Claude代码集成
当Claude需要从WSL运行Windows命令时:
# Claude creates a script
cat > /tmp/windows-task.ps1 `技术细节
- 文件监视器:用途。NET FileSystemWatcher,用于高效监控
- 进程执行:生成单独的流程来捕获输出
- 退出代码:正确捕获并记录进程退出代码
- 文件锁定:实现重试逻辑以确保文件完全写入
- 编码:日志文件的UTF-8编码
- 重启策略:失败时自动重启(3次重试,间隔1分钟)
许可证
这是免费且无阻碍的软件,已发布到公共领域。
贡献
您可以随时提交问题、分叉存储库,并为任何改进创建pull请求。
支持
对于问题和疑问:
- 检查上面的故障排除部分
- 跑
Get-WatcherStatus.ps1诊断 - 查看最近的日志
logs/目录 - 检查Windows事件查看器中的任务计划程序错误
______________________________________________________________________
创建于:桥接WSL和Windows环境,实现无缝脚本执行 版本: 1.0.0 最后更新:2025年1月
