Scripts/SolutionExport.ps1
# SolutionExport.ps1 function Invoke-ExportSolution { Param( [string] [Parameter(Mandatory = $true)] $StartPath, [string] [Parameter(Mandatory = $true)] $SelectedSolution, [string] [Parameter(Mandatory = $false)] $UserName = "", [string] [Parameter(Mandatory = $false)] $Password = "", [System.Obsolete("TenantId is now fetched from the project file directly.")] [string] [Parameter(Mandatory = $false)] $TenantId = "", [bool] [Parameter(Mandatory = $false)] $UseClientSecret = $false ) try { if (!$global:devops_FullTool) { $global:devops_projectLocation = $StartPath Set-ToolVariables if (!$global:devops_projectFile) { $repoName = ($global:devops_configFile.Projects | Where-Object { $_.ProjectLocation -eq $global:devops_projectLocation })[0].Name Write-Verbose "Fetched repo name '$repoName' by looking up project in config file by ProjectLocation" $global:devops_projectFile = Get-Content ("$global:devops_projectLocation\$repoName.json") | ConvertFrom-Json } else { Write-Verbose "Project File global variable already set" } Set-ProjectVariables Install-ConfigMigrationModule Install-PowerAppsAdmin Install-XrmModule if ($UserName -ne "") { $global:devops_DataverseEmail = $UserName } if ($Password -ne "") { $global:Password = $Password } if ($UseClientSecret -eq $true) { $global:devops_DataverseCredType = "servicePrincipal" $global:devops_ClientID = $UserName $global:clientSecret = $Password } else { $global:devops_DataverseCredType = "user" } } $ProgressPreference = 'SilentlyContinue' $message = @" ____ _ _ _ _____ _ / ___| ___ | |_ _| |_(_) ___ _ __ | ____|_ ___ __ ___ _ __| |_ \___ \ / _ \| | | | | __| |/ _ \| '_ \ | _| \ \/ / '_ \ / _ \| '__| __| ___) | (_) | | |_| | |_| | (_) | | | | | |___ > <| |_) | (_) | | | |_ |____/ \___/|_|\__,_|\__|_|\___/|_| |_| |_____/_/\_\ .__/ \___/|_| \__| |_| "@ Write-Host $message Write-Host "" Write-Verbose "Getting config JSON" Get-ConfigJSON($StartPath) Write-Verbose "Installing PAC" Install-PAC Write-Verbose "Getting Dataverse Connection" $conn = Get-DataverseConnection($global:devops_ServerUrl) Write-Verbose "Creating PAC Auth" New-PACAuth Write-Verbose "Testing if conn is ready" if ($conn.IsReady) { Write-Verbose "Attempting to fetch solutions from CRM" ######################## CHECK SOLUTION # Get solution by name $SolutionQuery = Get-CrmRecords -conn $conn -EntityLogicalName solution -Fields 'friendlyname', 'version', 'uniquename' -FilterAttribute uniquename -FilterOperator eq -FilterValue $global:devops_SolutionName $Solution = $SolutionQuery.CrmRecords[0] if (!$Solution) { throw "Solution not found: $global:devops_SolutionName" } $SolutionId = $Solution.solutionid $SolutionVersion = $Solution.version Write-Host "Found solution: $($Solution.friendlyname) - $SolutionVersion" # Get patch solutions Write-Host "Checking for Patch Solutions..." $PatchQuery = Get-CrmRecordsByFetch -conn $conn @" <fetch> <entity name="solution" > <attribute name="uniquename" /> <attribute name="friendlyname" /> <attribute name="version" /> <filter> <condition attribute="parentsolutionid" operator="eq" value="$SolutionId" /> </filter> <order attribute="createdon" descending="false" /> </entity> </fetch> "@ Get-DataverseSolution "$StartPath\$SelectedSolution" $SelectedSolution } } catch { Write-Host $_ pause } finally { #region Cleaning Up Write-Host "Cleaning Up..." Remove-Item (Join-Path $StartPath "nuget.exe") -ErrorAction Ignore -Force Remove-Item (Join-Path $StartPath "Tools") -Force -Recurse -ErrorAction Ignore Remove-Item (Join-Path $StartPath "*.zip") -Force -ErrorAction Ignore -Exclude "Publisher.zip" & $env:APPDATA\Capgemini.PowerPlatform.DevOps\PACTools\tools\pac.exe auth delete --name ppdo Write-Host "Complete ... Enjoy !!!" If (!$UserName) { pause } #endregion } } |