mcpField
P
Powershell.MCP

Powershell.MCP

本地服务
github.com/yotsuda开发工具1076 天前更新

关于 Powershell.MCP

PowerShell.MCP 将共享的 PowerShell 控制台开放给 AI 助手,使其能在持久会话中运行 PowerShell 命令和 CLI 工具。它面向希望通过可见命令执行与会话审计,让 AI 使用 PowerShell 生态的用户。

主要功能

  1. 01执行 PowerShell 命令和 CLI 工具
  2. 02复用持久控制台会话
  3. 03实时流式传输命令输出
  4. 04并行运行多个客户端控制台
  5. 05连接远程控制台
  6. 06通过 transcript 记录命令活动

适用场景

  1. 01运行跨服务的 PowerShell 管道
  2. 02交互式探索 API
  3. 03通过 PowerShell 模块管理云资源
  4. 04避免交互式密钥出现在 AI 输出中

MCP 相关

PowerShell.MCP 作为 MCP 服务,向客户端提供启动和管理本地或远程控制台、执行与取消命令以及收集输出的工具。MCP 客户端可借此访问 PowerShell 模块和 CLI 工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

PowerShell.MCP

PowerShell Platform PowerShell Gallery PowerShell Gallery License: MIT

安全警告: 此模块可完整访问系统中的 PowerShell。恶意使用可能造成严重损害。请负责任地使用,并仅在可信环境中运行。

概述

通用 MCP 服务——安装一次,即可让 AI 访问 10,000 多个 PowerShell 模块和任何命令行工具。

PowerShell.MCP 通过单个 MCP 服务将 AI 助手连接到整个 PowerShell 生态系统。你和 AI 在同一个 PowerShell 控制台中协作——AI 运行的每条命令都会实时显示在控制台中,且可以通过会话记录完整记录所有操作(参见审计 AI 会话)。

社交图片

需要 bash、语言 REPL、SQL 控制台或调试器吗? 如果无法安装 PowerShell 7,或者你更愿意使用其他 Shell(bash、cmd、zsh)、语言 REPL(python、node、racket、lua、……)、SQL 控制台(sqlite3、……)或语言调试器(pdb、jdb、perldb),请查看 ripple——它将同一共享控制台理念扩展到任何 REPL,并提供基于 ConPTY 的统一控制台,让它们并排运行。

为什么选择 PowerShell.MCP?

通往 PowerShell 生态系统的通用网关。

PowerShell.MCP 采用了与特定服务 MCP 服务不同的方式。它不为各个服务提供精选工具,而是让 AI 助手直接访问 PowerShell,使其能够使用专业人士日常使用的相同模块和命令行工具。

这意味着:

  • 一个 MCP 服务取代多个服务 — 无需为每项服务单独配置服务
  • 即时访问 PowerShell Gallery 中的 10,000 多个模块,无需等待专用 MCP 服务
  • 跨服务工作流 在单个管道中组合多项服务
  • API 探索 — 在编写生产代码前,先快速试验并验证 API 行为
  • 自我进化的能力 — AI 编写 PowerShell 脚本,供 AI 和用户执行,持续拓展能力边界
  • 行业标准技能 — 学到的命令可直接应用于自己的工作

示例:PowerShell 管道处理

“显示 PowerShell 仓库中的 Bug 问题及其作者”

gh issue list --repo PowerShell/PowerShell --json title,author,labels |
    ConvertFrom-Json |
    Where-Object { $_.labels.name -contains "Issue-Bug" } |
    Select-Object title, @{N='by';E={$_.author.login}}

“列出我正在运行的 Azure VM 及其大小”

Get-AzVM -Status | Where-Object PowerState -eq "VM running" |
    Select-Object Name, @{N='Size';E={$_.HardwareProfile.VmSize}}, Location

“检查 GitHub 的 API 是否会返回速率限制信息”

Invoke-RestMethod https://api.github.com/rate_limit |
    Select-Object -ExpandProperty rate

“通过 Win32 API 获取当前用户的 Windows 用户名”

Add-Type -MemberDefinition '[DllImport("advapi32.dll")] public static extern bool GetUserName(System.Text.StringBuilder sb, ref int len);' -Name Win32 -Namespace API
$sb = [System.Text.StringBuilder]::new(256); $len = 256
[API.Win32]::GetUserName($sb, [ref]$len); $sb.ToString()

PowerShell.MCP 可作为灵活的通用基础,补充你现有的 MCP 配置。

强大之处

🖥️ 多客户端架构

  • 每个客户端实例都有自己的专属控制台,可并行运行多个 Claude Code 会话
  • 安全并行运行,不会发生资源冲突
  • 使用唯一的窗口标题(例如,“#12345 Taxi”),便于识别
  • Get-MCPOwner cmdlet 可显示当前控制台所属的客户端

🤝 共享控制台体验

  • 你和 AI 在同一个 PowerShell 会话中协作,过程完全透明
  • AI 执行的每条命令都会实时显示在你的控制台中
  • 你可以直接在控制台中响应交互式提示
  • 在 Windows 上,简短命令会添加到控制台历史记录中——观察 AI 工作,边看边学

🔄 持久会话状态

  • 只需认证一次,即可保持认证状态:Azure、AWS、Microsoft 365 等
  • 模块、变量和函数会在各条命令之间保留
  • 无需重新初始化

🌐 通用访问

🔗 管道组合能力

  • 用自然语言描述你的需求,AI 会构建最优管道
  • “最大的 5 个日志文件” → Get-ChildItem *.log | Sort-Object Length -Descending | Select-Object -First 5
  • 可跨任意服务串联任意命令

⚡ 即时执行

  • 命令会立即在现有控制台中执行
  • 每条命令都无需启动新进程
  • 实时流式输出

🔐 满足企业级需求的安全性

  • 默认使用本地命名管道;仅在启用远程控制期间使用 TCP 端口——可在远程机器上启用(Enable-MCPRemoteControl),也可在本机启用,让 AI 等待控制台发起连接(accept_remote_console)(远程控制)
  • 每条命令都清晰可见,并可通过 Start-Transcript 或 Script Block Logging 记录(审计 AI 会话)
  • 可与现有安全策略集成

🔒 密钥由你掌控,而非交给 AI

  • 交互式提示(Read-Host -AsSecureString、Get-Credential、MFA 代码)会对 AI 隐藏输入
  • 输入代码签名、gpg、ssh-add、sudo、云 CLI MFA 所需的密码短语——按键内容会直接发送给程序,绝不会进入 AI 的输出流
  • AI 负责协调工作流(“构建、签名、推送标签”);你在恰当时机提供密钥
  • 使用通过 stdin 管道输入的 MCP shell 无法做到这一点,因为 AI 必须设法将密钥输入其中

架构

共有 11 个工具——六个用于本机上的控制台,五个用于另一台机器上的控制台;等待操作共用:

工具用途
本机
start_console复用待命控制台,或启动新控制台
get_current_location获取当前目录、可用驱动器和系统信息(操作系统、PowerShell 版本、用户、区域设置)
execute_command执行任意 PowerShell 命令或 CLI 工具(通过 var1–var8 传入原样文本)
wait_for_completion等待繁忙的控制台(本机或远程机器)完成,并收集其缓存的输出
cancel中断当前正在控制台中运行的命令(停止管道并发送 Ctrl+C)
close_console按 PID 终止控制台(例如,在交互式提示符处暂停的控制台),并返回其仍保留的任何输出
另一台机器(远程控制台)
connect_remote_console使用配对码连接到正在侦听的控制台(Enable-MCPRemoteControl)
accept_remote_console允许控制台拨入(适用于位于 NAT 或防火墙之后的机器)——返回要在该机器上运行的 Enable-MCPRemoteControl -ConnectTo 命令,或者在无法安装任何内容时返回一行可粘贴的命令
execute_remote_command在远程控制台中执行命令(超时后才完成的结果会通过 wait_for_completion 或下一次任意类型的工具调用返回)
cancel_remote_command向远程控制台发送 Ctrl+C
disconnect_remote_console断开与某个远程控制台的连接(或停止接受连接)

快速开始

前置条件

所有平台都需要:

  • PowerShell 7.4+(安装指南)
  • Claude Desktop、Claude Code 或任何 MCP 客户端
平台操作系统要求
WindowsWindows 10/11 或 Windows Server 2016+
LinuxUbuntu 22.04+、Debian 11+、RHEL 8+,或 PowerShell 7.4 支持的其他发行版;需要图形桌面以查看控制台
macOSmacOS 12 (Monterey)+,Intel 或 Apple Silicon

Windows 安装
1. 打开 PowerShell 7

按 Win + R,输入 pwsh,然后按 Enter

2. 安装 PowerShell.MCP
Install-PSResource PowerShell.MCP
3. 配置 MCP 客户端

适用于 Claude Code:

Register-PwshToClaudeCode

接下来,它会询问是否禁用 Claude Code 内置的 Bash 和 PowerShell 工具,以便每条命令都在你能看到的控制台中运行(推荐,也是默认选项)。使用 -DisableBuiltInShellTools 或 -KeepBuiltInShellTools 可跳过询问并直接作答。

适用于 Claude Desktop:

Register-PwshToClaudeDesktop

**适用于其他 MCP 客户端:**运行 Get-MCPProxyPath -Escape 获取经过 JSON 转义的可执行文件路径,然后手动将其添加到客户端的配置文件中。

4. 重启 MCP 客户端
Linux 安装
1. 安装 PowerShell 7
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y wget apt-transport-https software-properties-common
source /etc/os-release
wget -q https://packages.microsoft.com/config/ubuntu/$VERSION_ID/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y powershell
2. 安装 PowerShell.MCP、设置权限并配置 MCP 客户端
# Run in PowerShell (pwsh)
Install-PSResource PowerShell.MCP
chmod +x "$(Get-MCPProxyPath)"

适用于 Claude Code:

Register-PwshToClaudeCode

接下来,它会询问是否禁用 Claude Code 内置的 Bash 和 PowerShell 工具,以便每条命令都在你能看到的控制台中运行(推荐,也是默认选项)。使用 -DisableBuiltInShellTools 或 -KeepBuiltInShellTools 可跳过询问并直接作答。

适用于 Claude Desktop:

Register-PwshToClaudeDesktop

**适用于其他 MCP 客户端:**运行 Get-MCPProxyPath -Escape 获取经过 JSON 转义的可执行文件路径,然后手动将其添加到客户端的配置文件中。

3. 重启 MCP 客户端
macOS 安装
1. 安装 PowerShell 7
brew install --cask powershell
# If the cask is unavailable, install from GitHub Release (on an Intel Mac, use osx-x64 instead of osx-arm64):
# curl -sSL -o /tmp/powershell.tar.gz https://github.com/PowerShell/PowerShell/releases/download/v7.5.4/powershell-7.5.4-osx-arm64.tar.gz
# sudo mkdir -p /usr/local/microsoft/powershell/7
# sudo tar zxf /tmp/powershell.tar.gz -C /usr/local/microsoft/powershell/7
# sudo chmod +x /usr/local/microsoft/powershell/7/pwsh
# sudo ln -sf /usr/local/microsoft/powershell/7/pwsh /usr/local/bin/pwsh
2. 安装 PowerShell.MCP、设置权限并配置 MCP 客户端
# Run in PowerShell (pwsh)
Install-PSResource PowerShell.MCP
chmod +x "$(Get-MCPProxyPath)"

对于 Claude Code:

Register-PwshToClaudeCode

随后,它会询问是否禁用 Claude Code 内置的 Bash 和 PowerShell 工具,以便所有命令都在你可见的控制台中运行(推荐,也是默认选项)。使用 -DisableBuiltInShellTools 或 -KeepBuiltInShellTools 可直接作答,无需询问。

对于 Claude Desktop:

Register-PwshToClaudeDesktop

**对于其他 MCP 客户端:**运行 Get-MCPProxyPath -Escape 获取经过 JSON 转义的可执行文件路径,然后手动将其添加到客户端的配置文件中。

3. 重启 MCP 客户端
更新

每个已安装版本都存放在各自的文件夹中,因此 MCP 客户端启动的代理路径会随每次更新而变化。更新后请重新注册,否则客户端会继续启动旧版本的代理,导致命令失败并显示 "PowerShell.MCP.Proxy version is outdated"。

1. 更新模块

打开一个新的 PowerShell 7 窗口(不是 PowerShell.MCP 控制台),然后运行:

Update-PSResource PowerShell.MCP
2. 在另一个新窗口中重新注册

已加载 PowerShell.MCP 的窗口会保留旧版本,因此请再打开一个新窗口,让它加载刚安装的版本:

chmod +x "$(Get-MCPProxyPath)"   # Linux / macOS only: the new proxy needs the execute bit again

Register-PwshToClaudeCode        # Claude Code
Register-PwshToClaudeDesktop     # Claude Desktop

两种方式都会替换现有的 pwsh 条目,并保留其上已设置的参数和环境变量,例如 --no-profile。**对于其他 MCP 客户端:**将配置中的路径替换为 Get-MCPProxyPath -Escape 的输出。

3. 关闭旧控制台并重启 MCP 客户端

关闭 PowerShell.MCP 控制台窗口(标题类似 #12345 Taxi)——每个窗口都会继续运行启动时所用的版本——然后退出并重启 MCP 客户端。

查看已安装的版本,并移除不再被任何控制台使用的版本:

Get-InstalledPSResource PowerShell.MCP
Uninstall-PSResource PowerShell.MCP -Version <old version>

配置

精简控制台(--no-profile)

默认情况下,代理启动的每个控制台都会加载 PowerShell $PROFILE(提示符、别名、PSReadLine、主题)——这些是真正的交互式 Shell,而不仅仅是自动化目标。传入 --no-profile,即可改用 -NoProfile 启动,从而加快启动速度并获得干净、确定的环境。

Claude Code:

claude mcp remove pwsh -s user   # if pwsh is already registered: 'claude mcp add' refuses an existing name
claude mcp add pwsh -s user -- "$(Get-MCPProxyPath)" --no-profile

此后,Register-PwshToClaudeCode 会保留该标志,包括更新后重新注册时。

**Claude Desktop / 其他 MCP 客户端:**在配置中的 pwsh 条目添加包含 --no-profile 的 args 数组(Register-PwshToClaudeDesktop 重新注册时会保留该设置):

"mcpServers": {
  "pwsh": {
    "command": "...PowerShell.MCP.Proxy.exe",
    "args": ["--no-profile"]
  }
}

无论是否设置此标志,无头 / CI 启动器始终使用 -NoProfile。

空闲控制台会自动关闭

当控制台越积越多时,如果某个由工具管理的控制台 10 分钟内既未被 AI 使用,也未被你使用,它会显示警告,并在 60 秒后自行关闭。每个会话中最近使用的控制台始终会保留;正在忙碌、停留在提示符处、仍有尚未收集的输出、提示符处已有输入文本,或存在未完成的后台作业(Start-Job、&)的控制台,绝不会关闭。输入任何内容或执行任何 AI 命令都会取消待关闭操作。子 Agent 启动的控制台(is_subagent=true)不会保留:空闲后会像其他控制台一样关闭,因为已结束的子 Agent 不会再回来使用它。

自行关闭的控制台会留下记录,并由 AI 在下一次工具调用时报告:Console #N was closed: it closed itself after 10 min without use …。因其他原因消失的控制台(窗口关闭、进程结束)也会报告,但不会说明原因。无论哪种情况,报告行都会说明还有什么随之结束:控制台运行的作业会随控制台一起结束,而通过 Start-Process 启动的进程则会继续运行。

一台机器上的多个 AI 会话

每个 MCP 客户端会话都会运行自己的代理,而代理只能看到自己启动或认领的控制台:控制台的管道以拥有它的代理命名,因此两个会话(例如两个 Claude Code 窗口)绝不会共享、借用或关闭彼此的控制台,即使它们注册的是同一个服务也是如此。只有无人认领的控制台可以认领——你自己打开并运行过 Import-Module PowerShell.MCP 的窗口,或代理已退出的窗口。需要控制台的第一个会话会认领它(窗口会显示相应提示)。空闲关闭也按会话分别进行:每个会话都会保留自己最近使用的控制台,某个会话的控制台绝不会计入其他会话。

变量默认值含义
POWERSHELL_MCP_STANDBY_REAP_MINUTES10发出警告前的空闲分钟数;0 表示关闭自动关闭功能
POWERSHELL_MCP_STANDBY_REAP_GRACE_SECONDS60从发出警告到关闭之间的秒数

请将这些设为用户或系统环境变量(Windows:系统属性 → 环境变量,或使用 setx;macOS / Linux:在登录 shell 的配置文件中设置),而不要放在 MCP 客户端的 env 块中。每个控制台都是一个新终端窗口,而非代理的子进程,因此只为代理设置的变量通常不会传递到控制台。

超时上限

阻塞调用的时长上限取决于 MCP 客户端实际会等待多久:Claude Code 为 170 秒,其他客户端为 50 秒。达到上限不会丢失任何内容:命令会继续运行,结果会在下一次工具调用时返回。如果客户端等待时间超过 50 秒,请使用 POWERSHELL_MCP_TIMEOUT_CEILING(秒数,最多 170)提高上限。代理会读取此变量,因此请在 MCP 客户端的 env 块中设置:

"mcpServers": {
  "pwsh": {
    "command": "...PowerShell.MCP.Proxy.exe",
    "env": { "POWERSHELL_MCP_TIMEOUT_CEILING": "120" }
  }
}

使用 Claude Code CLI 时,请将其作为 -e POWERSHELL_MCP_TIMEOUT_CEILING=120 传给 claude mcp add;重新注册时,Register-PwshToClaudeCode 和 Register-PwshToClaudeDesktop 会保留此设置。


在此机器上执行管理员操作

AI 启动的控制台不会以提升权限运行。要执行管理员操作,请以管理员身份打开 PowerShell 7 并运行 Import-Module PowerShell.MCP;然后关闭 AI 自己的控制台(或让 AI 使用 close_console 关闭)。当 AI 自己的控制台全部关闭后,下一个命令会发送到你的提升权限控制台,其标题会显示 Administrator:。该命令会先暂停一次,告知控制台所在位置;随后 AI 会在该控制台中重新执行命令。整个过程不涉及远程控制。

远程控制台(另一台机器)

AI 也可以操控另一台机器上的控制台——例如测试 VM、构建机,或同事的电脑(同事运行 Enable-MCPRemoteControl 并把代码告诉你,见下文)。如果该控制台以提升权限运行,AI 也会获得提升权限,这使其成为一款实用的防御性工作工具:审计服务器、读取其事件日志、检查其对外暴露的内容、加固安全性,并由负责人看着每条命令的执行。

“只读审计这台 VM 的安全性”——针对 Azure 中的一台实验室 VM,通过所有者为一个地址开放的端口连接。一个会话在大约十分钟内,从安全日志(3 小时内有 2,015 次 RDP 登录失败,且未配置账户锁定)开始,检查了本地账户和密码策略,将监听端口与外部可访问范围进行了比对,查看了 SQL Server 的版本和登录模式、Defender、TLS 设置及持久化位置,最后生成了一份报告,供负责该 VM 模板的团队采取行动。这类审查通常会被搁置;攻击者的工具已经实现自动化,而防守方仍存在差距。

在远程机器上安装 PowerShell 7.4+(Windows 上运行 winget install Microsoft.PowerShell;其他平台),然后在 PowerShell 7 中运行:

Install-Module PowerShell.MCP -RequiredVersion <version>   # once; the version your own machine runs — ask the AI
Import-Module PowerShell.MCP
Enable-MCPRemoteControl -AllowFrom 192.168.0.10           # the AI's machine; TCP port 42777 by default, -Port to change

在 Linux 和 macOS 上,远程控制台可以是普通的 SSH 会话——远程端不需要桌面环境。 它会要求你确认——说明 AI 将以哪个用户的身份操作,以及是否使用提升的权限——然后显示配对码(XXXX-XXXX-XXXX,10 分钟内可用于一次连接)、主机名和 IP 地址。把这些信息提供给你机器上的 AI——“使用代码 7Q4K-M2XP-H9RT 连接到远程控制台 192.168.0.20”。它会调用 connect_remote_console,然后使用 execute_remote_command 在那里运行命令:语义与 execute_command 相同(持久会话、var1–var8、文本文件 cmdlet、cancel_remote_command;超出超时时间的命令由与本地命令相同的 wait_for_completion 收集,或在 AI 的下一次工具调用时返回),但使用那台机器上的路径,并在那边的人能看到的窗口中运行。Read-Host 的提示由那边的人回答。AI 连接期间,那边的每个提示符都会以 [AI from <your host>] 开头。

如果远程机器无法接受入站连接(例如 NAT、云 NSG,或无法开放的防火墙),可以反向连接:AI 在你的机器上调用 accept_remote_console,并提供 Enable-MCPRemoteControl -ConnectTo <your-host>:<port> -Code <code>,让你在远程机器上运行。那边只需要建立出站连接;入站端口在你的机器上——Windows 会询问一次是否允许 PowerShell.MCP.Proxy.exe 通过防火墙(对于 LAN 上的机器,允许专用网络即可;你自己机器上的 VM 或 Windows Sandbox 会通过 Hyper-V 虚拟交换机连接,Windows 通常将其视为公用网络)。配对方式相同,只是双方角色互换。

如果无法按常规方式在那边安装 PowerShell 7 和 PowerShell.MCP——例如,那是一台无法访问互联网的 Windows 机器——同样的答复还会提供一行可粘贴的命令,让你在那边的 PowerShell 7 中运行(如果已安装),否则在 Windows PowerShell 中运行。它会从你的机器获取 PowerShell.MCP(与当前安装版本相同),并在尚未安装 PowerShell 7.4+ 时获取便携版 PowerShell 7,同时校验哈希值——远程端无需安装、无需管理员权限,也无需访问互联网。粘贴到 PowerShell 7.4+ 后,远程控制会在同一个窗口中启动,因此如果你以管理员身份打开了控制台,AI 就会在这个控制台中操作;粘贴到 Windows PowerShell(或较旧的 PowerShell 7)后,则会打开一个 PowerShell 7 窗口并拨入。无论哪种方式,控制台都会先要求你确认,然后才拨号。如果你允许 AI 在那里安装 PowerShell 7 和 PowerShell.MCP,以便日后使用(它会先询问:为当前用户还是为所有用户安装),脚本会列出要安装的内容并再次询问;之后只需运行简短的 Enable-MCPRemoteControl 命令即可。这行命令太长,无法手动输入,因此需要能够连接到那台机器的剪贴板。

  • 必须允许远程机器的防火墙放行入站 TCP 42777(监听模式);如果连接失败,AI 会提供一条限定到其地址的 New-NetFirewallRule 命令,以及用于删除该规则的命令。在拨出模式下,需要在你自己的机器上开放端口。
  • 每个控制台一次只能有一个代理。一个代理最多可同时驱动四个远程控制台,每台机器一个——例如,用于比较服务器,或同时处理连接的两端。连接多个控制台时,每次远程工具调用都必须指定其控制台(remote:与之建立连接的主机,或拨入连接的 port N);未指定控制台的调用会被拒绝,绝不会发送到猜测的控制台。连接中断后会自动重新连接。配对码只能使用一次:调用 disconnect_remote_console 后,控制台会显示新的配对码;如果 10 分钟内无人连接,远程控制会自动停止。你可以随时运行 Disable-MCPRemoteControl(或 Remove-Module)来结束远程控制。
  • 监听控制台遇到五次伪造配对尝试后,会结束远程控制(输错配对码不计入)。如果有人通过控制台对配对码的验证后挂断——例如,AI 一侧输错配对码,或者有人收集配对码以便离线猜测——这不会计入,但控制台会显示对方地址(每个地址和配对码仅显示一次;超过三个地址后,剩余情况会合并为一行)。
  • 安全性:使用为当前会话生成的证书进行 TLS,并通过该证书和配对码绑定握手。配对码有意设置为短时有效:任何能访问该端口的人都可以离线尝试猜测配对码。此功能适用于局域网或 VPN——不要将端口暴露到互联网。网络攻击者能做什么、不能做什么:SECURITY.md。
  • 两台机器必须运行相同版本的 PowerShell.MCP。如果版本不同(而且两者都可能不是最新版本),请在两台机器上运行 Update-Module PowerShell.MCP;或者在较旧的机器上运行 Update-Module PowerShell.MCP -RequiredVersion <the newer one's version>。如果 Update-Module 拒绝执行(例如,模块并非通过 Install-Module 安装,而是由单行引导命令安装),请运行 Install-Module PowerShell.MCP -RequiredVersion <that version> -Force。更新自己的机器后,请重启 MCP 客户端。

由人授权,而非擅自启动。 只有当有人在该机器上运行 Enable-MCPRemoteControl,或粘贴命令并回答 Yes,远程控制才会启动。在无人能够回答的环境(服务、没有控制台的脚本、-NonInteractive)中,远程控制会拒绝启动;每条提示都会显示 [AI from <host>],提升权限的窗口标题中会显示 Administrator:。运行 Disable-MCPRemoteControl 可结束远程控制;如果 10 分钟内没有 AI 连接,也会自动结束(期间 AI 所做的更改仍会保留,与任何管理员操作一样)。入侵工具的设计恰恰相反:隐蔽且持久。与任何工具一样,它无法阻止已在机器上运行的代码悄悄启动它——但它不会让这类代码获得原本没有的能力,SECURITY.md 列出了如何发现此类情况。只有在你亲自向 AI 索要命令时才粘贴命令:“将此内容粘贴到 PowerShell”也是诱骗的开场白,而且控制台会在提问中说明将要连接的机器。要在同事的电脑上提供帮助,请使用监听模式,这样就无需把命令交给对方。

攻击者可以写入远程机器上的数据。 事件日志、登录失败记录中的用户名、文件内容、网页:AI 读取这些内容时,读到的是他人选择的文本,且这些文本可能被刻意伪装成指令——AI 拥有该控制台的全部权限,也能访问你的机器。服务器会告知 AI 将其视为数据,并且只能连接你输入的主机和配对码。请仅与信任到这种程度的机器配对;进行审计和事件响应时,先要求进行只读操作,并让 AI 在任何更改前确认;如需保留记录,请在配对前于远程控制台运行 Start-Transcript(参见审计 AI 会话)。

首次体验演示

体验 PowerShell.MCP 的功能:

  • “打开 pwsh,用丰富多彩、动感有趣的演示展示它的功能”
  • “使用 BurntToast 模块尝试不同风格的通知”
  • “自动操作记事本:输入文本,并让窗口平滑地绕圈移动”
  • “现在有了 PowerShell.MCP 这样的工具,感觉如何?”

尝试这些演示后,可以试试下面的内置提示词,也可以让 AI 解释任何命令。

内置提示词

PowerShell.MCP 内置 2 个提示词,可教会 AI 原本并不了解的工作流(一个配套模块和内置语音合成器)。在 Claude Code 中,将想要的内容作为参数,通过斜杠命令运行:

/pwsh:show_interactive_map hot springs in Kanto
/pwsh:foreign_language_dictation English, short sentences, normal speed

参数可选;不提供参数时,AI 会询问你想要什么。其他 MCP 客户端会在提示词列表中提供这些提示词,前提是客户端会显示 MCP 提示词。


🗣️ 外语听写训练

最适合: 提升外语听力技能

通过 PowerShell 控制台朗读句子,并检查你输入的内容。仅限 Windows(使用内置语音合成器)。

示例: /pwsh:foreign_language_dictation English dictation at beginner level • /pwsh:foreign_language_dictation Japanese conversation at the zoo


🗺️ 显示交互式地图

最适合: 可视化地理数据或地点

使用 PowerShell.Map 模块生成带有标记、描述和可选 3D 显示的交互式 HTML 地图。

示例: /pwsh:show_interactive_map major Roman battles in chronological order • /pwsh:show_interactive_map hot springs in Japan

罗马战役地图
罗马战役地点
斗兽场 3D 视图
斗兽场 3D 可视化

平台说明

Windows
  • 自动加载 PSReadLine 模块,提供增强的控制台体验
  • 完整支持 PowerShell 输出的色彩
Linux
  • 需要 GUI 桌面环境(GNOME、KDE、XFCE 等)才能查看并在控制台中输入。没有受支持的终端模拟器时,控制台仍会以无头模式启动:AI 可以运行命令,但没有可供查看或输入的窗口。
  • 支持的终端模拟器:gnome-terminal、konsole、xfce4-terminal、xterm、lxterminal、mate-terminal、terminator、tilix、alacritty、kitty
  • PSReadLine 会由模块自带的简易行编辑器取代:在 Linux 上,PSReadLine 会在提示符等待输入时阻止运行 AI 命令的计时器触发
macOS
  • 支持 Terminal.app(默认)
  • 出于与 Linux 相同的原因,PSReadLine 会由模块自带的简易行编辑器取代
  • 支持 Apple Silicon(M1/M2/M3/M4)和 Intel Mac

局限性

  • AI 命令取消:AI 可以使用 cancel 工具中断正在运行的命令——该工具会停止失控或长时间运行的 PowerShell 管道,并向原生 CLI 发送 Ctrl+C。若命令卡在无法中断的阻塞调用中,或控制台暂停在交互式提示处,则无法通过这种方式停止——请使用 close_console 工具放弃该命令。
  • 用户命令隐私:你执行的命令不会对 AI 助手可见。
  • 外部命令颜色:某些 CLI 工具的彩色输出可能无法保留(支持 git 的颜色)。
  • 命令历史:在 Windows 上,AI 执行的单行或两行命令会添加到控制台的 PSReadLine 历史记录中;为避免历史记录过于庞大,更长的多行命令会被排除。在 Linux 和 macOS 上,AI 执行的命令不会添加到历史记录中。
  • 启动时读取控制台的程序(Windows):Windows 允许同一时间只有一个读取器从控制台输入缓冲区读取内容,而提示会在 AI 命令运行期间一直占用读取器。因此,启动时探测控制台输入的程序会排在提示之后,直到按下某个按键才会返回。这种情况很少见——常见的 CLI(git、node、npm、python、dotnet、curl、ssh)不受影响;LilyPond 是已知的例外。请将此类程序作为分离进程运行,并将其标准输入重定向到 NUL:cmd /d /s /c "<command> < NUL > out.log 2>&1"。发生超时后,控制台会显示卡住的进程名称,并重复给出此命令格式。请参阅 docs/Console-Input-Starvation.md。

企业部署(WDAC / Device Guard)

自 v1.7.7 起,PowerShell.MCP.dll 和 PowerShell.MCP.Proxy.exe (win-x64) 均使用 yotsuda 代码签名 证书进行 Authenticode 签名,该证书由所有 yotsuda OSS 项目共用。

有关安装说明(个人电脑、AD GPO 部署、WDAC 策略配置)以及公开证书文件本身,请参阅:

→ github.com/yotsuda/code-signing

证书指纹也会发布在每个 GitHub 版本的说明中。

# Quick verify on installed binaries
Get-AuthenticodeSignature (Get-MCPProxyPath)   # the proxy of the version this window loaded

免责声明

本软件按“原样”提供,不附带任何明示或暗示的保证。 作者不对因使用本软件而造成的任何损害承担责任。

许可证

MIT 许可证——详情请参阅 LICENSE。

作者

Yoshifumi Tsuda


用于企业用途时,请确保遵守所在组织的安全策略。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。