如何在azure devops中调用另一个目录的Powershell脚本

时间:2020-10-28 04:41:42

标签: powershell azure-devops azure-pipelines

我正在尝试从子目录中的另一个Powershell脚本调用Powershell脚本。目录结构如下:

main_script.ps1
./Test:
.  ..  test.ps1

所以我正在从test.ps1调用main_script.ps1,如下所示:

#Call the main script
../main_script.ps1

当我从具有相同结构的云外壳执行此操作时,我可以成功调用main_script.ps1脚本。但是在天蓝色的devops中,我遇到以下错误:

##[error]The term '../main_script.ps1' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

您对正确的路径有任何想法吗? Azure devops任务的默认路径是什么?我正在使用Azure Devops Release创建管道。

2 个答案:

答案 0 :(得分:1)

看起来workingDirectory只是追加到脚本名称之后,而没有更改根目录。您可以内联克服此调用脚本:

steps:
- task: PowerShell@2  # this doesn't work
  continueOnError: true
  inputs:
    targetType: 'filePath' # Optional. Options: filePath, inline
    filePath: 'test.ps1'
    workingDirectory:  '$(Build.SourcesDirectory)/stackoverflow/77-powershell/'

- task: PowerShell@2 # this works
  continueOnError: true
  inputs:
    targetType: 'inline' # Optional. Options: filePath, inline
    script: |
        cd '$(Build.SourcesDirectory)/stackoverflow/77-powershell/'
        ./test.ps1

答案 1 :(得分:1)

您对正确的路径有任何想法吗? Azure devops任务的默认路径是什么?

由于您是要创建管道的Azure Devops 发布,因此,天蓝色devops任务的默认路径应为System.DefaultWorkingDirectoryC:\agent\_work\r1\a

但是,我们的powershell脚本应位于以下路径:

System.DefaultWorkingDirectory \ _System.TeamProject

因此,要在main_script.ps1中调用test.ps1,我们可以使用以下脚本来实现:

Param(
 [String]$Workfolder,
 [String]$TeamProject
    )

echo $Workfolder

Invoke-Expression "$Workfolder\_$TeamProject\main_script.ps1"

注意:请勿忽略下划线_

重要的是将参数System.DefaultWorkingDirectorySystem.TeamProject传递到main_script.ps1中的test.ps1

我的powershell任务:

enter image description here

然后测试结果:

enter image description here