powershell - 如何获得设置可在配置中使用的变量的任务?
问题描述
在 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说如果没有指定环境,则使用父进程环境。
知道我错过了什么,或者这是不可能的吗?
解决方案
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任务会话在 PS 调试会话开始时已退出,因此您无法在两个会话之间传递变量。
即使尝试在您的 PS 任务会话中设置环境变量也行不通,因为两个会话都以 VS Code 作为父进程运行,并且看不到彼此的环境修改。
您最好的选择是使用(临时)文件将值从任务会话传递到调试会话。
有关如何从文件保存和恢复凭据的信息,请参阅此答案。
警告:仅适用于 Windows。
选择任务会话写入的文件位置(在最简单的情况下,使用固定名称,例如$HOME/.test-creds.clixml
),然后调试会话从中读取,如下所示:
"args": [ "-Credential (Import-CliXml $HOME/.test-creds.clixml)" ],
推荐阅读
- c - 如何获取调用当前函数的函数名?
- php - 如何在 Laravel 中定义关系并获取所有有关系的记录?
- c - fgetc 功能无法正常工作
- python - 属性与前面的属性赋值操作的右侧值不同
- react-native - Expo AuthSession 只有一半工作......将获取代码但在获得令牌后不会重定向
- multithreading - 我将如何以受控方式停止 std::thread
- javascript - 下拉菜单没有定位校正和悬停文本移动
- python - Py2neo (V4) - CypherSyntaxError: 变量 `$x` 未定义
- qt - Supercollider QT5 布局问题
- css - 页面内容超出窗口宽度