在Azure Devops中将变量值从一个PowerShell任务转移到另一个

时间:2020-08-11 22:40:28

标签: powershell azure-devops azure-powershell

我正在处理要从第一个脚本获取结果并相应运行第二个脚本的脚本。

这是我的第一个脚本-

$ result = <命令1>

if($ result)

{

<运行命令2>

返回$ true

}

其他 {

返回 $ false

}

这是第二个脚本

if($ return -eq $ true)

{

<运行命令3>

}

其他{

<运行命令4>

}

我在Azure Devops中有2个单独的任务来执行这两个脚本。

我正在管道和输出变量中使用Azure PowerShell任务-return

Que-第一个脚本效果很好。它返回的是真还是假值,但是第二个脚本不起作用。它只是预执行其他条件,确定第一个脚本的返回值是true还是false。 如何根据第一个脚本返回的真假结果使第二个脚本工作

2 个答案:

答案 0 :(得分:0)

如果这些是真正独立的脚本,则需要将返回值保存到变量中,以保留第一个脚本中的值,以供第二个脚本处理。我很惊讶您没有收到错误消息:

PS> .\Test\Get-RetVal.ps1 -RetVal $True  #Equiv of Script 1
True

#Equiv of Script 2
PS> If ($RetVal) {
  "Previous Return Value = $RetVal`n" +
  "Execute Command 3"
}
Else {
  "Previous Return Value = $RetVal`n" +
  "Execute Command 4"

}

#Script 2 Output w/o saved Variable

The variable '$RetVal' cannot be retrieved because it has not been set.
At line:1 char:5
+ If ($RetVal) {
+     ~~~~~~~
    + CategoryInfo          : InvalidOperation: (RetVal:String) [], RuntimeExc 
   eption
    + FullyQualifiedErrorId : VariableIsUndefined
 
#Saving the Value
PS> $RetVal = .\Test\Get-RetVal.ps1 -RetVal $True

#Rerun Script 2 when saved value = True

#Script 2 Output:
Previous Return Value = True
Execute Command 3

#Rerun Script 1 to set $RetVal to False
PS> $RetVal = .\Test\Get-RetVal.ps1 -RetVal $False

#Rerun Script 2 when saved value = False

#Script 2 Output:
Previous Return Value = False
Execute Command 4

PS> 

如果不是上述情况,则需要发布更多的实际脚本

HTH

答案 1 :(得分:0)

由于它们是两个独立的任务,因此您需要设置一个变量来保存第一个脚本结果,然后可以在第二个任务中使用该值。

以下是在Azure Devops中设置变量的脚本:

echo "##vso[task.setvariable variable=variablename;]value"

您可以将此脚本添加到If statement

这里是一个例子:

Azure PowerShell任务1

$result = command 1

if($result)

{

 echo "##vso[task.setvariable variable=testvar;]$true"    
   return $true
    
}

else {

    echo "##vso[task.setvariable variable=testvar;]$false"    
    return $false 

}

在此脚本中,它将根据条件创建管道变量。然后在第二个powershell任务中,您可以使用$variablename来获取它。

Azure PowerShell任务2

例如:

if($testvar = $true)

{
   <run Command 3>
}

else{

<run command 4>

}