tasks/tasks.ps1
$SkipPacCli = [bool](property 'SkipPacCli' $false) $VerboseLogging = [bool](property 'VerboseLogging' ($VerbosePreference -eq "Continue")) $EnvironmentUrl = property PowerAppsEnvironmentUrl '' $ProfileName = property PowerAppsAuthProfileName '' $SchemaPrefix = property DataverseSchemaPrefix '' $SolutionName = property PowerAppsSolutionName '' $SolutionPath = property SolutionPath '' $TableDefinitionsPath = property TableDefinitionsPath (Join-Path $here "tables") $TenantId = property TenantId '' task SetSkipPacCli { $script:SkipPacCli = $true } task CheckParameters { $requiredVars = @('EnvironmentUrl', 'SchemaPrefix', 'TenantId') if (!$SkipPacCli) { $requiredVars += 'ProfileName' } if (!$SolutionPath) { $requiredVars += 'SolutionName' } $isValid = $true $requiredVars | ForEach-Object { if (-not (Get-Variable -Name $_ -ValueOnly)) { Write-Build Red "Variable '`$$_' is required, but currently undefined" $isValid = $false } } if (!$isValid) { throw "Required variables are missing - check previous messages." } } # Synopsis: Ensures the cross-platform Power Apps CLI .NET global tool is available task EnsurePowerPlatformCli -If {!$SkipPacCli} { $toolName = "Microsoft.PowerApps.CLI.Tool" Install-DotNetTool $toolName } task EnsureDataverseEnvironment -If {!$SkipPacCli} EnsurePowerPlatformCli,{ $splat = @{ ProfileName = $ProfileName EnvironmentUrl = $EnvironmentUrl TenantId = $TenantId } Connect-PowerPlatformCli @splat } task EnsureDataverseSolution EnsureDataverseEnvironment,{ if (!$SolutionName) { Write-Build White "Reading Solution Name from Solution.xml" $solutionXml = [xml](Get-Content "$SolutionPath/Other/Solution.xml") $SolutionName = $solutionXml.ImportExportXml.SolutionManifest.UniqueName } $solution = Select-PowerAppsSolution -SolutionName $SolutionName if (!$solution) { throw "Solution '$SolutionName' not found in environment $powerAppEnvironmentUrl - currently this must be created manually." } } task ConnectDataverse { Connect-DataverseEnvironment ` -TenantId $TenantId ` -EnvironmentUrl $EnvironmentUrl ` -SolutionName $SolutionName ` -SchemaPrefix $SchemaPrefix } task DeployDataverseTables { $tablesToProcess = Get-ChildItem -Path $TableDefinitionsPath -Filter *.yml foreach ($tableDefintionFile in $tablesToProcess) { $tableDefinition = Get-Content $tableDefintionFile | ConvertFrom-Yaml -Ordered $tableId = Set-DataverseTable @tableDefinition -Verbose:$VerboseLogging foreach ($column in $tableDefinition.columns) { $tableId | Set-DataverseColumn @column -Verbose:$VerboseLogging | Out-Null } } } |