Как я могу получить задачу для установки переменной, которую можно использовать в конфигурации?

В VS Code я определил задачу:

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

GetCredentials.ps1 создает учетные данные и назначает их $Global:credential.

В launch.json я хочу использовать $Global:credential в качестве аргумента для фактического сценария, который я отлаживаю:

    "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 говорит, что используется среда родительского процесса, если среда не указана.

Любая идея, что мне не хватает, или это невозможно?


person yltlatl    schedule 13.07.2018    source источник
comment
У меня очень мало опыта работы с Visual Studio. Отдельные задачи запускаются как отдельные процессы? В этом случае передача переменных между задачами не будет работать, потому что вы не можете передавать (PowerShell) переменные через границы процесса.   -  person Ansgar Wiechers    schedule 13.07.2018


Ответы (1)


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.

Кроме того, родительская среда процесса, о которой идет речь, является собственным блоком переменных среды Visual Studio.

Другими словами:

  • Поскольку сеанс PS task завершился к моменту запуска сеанса отладки PS, вы не можете передавать переменные между двумя сеансами.

  • Даже попытка установить переменные среды в сеансе задачи PS не сработает, поскольку оба сеанса запускаются с VS Code в качестве родительского процесса и не могут видеть изменения среды друг друга.


Лучше всего использовать (временные) файлы для передачи значений из сеанса задачи в сеанс отладки.

См. этот ответ, чтобы узнать, как сохранить и восстановить учетные данные из файла.
Предупреждение : работает только в Windows.

Выберите расположение файла (в простейшем случае с фиксированным именем, например, $HOME/.test-creds.clixml), в которое сеанс задачи записывает, а сеанс отладки затем читает, по строкам:

"args": [ "-Credential (Import-CliXml $HOME/.test-creds.clixml)" ],
person mklement0    schedule 13.07.2018
comment
Это сработало как шарм, спасибо mklement0! Не знал, что вы можете запускать код в args. Это намного проще, чем то, что я пытался сделать. - person yltlatl; 17.07.2018
comment
@yltlatl: С удовольствием; рад слышать, что это было полезно. - person mklement0; 17.07.2018