Public/Uinstall-SitecoreLocal.ps1

#Set-StrictMode -Version Latest
#####################################################
# Uninstall-SitecoreLocal
#####################################################
<#PSScriptInfo

.VERSION 0.0

.GUID 602bc07e-a621-4738-8c27-0edf4a4cea8e

.AUTHOR David Walker, Sitecore Dave, Radical Dave

.COMPANYNAME David Walker, Sitecore Dave, Radical Dave

.COPYRIGHT David Walker, Sitecore Dave, Radical Dave

.TAGS sitecore powershell local deploy develop devops install iis solr

.LICENSEURI https://github.com/SitecoreDave/SharedSitecore.SitecoreLocal/blob/main/LICENSE

.PROJECTURI https://github.com/SitecoreDave/SharedSitecore.SitecoreLocal

.ICONURI

.EXTERNALMODULEDEPENDENCIES

.REQUIREDSCRIPTS

.EXTERNALSCRIPTDEPENDENCIES

.RELEASENOTES


#>


<#
.SYNOPSIS
PowerShell Module for Local Sitecore deployment/development

.DESCRIPTION
PowerShell Module for installing Local Sitecore deployment/development - Install-SitecoreLocal, Start-SitecoreLocal, Stop-SitecoreLocal

.EXAMPLE
PS> .\Uninstall-SitecoreLocal 'name'

.EXAMPLE
PS> .\Uninstall-SitecoreLocal 'name' '9.3.0'

.EXAMPLE
PS> .\Uninstall-SitecoreLocal 'name' '9.3.0' 'd:\repos'

.EXAMPLE
PS> .\Uninstall-SitecoreLocal 'name' '9.3.0' 'd:\repos' -Persist User

.Link
https://github.com/SitecoreDave/SharedSitecore.SitecoreLocal

.OUTPUTS
    System.String
#>

#####################################################
# Uninstall-SitecoreLocal
#####################################################
#[alias("un-sc-local")]
#Set-PSBreakpoint -Variable Now -Mode Read -Action {Set-Variable Now (get-date -uformat '%Y\%m\%d %H:%M:%S') -Option ReadOnly, AllScope -Scope Global -Force -ErrorAction SilentlyContinue} -ErrorAction SilentlyContinue
function Uninstall-SitecoreLocal {
    [CmdletBinding(SupportsShouldProcess,PositionalBinding=$false)]
    Param (
        # Name of new Sitecore Local instance [default=dev]
        [Parameter(Mandatory=$false)] [string]$name = 'dev',    

        # path if you want to use custom
        [Parameter(Mandatory=$false)]
        [string]$ConfigurationFile = ""
    )
    begin {
        $ErrorActionPreference = 'Stop'
        $VerbosePreference = 'SilentlyContinue'
        [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
        
        $PSScriptName = ($MyInvocation.MyCommand.Name.Replace(".ps1",""))
        $parametersResults = Get-Parameters $MyInvocation.MyCommand.Parameters $PSBoundParameters "$($PSScriptName):start" -Show -Stamp -StartWatch
        Write-Host $parametersResults.output -ForegroundColor Green
        $started = $parametersResults.started
    }
    process {
        try {
            if($PSCmdlet.ShouldProcess($ConfigurationFile)) {
                Start-Transcript $logPath
                $parametersUpdated = Get-Parameters $MyInvocation.MyCommand.Parameters $PSBoundParameters "$PSScriptName started" -Show
                Write-Host $parametersUpdated.output -ForegroundColor Green
                #$parameters = $parametersUpdated.parameters

                $config = Get-Content -Raw $ConfigurationFile | ConvertFrom-Json
                if (!$config) {
                    throw "Error trying to load configuration!"
                }
                
                $site = $config.settings.site
                $sql = $config.settings.sql
                $xConnect = $config.settings.xConnect
                $sitecore = $config.settings.sitecore
                $identityServer = $config.settings.identityServer
                $solr = $config.settings.solr
                
                $assets = $config.assets                

                $singleDeveloperParams = @{
                    Path                           = $sitecore.singleDeveloperConfigurationPath
                    SqlServer                      = $sql.server
                    SqlAdminUser                   = $sql.adminUser
                    SqlAdminPassword               = $sql.adminPassword
                    SqlCollectionPassword          = $sql.collectionPassword
                    SqlReferenceDataPassword       = $sql.referenceDataPassword
                    SqlMarketingAutomationPassword = $sql.marketingAutomationPassword
                    SqlMessagingPassword           = $sql.messagingPassword
                    SqlProcessingEnginePassword    = $sql.processingEnginePassword
                    SqlReportingPassword           = $sql.reportingPassword
                    SqlCorePassword                = $sql.corePassword
                    SqlSecurityPassword            = $sql.securityPassword
                    SqlMasterPassword              = $sql.masterPassword
                    SqlWebPassword                 = $sql.webPassword
                    SqlProcessingTasksPassword     = $sql.processingTasksPassword
                    SqlFormsPassword               = $sql.formsPassword
                    SqlExmMasterPassword           = $sql.exmMasterPassword
                    SitecoreAdminPassword          = $sitecore.adminPassword
                    SolrUrl                        = $solr.url
                    SolrRoot                       = $solr.root
                    SolrService                    = $solr.serviceName
                    Prefix                         = $site.prefix
                    XConnectCertificateName        = $xconnect.siteName
                    IdentityServerCertificateName  = $identityServer.name
                    IdentityServerSiteName         = $identityServer.name
                    LicenseFile                    = $assets.licenseFilePath
                    XConnectPackage                = $xConnect.packagePath
                    SitecorePackage                = $sitecore.packagePath
                    IdentityServerPackage          = $identityServer.packagePath
                    XConnectSiteName               = $xConnect.siteName
                    SitecoreSitename               = $site.hostName
                    PasswordRecoveryUrl            = "https://" + $site.hostName
                    SitecoreIdentityAuthority      = "https://" + $identityServer.name
                    XConnectCollectionService      = "https://" + $xConnect.siteName
                    ClientSecret                   = $identityServer.clientSecret
                    AllowedCorsOrigins             = ("https://{0}" -f $site.hostName)
                    SitePhysicalRoot               = $site.webRoot
                }

                Uninstall-SitecoreConfiguration @singleDeveloperParams
                $results = "end"

                $PSScriptName = ($MyInvocation.MyCommand.Name.Replace(".ps1",""))
                Write-Verbose (Get-Parameters $MyInvocation.MyCommand.Parameters $PSBoundParameters -Message "$($PSScriptName):$results" -Show).output
                return $results
            }
        }
        catch {
          Write-Error "ERROR:$_" -InformationVariable results
        }
        #finally {
        # Write-Host "#####################################################" -ForegroundColor Green
        # Write-Host "# $PSScriptName ended successfully" -ForegroundColor Magenta
        #}
    }
    end {
        #Write-Host "#####################################################" -ForegroundColor Green
        #Write-Host "# $PSScriptName" -ForegroundColor Magenta
        #Write-Host ("# {0:yyyy-MM-dd hh:mm:ss} $PSCommandPath" -f (Get-Date)) -ForegroundColor Cyan
        #PSSenderInfo
        #Write-Host ($PSBoundParameters | Out-String).Trim() -ForegroundColor Cyan
        #Write-Host "#####################################################" -ForegroundColor Green
        
        $parametersResults = Get-Parameters $MyInvocation.MyCommand.Parameters $PSBoundParameters "$($PSScriptName):$results" -Show -StopWatch -Started $started
        Write-Host $parametersResults.output -ForegroundColor Green
        
        $StopWatch.Stop()
        $StopWatch

        Write-Verbose "$PSScriptName $hostname $version end"
        Pop-Location
        Stop-Transcript
    }
}