I have a myJson.json that look like this:
{
  "FirewallGroupsToEnable": [
    "Remote Event Log Management",
    "Windows Remote Management",
    "Performance Logs and Alerts",
    "File and Printer Sharing",
    "Windows Management Instrumentation (WMI)"
  ],
  "MemoryStartupBytes": "3GB"
}
I'd like to serialize it as a string and then set it as a variable to be used by other tasks. If there is a better way to use this file inside a pipeline please let me know.
I'm serializing it and setting it like this:
          - task: PowerShell@2
            inputs:
              targetType: 'inline'
              script: |
                  $Configs= Get-Content -Path $(Build.SourcesDirectory)\sources\myJson.json -Raw | ConvertFrom-Json
                  
                  Write-Host "##vso[task.setvariable variable=Configs]$Configs"
In the following task, I am running a PowerShell script.
          - task: PowerShell@2
            displayName: 'myTask'
            inputs:
              targetType: 'filePath'
              filePath: 'sources\myScript.ps1'
              pwsh: true
I'm using the variable in my script like this:
$env:Configs
[Configs]$envConfigs = ConvertFrom-Json -InputObject $env:Configs -ErrorAction Stop
The Configs is a class that is being imported at the top of the script like so Using module .\Configs.psm1. I know it's being read because if it wasn't the error would be about a missing type.
Configs.psm1
class Configs
{
    [string[]]$FirewallGroupsToEnable
    [string]$MemoryStartupBytes
}
This is what I get in the pipeline.
##[debug]Processed: ##vso[task.setvariable variable=Configs]@{FirewallGroupsToEnable=System.Object[]; MemoryStartupBytes=3GB}
@{FirewallGroupsToEnable=System.Object[]; MemoryStartupBytes=3GB}
Cannot convert the "@{FirewallGroupsToEnable=System.Object[]; MemoryStartupBytes=3GB}" value of type "System.String" to type "Configs".
I've always casted a deserialized JSON into custom types like this and it always worked. But right now there is something wrong!
I tried to remove ConvertFrom-Json while serializing the JSON (before setting it as a variable) but it doesn't serialize it right. It shows like this in the pipeline:
It looks like it's only getting the first curly braces!
So, how do I serialize a JSON regardless of its depth into the pipeline to be used in later tasks inside a script file?
