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
相关产品推荐
相关产品推荐

