Public/Setup/Install-CTXPSModule.ps1


<#PSScriptInfo
 
.VERSION 1.0.0
 
.GUID 1e30c885-bb07-4cb5-b380-55f5c1a92fee
 
.AUTHOR Pierre Smit
 
.COMPANYNAME iOCO Tech
 
.COPYRIGHT
 
.TAGS Windows
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
Created [14/02/2021_07:51] Initital Script Creating
 
.PRIVATEDATA
 
#>


<#
 
.DESCRIPTION
 Install needed modules
 
#>


Param()

# .ExternalHelp XDHealthCheck-help.xml

Function Install-CTXPSModule {
    PARAM(
        [Parameter(Mandatory = $false, Position = 0)]
        [ValidateScript( { (Test-Path $_) -and ((Get-Item $_).Extension -eq '.json') })]
        [string]$ModuleList = (Join-Path -Path ((Get-Module XDHealthCheck).ModuleBase).ToString() -ChildPath Private\modulelist.json),
        [switch]$ForceInstall = $false,
        [switch]$UpdateModules = $false,
        [switch]$RemoveAll = $false
    )

    $mods = Get-Content $ModuleList | ConvertFrom-Json
    if ($RemoveAll) {
            try {
            $mods | ForEach-Object {Write-Host 'Uninstalling Module:' -ForegroundColor Cyan -NoNewline;Write-Host $_.Name -ForegroundColor red
                                    Get-Module -Name $_.Name -ListAvailable | Uninstall-Module -AllVersions -Force
                                   }
            } catch {write-error "Error Uninstalling $($mod.Name)"}
        }
    if ($UpdateModules) {
            try {
            $mods | ForEach-Object {Write-Host 'Updating Module:' -ForegroundColor Cyan -NoNewline;Write-Host $_.Name -ForegroundColor yello
                                    Get-Module -Name $_.Name -ListAvailable  | Select-Object -First 1 | update-Module -Force
                                   }
            } catch {write-error "Error Updating $($mod.Name)"}
        }

    foreach ($mod in $mods) {
        if ($ForceInstall -eq $false) { $PSModule = Get-Module -Name $mod.Name -ListAvailable | Select-Object -First 1 }
        if ($PSModule.Name -like '') {
            Write-Host 'Installing Module:' -ForegroundColor Cyan -NoNewline
            Write-Host $mod.Name -ForegroundColor Yellow
            Install-Module -Name $mod.Name -Scope AllUsers -AllowClobber -Force
        } else {
            Write-Host 'Using Installed Module:' -ForegroundColor Cyan -NoNewline
            Write-Host $PSModule.Name - $PSModule.Path -ForegroundColor Yellow
        }
    }
}