description: "面向模型的 pwsh 工具,供选择、配置或排查 Windows 上一次性 PowerShell 执行、后台任务与沙箱升权的使用者与维护者阅读。"
English | 中文
dsh-tool-pwsh 为 agent(智能体)提供 pwsh 工具,通过已挂载的 shell 执行器运行 PowerShell 命令——它是 dsh-tool-bash 的 Windows 对应物,逐调用镜像。每次调用都运行在全新 pwsh 进程中,因此状态不会保留;run_in_background 把长时间运行的命令变成后台任务。命令是 PowerShell 方言:原生 C:\... 路径与 $env:NAME 变量,不做方言翻译。每次调用都运行在受管 DSH_* 环境中;在沙箱执行器下,工具会向模型说明并强制执行 Windows 特有的语言模式与命名管道约定。请与 dsh-pwsh-local 等 PowerShell 执行器以及 dsh-shell-env 插件一起挂载。
在 agent 需要运行 PowerShell 命令的任何组合中加载本插件——通常是 ctx.shell 由 PowerShell 执行器支撑的 Windows 组合。一旦挂载执行器提供方与 dsh-shell-env 注册表,它就注册 pwsh 工具。
当命令必须用 PowerShell 编写——原生路径与 $env: 变量——或部署是 Windows 原生时,选择 pwsh 工具。当命令集是 bash 方言时选择 dsh-tool-bash;两者之间没有翻译。当工作依赖跨调用状态(cwd、变量)时,持久对应物 dsh-tool-pwsh-persistent 会保持一个按所有者隔离的 shell 存活。
常用路径是 PowerShell 执行器提供方、环境注册表与本工具。
- name: '@deepseek-ai/dsh-pwsh-local'
- name: '@deepseek-ai/dsh-shell-env'
- name: '@deepseek-ai/dsh-tool-pwsh'
唯一的配置字段用于开关后台支持。
| 字段 | 默认值 | 含义 |
|---|---|---|
enableRunInBackground |
true |
暴露 run_in_background;为 false 时拒绝强制后台调用 |
生成的配置目录是每个受支持字段及其 JSDoc 的穷尽式真源;生成的工具目录携带完整参数 schema。
工具执行 pwsh -Command <command> 并返回合并后的输出。命令每次调用都运行在全新 pwsh 进程中,因此状态从不保留——请传 workdir 而不是 cd。路径使用原生 Windows 形式,环境变量用 $env:NAME 读取。非零退出以 [exit code: N] 报告;在 Windows 上,强制终止的命令以 [exit code: 1] 结算且没有信号标记,因此 agent 把中断后的裸 exit 1 当作终止而非命令失败。后台运行、输出截断以及 description/timeoutMs/workdir 参数的行为与 dsh-tool-bash 完全一致,包括异步 shell 准备过程中由任务负责的取消。
在沙箱执行器下,被拒绝的命令会报告 [sandbox: file access denied under <mode> mode],并适用相同的单次升权路径:用 sandbox_permissions 加一句 justification,经用户审批后重试完全相同的命令一次。工具还会在其描述中教授两条 Windows 受限令牌约定:只读 pwsh 运行在 ConstrainedLanguage 中(.NET 静态调用、Add-Type、COM 与反射会以 "only core types" 错误失败);两种受限模式下程序都无法打开命名管道,因此通过管道 stdio 捕获另一程序输出的命令会以 EPERM 失败——请升权该确切命令一次,或重构命令以避免捕获输出。
没有 PowerShell 执行器的组合永远不会激活该工具,且注入的服务(tools、shell、systemPrompt、shellEnv)必须全部存在。没有任务运行时的后台调用会以 background jobs unavailable: load @deepseek-ai/dsh-jobs and @deepseek-ai/dsh-tool-jobs 失败;没有沙箱执行器时的 sandbox_permissions 会以 sandbox_permissions is not available in this composition (no sandboxing executor to escalate) 失败。
当包级约定不够用时阅读以下页面。它们从 shell 家族逐步进入执行器 seam,以及 Windows 行为背后的设计笔记。
DSH_* 环境。job_output、job_list 与 job_kill 控制。pwsh 参数 schema 的确切内容。该插件注册作用域内的每次请求都在 first-party 顺序 1010 处包含以下 pwsh 指引。按作用域实施的工具限制可以隐藏 schema,却不会移除这个独立注册的区段。
Non-zero exits are reported as `[exit code: N]` markers; investigate failures before moving on. On Windows a killed process settles as `[exit code: 1]` without a signal marker; treat a bare exit 1 after an interruption as a termination, not a command failure.
插件激活期间,每次请求都会产生少量固定的输入 token 开销。
只要注册作用域与提示词文本不变,前缀就保持稳定。插件激活或释放可能使从该提示词区段起的复用失效。
模型会看到生成的 pwsh schema。按 agent 作用域实施的工具限制可以移除该 agent 的定义。
工具可见的每个请求都会产生固定 schema 开销。
只要可见性与工具定义不变,前缀就保持稳定。限制或配置变化可能从首个变化的 token 开始使复用失效。
渲染器输出依数据而定的 stdout 尾部,再输出可选的 [stderr] 和 stderr 尾部。条件行精确为 [output truncated; full output: <path-or-(unavailable)>]、[sandbox: file access denied under <mode> mode] 加升权提示 [sandbox: escalation available — …](仅在组合声明升权时)、[timed out after <timeoutMs>ms]、[killed by signal: <signal>] 与 [exit code: <exitCode>](仅非零退出);空正文渲染为 (no output)。
调用前的结果 token 为零。输出按流设界,而每行已发出的内容在压缩(compaction)前保留于历史。
仅追加;新可见内容位于可复用请求前缀之后,不会使现有 KV-cache 条目失效。
后台启动精确渲染为 started background job <id>;随后的读取与状态经由通用 job_output/job_kill 工具流转,包括内存截断丢弃未读字节时的有损读取 spill 通知。
确认是一行固定的短文本;任务输出按每次读取设界。
仅追加;新可见内容位于可复用请求前缀之后,不会使现有 KV-cache 条目失效。
验证与基础设施失败统一为 Error: <message>。本包的稳定消息包括 invalid command: expected a non-empty string、invalid description: expected a non-empty string、invalid timeoutMs: expected a positive number, got <value>、升权配对失败、sandbox_permissions is not available in this composition (no sandboxing executor to escalate)、共享升权失败(未严格加宽/无审批服务/无 agent 可路由/无审批通道/用户拒绝/已取消)、run_in_background is disabled for this deployment (enableRunInBackground: false)、background jobs unavailable: load @deepseek-ai/dsh-jobs and @deepseek-ai/dsh-tool-jobs,以及 tool call aborted。
只有失败调用会增加这些保留 token;被中止的调用不会添加命令输出。
仅追加;新可见内容位于可复用请求前缀之后,不会使现有 KV-cache 条目失效。
这些限制说明工具何时不合适或需要特别小心。它们是当前包约束,不是任务积压。
Add-Type、非核心 .NET 静态调用([System.IO.*]::、[math]::)、COM 对象与反射会以 "only core types" 错误失败,且该模式无法从内部解除。workspace-write 的私有临时目录让探测完成,因此除非宿主策略另有规定,它保持 FullLanguage。两种受限模式都拒绝命名管道打开,因此受限命令内部的管道 stdio spawn 会以 EPERM 失败。工具描述把两条约定都教给模型;完整限制以后端 README 为准。pwsh -Command;持久 shell 对应物是 @deepseek-ai/dsh-tool-pwsh-persistent,它跨调用保持一个按所有者隔离的 pwsh 存活。$env: 变量),而不是 bash;没有方言翻译。