如何在Azure DevOps流水线中定义列表变量供PowerShell调用
Azure DevOps多值列表变量定义及PowerShell访问方法
定义承载多值的列表类变量
Azure DevOps流水线原生没有专门的数组/列表类型变量,通用实现方式是将列表元素用统一分隔符拼接为字符串存储,使用时再拆分还原为数组,按定义方式分为两类:
经典UI发布流水线定义
- 进入发布流水线编辑界面,打开「变量」标签页
- 新增变量,例如命名为
LanguageList,值填写用分隔符拼接的列表内容,示例:zh-CN,en-US,ja-JP,ko-KR,推荐用逗号、分号等无特殊含义的字符作为分隔符 - 勾选「可在所有阶段使用」选项,保证多阶段都能读取到该变量
YAML流水线定义
直接在全局variables段声明即可,示例:
variables: # 全局多值列表变量,所有阶段/任务均可访问 LanguageList: 'zh-CN,en-US,ja-JP,ko-KR'
如果需要跨流水线复用,也可以将该变量存入变量组,使用方式和普通字符串变量完全一致。
PowerShell中访问及遍历的语法
流水线变量传入PowerShell环境后为字符串类型,先拆分再遍历即可,有两种常用读取方式:
方式1:通过环境变量读取(推荐,inline和文件脚本都支持)
PowerShell会自动将流水线变量转为全大写、点替换为下划线的环境变量,示例代码:
# 读取变量并按逗号拆分为数组 $languages = $env:LANGUAGELIST -split ',' # 遍历列表执行逻辑 foreach ($lang in $languages) { Write-Host "当前处理语言:$lang" # 此处补充对应业务代码 }
方式2:通过流水线宏语法读取(仅支持inline脚本)
直接用$(变量名)的宏格式引用,在脚本执行前会自动替换为变量值:
$languages = '$(LanguageList)' -split ',' foreach ($lang in $languages) { Write-Host "当前处理语言:$lang" }
注意:如果你的列表元素本身包含逗号,可以换用竖线
|等其他分隔符,定义变量和拆分时统一分隔符即可。
内容的提问来源于stack exchange,提问作者Gunilla
相关产品推荐
相关产品推荐

