Scripts/SolutionExport.ps1

#
# SolutionExport.ps1
#

function Invoke-ExportSolution {
    Param(
        [string] [Parameter(Mandatory = $true)] $StartPath,
        [string] [Parameter(Mandatory = $true)] $SelectedSolution
    )

    try {

        Get-ExportDataValid

        $ProgressPreference = 'SilentlyContinue'

        $message = @"
 
 ____ _ _ _ _____ _
/ ___| ___ | |_ _| |_(_) ___ _ __ | ____|_ ___ __ ___ _ __| |_
\___ \ / _ \| | | | | __| |/ _ \| '_ \ | _| \ \/ / '_ \ / _ \| '__| __|
 ___) | (_) | | |_| | |_| | (_) | | | | | |___ > <| |_) | (_) | | | |_
|____/ \___/|_|\__,_|\__|_|\___/|_| |_| |_____/_/\_\ .__/ \___/|_| \__|
                                                   |_|
 
v2
"@

        Write-Host $message
        Write-Host ""    

        Write-Host "Running for path : " $StartPath
        Get-ConfigJSON($StartPath)

        $message = "Installing Solution Management Tools..."
        Write-Host $message

        #Install-XrmModule
        Install-PAC

        $message = "Establishing connection to $global:devops_ServerUrl"
        Write-Host $message

        $conn = Get-DataverseConnection($global:devops_ServerUrl)

        if ($conn.IsReady) {

            ######################## 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
            $SolutionName = $Solution.uniquename
            Write-Host "Found:" $SolutionId "-" $Solution.friendlyname  "-" $SolutionVersion

            # Get most recent patch solution
            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>
"@
 

            Set-DataverseSolutionVersion  
            Get-DataverseSolution "$StartPath\$SelectedSolution" $SelectedSolution
            Get-FlowsToBeDeployed "$StartPath\$SelectedSolution" $SelectedSolution
        }
    }
    catch {
        Write-Host $_
        pause
    }
    finally {
        ######################### CLEANING UP #########################
        $message = "Cleaning Up..."
        Write-Host $message
    
        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"
        
        $message = "Complete ... Enjoy !!!"
        Write-Host $message
        
        pause
    }
}