functions/Remove-D365StuckApps.ps1


function Remove-D365StuckApps {
    param (
        [string]$SFServerCertificate,
        [string]$SFConnectionEndpoint,
        [string]$AgentShareLocation
    )
    $config = Get-D365LBDConfig 

    if (-not $($config.TenantID)) {
        $cachedconfigfile = Join-path $($config.AgentShareLocation) -ChildPath "scripts\config.xml" 
        $config = Get-D365LBDConfig -ConfigImportFromFile $cachedconfigfile
    }

    Connect-ServiceFabricCluster -ConnectionEndpoint $config.SFConnectionEndpoint -X509Credential -FindType FindByThumbprint -FindValue $config.SFServerCertificate -ServerCertThumbprint $config.SFServerCertificate

    $environmentwp = get-childitem $(Join-path $config.AgentShareLocation -ChildPath "\wp")
    $archivefolder = $(Join-path $config.AgentShareLocation -ChildPath "\archive")
    if ((Test-Path $archivefolder) -eq $false) {
        Write-PSFMessage -Message "Creating archive folder" -Level Verbose
        mkdir $archivefolder
    }
    else {
        Write-PSFMessage -Message "Archive folder already exists" -Level Verbose
    }
    Move-Item -Path $environmentwp.FullName -Destination $archivefolder -Force -Verbose
    Write-PSFMessage -Message "Deleting applications" -Level Verbose

    $applicationNamesToIgnore = @('fabric:/LocalAgent', 'fabric:/Agent-Monitoring', 'fabric:/Agent-LBDTelemetry')
    $applicationTypeNamesToIgnore = @('MonitoringAgentAppType-Agent', 'LocalAgentType', 'LBDTelemetryType-Agent')
 
    Get-ServiceFabricApplication | `
        Where-Object { $_.ApplicationName -notin $applicationNamesToIgnore } | `
        Remove-ServiceFabricApplication -Force
 
    Get-ServiceFabricApplicationType | `
        Where-Object { $_.ApplicationTypeName -notin $applicationTypeNamesToIgnore } | `
        Unregister-ServiceFabricApplicationType -Force
    
    Write-PSFMessage -Level Verbose -Message "Trigger deployment/retry in LCS"
}