我正在尝试从子目录中的另一个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创建管道。
答案 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.DefaultWorkingDirectory
,C:\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.DefaultWorkingDirectory
和System.TeamProject
传递到main_script.ps1
中的test.ps1
:
我的powershell任务:
然后测试结果: