如何在Azure DevOps管道中将Json变量传递给命令行任务?

如何在Azure DevOps管道中将Json变量传递给命令行任务?,azure,azure-devops,Azure,Azure Devops,我正在Powershell任务中填充管道变量,并且正在成功填充该变量: $env:RESULTJSON=$json Write-host "##vso[task.setvariable variable=testJSON]$json" 但是,当我尝试使用它在命令行任务中传递值时,我无法这样做: task: CmdLine@2 env: InputJSON: $(testJSON) inputs:

我正在Powershell任务中填充管道变量,并且正在成功填充该变量:

    $env:RESULTJSON=$json
Write-host "##vso[task.setvariable variable=testJSON]$json"
但是,当我尝试使用它在命令行任务中传递值时,我无法这样做:

    task: CmdLine@2 
    env:     
      InputJSON: $(testJSON)    
    inputs:      
    script:
        echo %INPUTJSON%        
        'jsonProcessor.exe $(Build.BuildID),%INPUTJSON%'    
    workingDirectory: './jsonProcExe/'
我在testJSON中得到的只是“{”,而不是整个JSON值

我无法获取resultJson的值

1.如果
resultJson
是默认值,则应使用
InputJSON:$(resultJson)
而不是
InputJSON:$($resultJson)

假设管道变量
resultJSON
的值为100,那么管道中的所有任务都可以得到它的值100。您可以使用
$env:resultJSON=$json
Task
范围内修改它的值,那么这个变量的值将是该PS任务中的
$json
的值

但请注意:其他任务将获得100而不是
$json
的值(区分管道范围和任务范围之间的差异)

2.如果
resultJson
是PS任务中定义的变量,则其他任务无法访问其值,因为该变量仅在当前会话中有效(您可以添加第二个PS任务来测试它)

要跨多个任务/步骤定义变量,可以在PS任务中使用,请选中

更新1 logging命令不直接支持Json格式变量,所以在定义变量之前需要将其转换为一行:

$json=$json| ConvertTo-Json -Compress
Write-host "##vso[task.setvariable variable=testJSON]$json"
更新2 另一个方向是通过文件传递json数据。例如,第一个PS任务使用
$json | Out file Test.json
将内容输出到Test.json文件。下一个PS任务使用
$Input=Get content Test.json
Write Host$Input
显示值。另外,第二个任务可以是cmd任务,它们的(PS任务、CMD任务)默认工作目录相同

我无法获取resultJson的值

1.如果
resultJson
是默认值,则应使用
InputJSON:$(resultJson)
而不是
InputJSON:$($resultJson)

假设管道变量
resultJSON
的值为100,那么管道中的所有任务都可以得到它的值100。您可以使用
$env:resultJSON=$json
Task
范围内修改它的值,那么这个变量的值将是该PS任务中的
$json
的值

但请注意:其他任务将获得100而不是
$json
的值(区分管道范围和任务范围之间的差异)

2.如果
resultJson
是PS任务中定义的变量,则其他任务无法访问其值,因为该变量仅在当前会话中有效(您可以添加第二个PS任务来测试它)

要跨多个任务/步骤定义变量,可以在PS任务中使用,请选中

更新1 logging命令不直接支持Json格式变量,所以在定义变量之前需要将其转换为一行:

$json=$json| ConvertTo-Json -Compress
Write-host "##vso[task.setvariable variable=testJSON]$json"
更新2
另一个方向是通过文件传递json数据。例如,第一个PS任务使用
$json | Out file Test.json
将内容输出到Test.json文件。下一个PS任务使用
$Input=Get content Test.json
Write Host$Input
显示值。另外,第二个任务可以是cmd任务,它们的(PS任务,CMD任务)默认工作目录是相同的。

这有帮助吗?什么是
resultJSON
?从哪里来?你看了文档了吗?这应该回答你的问题。这有帮助吗?什么是
resultJSON
?从哪里来?你看了文档了吗?这应该回答了你的问题。我已经更改了问题根据您的回答,我仍然卡住了,您能帮我吗?@SormitaChakraborty-Hmm,所以您的变量不是普通的字符串变量,而是一个JSON数据变量?在设置变量之前,请尝试使用
ConvertTo JSON-Compress
先将其转换。@SormitaChakraborty Azure devops服务不支持定义和pas直接使用json变量,您必须转换json数据以传递变量。或者通过文件共享json变量的内容。请参阅类似问题。使用update2更新。您的第一次编辑成功。json必须压缩然后传递,非常感谢。很高兴知道它提供了一些帮助:)我已经根据您的回答更改了问题,我仍然卡住了,您能帮忙吗?@sormitacharaborty-Hmm,所以您的变量不是普通的字符串变量,而是一个JSON数据变量?在设置变量之前,请尝试使用
ConvertTo JSON-Compress
先将其转换。@sormitacharaborty Azure devops服务没有支持直接定义和传递json变量,您必须将json数据转换为传递变量。或者通过文件共享json变量的内容。请参阅类似问题。使用update2更新。您的第一次编辑成功。json必须先压缩然后传递,非常感谢。很高兴知道它提供了一些帮助:)