Search code examples
ms-release-managementdsc

How to reference Script Arguments in DSC Script Resource


I'm using TFS 2015 Update 2 to create a release. One of my release steps is a "PowerShell on Target Machines" task that I'm using to apply a DSC configuration.

I'd like to use the Script Arguments field to pass in parameters from TFS to the DSC script.

My script looks like this:

Param(
  [string]$data
)

configuration ApplyConfig
{
    Script Backup {
        SetScript = {
            #do some stuff with $data
        }

        TestScript = {
            Write-Output "Print param"
            Write-Output $data

            return $true
        }

        GetScript = {
            return @{"Test" = "test data"}
        }
    }
}

ApplyConfig

The Script Arguments field contains this:

-Destination "$(ApplicationPath)"

However, at this point, $data seems to always be null. How can I get the argument defined in the Script Arguments field into my Script Resource?


Solution

  • When you reference $data in the TestScript you need the 'using' scope:

    TestScript = {
        Write-Output "Print param"
        Write-Output $using:data
    
       return $true
    }
    

    The TestScript executes on a different PowerShell context; 'using' allows you to copy the value of $data across those contexts.