functions/remove-d365lcsenvironment.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

<#
    .SYNOPSIS
        Remove lcs environment
         
    .DESCRIPTION
        Remove a lcs environment from the configuration store
         
    .PARAMETER Name
        Name of the lcs environment you want to remove from the configuration store
         
    .PARAMETER Temporary
        Instruct the cmdlet to only temporarily remove the lcs environment from the configuration store
         
    .EXAMPLE
        PS C:\> Remove-D365LcsEnvironment -Name "UAT"
         
        This will remove the lcs environment named "UAT" from the machine.
         
    .NOTES
        Tags: Servicing, Environment, Config, Configuration,
         
        Author: Mötz Jensen (@Splaxi)
         
    .LINK
        Get-D365LcsApiConfig
         
    .LINK
        Get-D365LcsApiToken
         
    .LINK
        Get-D365LcsAssetValidationStatus
         
    .LINK
        Get-D365LcsDeploymentStatus
         
    .LINK
        Invoke-D365LcsApiRefreshToken
         
    .LINK
        Invoke-D365LcsUpload
         
    .LINK
        Set-D365LcsApiConfig
#>


function Remove-D365LcsEnvironment {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")]
    [CmdletBinding()]
    [OutputType()]
    param (
        [Parameter(Mandatory = $true, Position = 1)]
        [string] $Name,

        [switch] $Temporary
    )

    $Name = $Name.ToLower()

    if ($Name -match '\*') {
        Write-PSFMessage -Level Host -Message "The name cannot contain <c='em'>wildcard character</c>."
        Stop-PSFFunction -Message "Stopping because the name contains wildcard character."
        return
    }

    if (-not ((Get-PSFConfig -FullName "d365fo.tools.lcs.environment.*.name").Value -contains $Name)) {
        Write-PSFMessage -Level Host -Message "A lcs environment with that name <c='em'>doesn't exists</c>."
        Stop-PSFFunction -Message "Stopping because a lcs environment with that name doesn't exists."
        return
    }

    foreach ($config in Get-PSFConfig -FullName "d365fo.tools.lcs.environment.$Name.*") {
        Set-PSFConfig -FullName $config.FullName -Value ""

        if (-not $Temporary) { Unregister-PSFConfig -FullName $config.FullName -Scope UserDefault }
    }
}