src/profile/Reset-ModuleInProfile.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
function Reset-ModuleInProfile {
    [CmdletBinding(PositionalBinding = $true)]
    Param
    (
        [Parameter(Mandatory = $false, Position = 1)]
        [string]
        $ProfilePath
    )

    DynamicParam {
        if (-not $ProfilePath) {
            $ProfilePath = $(Get-Variable Profile -ValueOnly)
        }
        $script:ProfilePath = $ProfilePath

        return GetImportNameParameterSet -LineStatus 'Comment' -ProfilePath $script:ProfilePath -Mandatory
    }

    begin {
        $Name = $PSBoundParameters['Name']
    }

    end {
        $ProfileContent = Get-Content -Path $script:ProfilePath -Raw
        
        $ImportStatementLine = [regex]::Match($ProfileContent, ".*(?:Import-Module).*(?=$Name).*") | `
            Select-Object -ExpandProperty Value
        
        $ImportStatementPath = [regex]::Match($ImportStatementLine, "(?<=Import-Module).*$") | `
            Select-Object -ExpandProperty Value

        $ImportStatementPath = $ImportStatementPath.Trim()
        
        $UpdatedProfileContent = [regex]::Replace($ProfileContent, ".*(?:Import-Module).*(?=$Name).*", "Import-Module $ImportStatementPath")
        
        $UpdatedProfileContent = $UpdatedProfileContent.Trim()

        Set-Content -Path $script:ProfilePath -Value $UpdatedProfileContent
    }
}