如何获得一项任务来设置可以在配置中使用的变量?

时间:2018-07-13 03:12:05

标签: powershell visual-studio-code vscode-tasks

在VS Code中,我定义了一个任务:

"tasks": [
    {
        "label": "getcredentials",
        "type": "shell",            
        "command": ".\\TestScripts\\GetCredentials.ps1"
    }
]

GetCredentials.ps1创建一个凭据,并将其分配给$ Global:credential。

在launch.json中,我想将$ Global:credential用作我要调试的实际脚本的arg:

    "configurations": [
        {
            "type": "PowerShell",
            "request": "launch",
            "name": "Exchange Parameter Set, No Inactive",
            "preLaunchTask": "getcredentials",
            "script": "${file}",
            "args": [ "-Credential $Global:credential"],
            "cwd": "${file}"
        }
]

但是,该脚本未获得$ Global:credential的值(而是提示输入凭据)。我认为这应该可行,因为https://code.visualstudio.com/docs/editor/tasks-appendix表示如果未指定环境,则使用父流程环境。

知道我想念的东西吗,还是不可能?

1 个答案:

答案 0 :(得分:0)

https://code.visualstudio.com/docs/editor/tasks-appendix关于任务定义中的可选env键的状态:

   /**
     * The environment of the executed program or shell. If omitted
     * the parent process' environment is used.
     */

这与环境变量有关,而不与PowerShell 会话有关。

此外,所引用的 parent 流程环境是Visual Studio自己的环境变量块。

换句话说:

  • 由于PS task 会话在PS调试会话开始时已经退出,因此无法在两个会话之间传递变量。

  • 即使在PS任务会话中尝试设置环境变量都将失败,因为这两个会话均以VS Code作为父进程运行,并且无法看到彼此的环境修改。 / p>


最好的选择是使用(临时)文件将值从任务会话传递到调试会话。

有关如何保存文件和从文件还原凭据的信息,请参见this answer
注意事项:仅在 Windows 上工作。

选择任务会话写入的文件位置(在最简单的情况下,使用固定名称,例如$HOME/.test-creds.clixml),然后按照以下方式从中读取调试会话:

"args": [ "-Credential (Import-CliXml $HOME/.test-creds.clixml)" ],