You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure发布管道向PowerShell脚本传递变量未达预期效果

问题根源

Azure DevOps管道传递的变量本质是字符串类型,而非PowerShell数组。当你在管道中设置FoldersName为ConsoleApps,WebDeployParameters、FileExtensions为.xml,.config,.asax时,$env:FoldersName和$env:FileExtensions拿到的是完整的逗号分隔字符串,不是本地测试时的数组对象,导致-in运算符无法正确匹配。

解决方法

需要先将管道传递的字符串变量转换为PowerShell数组,再用于Where-Object判断:

$path = "$($env:DropLocation)\$($env:CurrentRelease)"

# 将逗号分隔的字符串拆分为数组,同时去除可能存在的空格
$targetFolders = $env:FoldersName -split ',' | ForEach-Object { $_.Trim() }
$targetExtensions = $env:FileExtensions -split ',' | ForEach-Object { $_.Trim() }

$Names = Get-ChildItem -Path $path | 
    Where-Object { ($_.Name -in $targetFolders) -or ($_.Extension -in $targetExtensions) } 

Write-Host $Names
补充说明
  • 本地测试时你直接定义的是PowerShell数组($FoldersName = "ConsoleApps","WebDeployParameters"),这种写法会创建数组对象,所以-in能正常工作;但管道变量无法直接传递数组,只能通过字符串转数组的方式处理。
  • 如果你的文件夹/扩展名包含逗号,可改用其他分隔符(比如分号;),同时调整-split的参数(如-split ';')。

内容的提问来源于stack exchange,提问作者Capri82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:54:26