Azure流水线YAML的inline PowerShell脚本中能否定义使用函数?
问题解答
这个需求完全可以实现,你当前的写法错误是由PowerShell的执行顺序规则导致的。
PowerShell执行脚本时是从上到下逐行解析运行的,你在代码里先写了Do-Something的调用逻辑,再写Do-Something的函数定义,运行到调用行时函数还没有被注册到当前会话中,因此会抛出命令未找到的错误。
你只需要调整代码顺序,把函数定义放在所有调用语句的前面即可,修正后的示例如下:
- task: AzureCLI@2 displayName: "My Task" inputs: scriptType: pscore scriptLocation: inlineScript inlineScript: | # 先定义函数 function Do-Something { Param ( [Parameter(Mandatory=$true, Position=0)] [string] $Hello, [Parameter(Mandatory=$true, Position=1)] [string] $World ) Write-Host "$Hello $World" } # 再调用函数 Do-Something "hello" "world" Do-Something "goodbye" "world"
如果后续封装的公共函数较多,也可以将函数单独存为.ps1脚本文件上传到代码库,在inline脚本开头用点加载语法. ./common-func.ps1批量导入所有函数,进一步简化inline部分的代码量。
内容的提问来源于stack exchange,提问作者oclipa
相关产品推荐
相关产品推荐

