使用 Visual Studio Code 进行 PowerShell 开发

Visual Studio Code(VS Code)是Microsoft的跨平台脚本编辑器。 它与 PowerShell 扩展一起提供丰富的交互式脚本编辑体验,使编写可靠的 PowerShell 脚本更加轻松。 使用 PowerShell 扩展的 Visual Studio Code 是编写 PowerShell 脚本的建议编辑器。

它支持以下 PowerShell 版本:

  • PowerShell 7.2 及更高版本(Windows、macOS 和 Linux)
  • Windows PowerShell 5.1(仅限 Windows)和 .NET Framework 4.8

注意

Visual Studio Code 与 Visual Studio不同。

入门指南

在开始之前,请确保系统上存在 PowerShell。 有关 Windows、macOS 和 Linux 上的新式工作负载,请参阅以下链接:

有关传统的 Windows PowerShell 工作负载,请参阅 安装 Windows PowerShell

重要

Windows PowerShell ISE 仍可用于 Windows。 但是,这个功能不再处于积极开发阶段。 ISE 仅适用于 PowerShell 5.1 及更早版本。 作为 Windows 的一个组件,它将继续得到正式支持,以用于安全和高优先级的服务修复。 我们没有计划从 Windows 中删除 ISE。

安装 VS Code 和 PowerShell 扩展

  1. 安装 Visual Studio Code。 有关详细信息,请参阅设置 Visual Studio Code 概述。

    每个平台都有安装说明:

  2. 安装 PowerShell 扩展。

    1. 在控制台中键入 code 来启动 VS Code 应用,或者,如果您安装了 Visual Studio Code 预览版,请键入 code-insiders
    2. 在 Windows 或 Linux 中,通过按 Ctrl+P启动 快速打开。 在 macOS 上,按 Cmd+P
    3. 在 Quick Open 中,键入 ext install powershell,然后按 Enter
    4. 扩展视图随即在侧边栏上打开。 从 Microsoft 中选择 PowerShell 扩展。
    5. 在 Microsoft 的 PowerShell 扩展上,单击“安装”按钮。
    6. 安装后,如果看到 “安装”按钮变为 重新加载,请单击 重新加载
    7. 重新加载 VS Code 后,即可进行编辑。

例如,若要创建新文件,请单击 文件 > 新建。 若要保存它,请单击 文件 > 保存,然后提供文件名,例如 HelloWorld.ps1。 若要关闭该文件,请单击文件名旁边的 X。 若要退出 VS Code,请单击文件 > 退出

在受限系统上安装 PowerShell 扩展

某些系统设置为要求验证所有代码签名。 可能会收到以下错误:

Language server startup failed.

当 PowerShell 的执行策略由 Windows 组策略设置时,可能会出现此问题。 若要手动批准适用于 VS Code 的 PowerShell 编辑器服务和 PowerShell 扩展,请打开 PowerShell 提示符并运行以下命令:

Import-Module $HOME\.vscode\extensions\ms-vscode.powershell*\modules\PowerShellEditorServices\PowerShellEditorServices.psd1

你被提示 你是否想要运行来自此不受信任发布者的软件? 输入 A 来运行该文件。 然后,打开 VS Code 并验证 PowerShell 扩展是否正常运行。 如果在开始使用时仍有问题,请在 GitHub 问题中告诉我们。

选择要用于扩展的 PowerShell 版本

通过 PowerShell 与 Windows PowerShell 并行安装,现在可以将特定版本的 PowerShell 与 PowerShell 扩展配合使用。 此功能查看不同作系统上的一些已知路径,以发现 PowerShell 的安装。

使用以下步骤选择版本:

  1. 在 Windows 或 Linux 上,使用 Ctrl+Shift+P 打开命令面板。 在 macOS 上,使用 Cmd+Shift+P
  2. 搜索会话
  3. 单击 PowerShell:显示会话菜单
  4. 从列表中选择要使用的 PowerShell 版本。

如果将 PowerShell 安装到非典型位置,则它可能不会最初显示在“会话”菜单中。 可以通过 添加自己的自定义路径 来扩展会话菜单,如下所示。

还可以从状态栏右下角的 {} 图标访问 PowerShell 会话菜单。 将鼠标悬停或选择此图标将显示会话菜单和小图钉图标的快捷方式。 如果您选择图钉图标,版本号将添加到状态栏中。 版本号作为会话菜单的快捷方式,可以减少点击次数。

备注

固定版本号会复制 VS Code 1.65 版本之前的扩展的行为。 VS Code 的 1.65 版本更改了 PowerShell 扩展使用的 API,并标准化了语言扩展的状态栏。

Visual Studio Code 的配置设置

首先,如果不熟悉如何在 VS Code 中更改设置,我们建议阅读 Visual Studio Code 的设置 文档。

阅读文档后,可以在 settings.json中添加配置设置。

{
    "editor.renderWhitespace": "all",
    "editor.renderControlCharacters": true,
    "files.trimTrailingWhitespace": true,
    "files.encoding": "utf8bom",
    "files.autoGuessEncoding": true
}

如果不希望这些设置影响所有文件类型,VS Code 还允许每种语言配置。 通过将设置放在 [<language-name>] 字段中来创建特定于语言的设置。 例如:

{
    "[powershell]": {
        "files.encoding": "utf8bom",
        "files.autoGuessEncoding": true
    }
}

提示

有关 VS Code 中的文件编码的详细信息,请参阅 了解文件编码。 此外,请查看 如何复制 VS Code 中的 ISE 体验,获取有关如何为 PowerShell 编辑配置 VS Code 的其他提示。

将自己的 PowerShell 路径添加到会话菜单

可以通过 Visual Studio Code 设置将其他 PowerShell 可执行路径添加到会话菜单powershell.powerShellAdditionalExePaths

可以使用 GUI 执行此作:

  1. 命令面板 搜索并选择 打开用户设置。 或使用 Windows 或 Linux 上的键盘快捷方式,Ctrl+。 在 macOS 上,使用 Cmd+
  2. 设置 编辑器中,搜索 PowerShell 其他 Exe 路径
  3. 单击 添加项
  4. 对于 密钥(在 下),请为此额外的 PowerShell 安装提供你选择的名称。
  5. 对于 (在 下),请提供可执行文件本身的绝对路径。

可以根据需要添加任意数量的其他路径。 添加的项显示在会话菜单中,以给定的键作为名称。

或者,可以将键值对添加到 settings.json 中的对象 powershell.powerShellAdditionalExePaths

{
    "powershell.powerShellAdditionalExePaths": {
        "Downloaded PowerShell": "C:/Users/username/Downloads/PowerShell/pwsh.exe",
        "Built PowerShell": "C:/Users/username/src/PowerShell/src/powershell-win-core/bin/Debug/net6.0/win7-x64/publish/pwsh.exe"
    },
}

注意

在扩展版本 2022.5.0 之前,此设置是具有所需键 exePathversionName的对象列表。 引入了重大变更,以支持通过图形用户界面进行配置。 如果之前已配置此设置,请将其转换为新格式。 versionName 给定的值现在是 exePath 给定的值现在是 。 可以通过重置值和使用“设置”接口来更轻松地执行此作。

若要设置默认的 PowerShell 版本,请将值 powershell.powerShellDefaultVersion 设置为会话菜单中显示的文本(用作键的文本):

{
    "powershell.powerShellAdditionalExePaths": {
        "Downloaded PowerShell": "C:/Users/username/Downloads/PowerShell/pwsh.exe",
    },
    "powershell.powerShellDefaultVersion": "Downloaded PowerShell",
}

配置此设置后,请重启 VS Code 或从 命令面板重新加载当前 VS Code 窗口,键入 Developer: Reload Window

如果打开会话菜单,现在会看到其他 PowerShell 安装。

提示

如果从源生成 PowerShell,这是测试 PowerShell 本地生成的好方法。

使用 Visual Studio Code 进行调试

无工作区调试

在 VS Code 版本 1.9(或更高版本)中,可以调试 PowerShell 脚本,而无需打开包含 PowerShell 脚本的文件夹。

  1. 选择文件 > 打开文件... 打开 PowerShell 脚本文件
  2. 设置断点 - 选择一行,然后按 F9
  3. F5 开始调试

此时应出现“调试”操作窗格,通过该窗格可以中断调试器、执行、继续和停止调试。

工作区调试

工作区调试是指在从文件 菜单中使用打开文件夹...选项打开的文件夹进行调试。你打开的文件夹通常是你的 PowerShell 项目文件夹或 Git 仓库的根目录。 通过工作区调试,可以定义多个调试配置,而不仅仅是调试当前打开的文件。

按照以下步骤创建调试配置文件:

  1. Ctrl+Shift+D打开 Windows 或 Linux 上的 调试 视图。 在 macOS 上,按 Cmd+Shift+D

  2. 单击创建 launch.json 文件链接。

  3. 选择环境提示框中,选择 PowerShell

  4. 选择要使用的调试类型:

    • 启动当前文件 - 启动和调试当前活动编辑器窗口中的文件
    • 启动脚本 - 启动和调试指定的文件或命令
    • 交互式会话 - 从集成式控制台执行的调试命令
    • 附加 - 将调试器附加到正在运行的 PowerShell 主机进程

VS Code 会在工作区文件夹的根目录中创建一个目录和一个文件 .vscode\launch.json 来存储调试配置。 如果文件位于 Git 存储库中,通常需要提交 launch.json 文件。 launch.json 文件的内容包括:

{
  "version": "0.2.0",
  "configurations": [
      {
          "type": "PowerShell",
          "request": "launch",
          "name": "PowerShell Launch (current file)",
          "script": "${file}",
          "args": [],
          "cwd": "${file}"
      },
      {
          "type": "PowerShell",
          "request": "attach",
          "name": "PowerShell Attach to Host Process",
          "processId": "${command.PickPSHostProcess}",
          "runspaceId": 1
      },
      {
          "type": "PowerShell",
          "request": "launch",
          "name": "PowerShell Interactive Session",
          "cwd": "${workspaceRoot}"
      }
  ]
}

此文件表示常见的调试方案。 在编辑器中打开此文件时,会看到 “添加配置...” 按钮。 可以单击此按钮添加更多 PowerShell 调试配置。 要添加的一个有用配置是 PowerShell:启动脚本。 使用此配置,可以指定包含可选参数的文件,无论哪个文件在编辑器中处于活动状态,只要按 F5,即可使用。

建立调试配置后,可以选择在调试会话期间要使用的配置。 从调试视图工具栏的调试配置下拉菜单中选择配置。

PowerShell 扩展疑难解答

如果使用 VS Code 进行 PowerShell 脚本开发时遇到任何问题,请参阅 GitHub 上的 故障排除指南

有用的资源

有一些视频和博客文章可能有助于开始使用适用于 VS Code 的 PowerShell 扩展:

视频

博客文章

PowerShell 扩展项目源代码

可以在 GitHub 中找到 PowerShell 扩展的源代码。

如果你有兴趣参与,将极大改进拉取请求。 请参考 GitHub 上的 开发人员文档 来入门。