FrameworkTemplate/Solutions/Scripts/_SetupTools.ps1

function Install-XrmModule {
    $moduleName = "Microsoft.Xrm.Data.Powershell"
    $moduleVersion = "2.8.14"
    $module = Get-Module -ListAvailable -Name $moduleName
    if (!($module.Version -ge $moduleVersion )) {
        Write-host "Module $moduleName version $moduleVersion or higher not found, installing now"
        Install-Module -Name $moduleName -MinimumVersion $moduleVersion -Force -Scope CurrentUser
    }
    else {
        Write-host "Module $moduleName version $moduleVersion or higher Found"
    }
}
    
function Install-DevOpsDataModule {
    $moduleName = "Microsoft.Xrm.DevOps.Data.Powershell"
    $moduleVersion = "1.4.2"
    $module = Get-Module -ListAvailable -Name $moduleName
    if (!($module.Version -ge $moduleVersion )) {
        Write-host "Module $moduleName version $moduleVersion or higher not found, installing now"
        Install-Module -Name $moduleName -MinimumVersion $moduleVersion -Force -Scope CurrentUser
    }
    else {
        Write-host "Module $moduleName version $moduleVersion or higher Found"
    }
}
    
function Install-CoreTools {
    $sourceNugetExe = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
    $targetNugetExe = ".\nuget.exe"
    Remove-Item .\Tools -Force -Recurse -ErrorAction Ignore
    Invoke-WebRequest $sourceNugetExe -OutFile $targetNugetExe
    Set-Alias nuget $targetNugetExe -Scope Global 
    
    ##
    ##Download CoreTools
    ##
    Write-host "Nuget Sources"
    if (-not $(Get-PackageSource -ProviderName NuGet -ErrorAction Ignore)) { 
        ./nuget sources Add -Name "nuget live" -Source "https://api.nuget.org/v3/index.json"
    }
    ./nuget sources
    ./nuget install Microsoft.CrmSdk.CoreTools -O .\Tools
    $coreToolsFolder = Get-ChildItem ./Tools | Where-Object { $_.Name -match 'Microsoft.CrmSdk.CoreTools.' }
    Move-Item .\Tools\$coreToolsFolder\content\bin\coretools\*.* .\Tools\ -Force -ErrorAction SilentlyContinue
    Remove-Item .\Tools\$coreToolsFolder -Force -Recurse -ErrorAction Ignore
}
    
function Install-XrmDeployModule {
    $moduleName = "Microsoft.Xrm.Tooling.PackageDeployment.Powershell"
    $moduleVersion = "3.3.0.928"
    $module = Get-Module -ListAvailable -Name $moduleName
    if (!($module.Version -ge $moduleVersion )) {
        Write-host "Module $moduleName version $moduleVersion or higher not found, installing now"
        Install-Module -Name $moduleName -MinimumVersion $moduleVersion -Force -Scope CurrentUser -SkipPublisherCheck
    }
    else {
        Write-host "Module $moduleName version $moduleVersion or higher Found"
    }
}
    
function Install-XrmToolingPowerShell {
    $moduleName = "Microsoft.Xrm.Tooling.CrmConnector.PowerShell"
    $moduleVersion = "3.3.0.928"
    $module = Get-Module -ListAvailable -Name $moduleName
    if (!($module.Version -ge $moduleVersion )) {
        Write-host "Module $moduleName version $moduleVersion or higher not found, installing now"
        Install-Module -Name $moduleName -MinimumVersion $moduleVersion -Force -AllowClobber
    }
    else {
        Write-host "Module $moduleName Found"
        Import-Module -Name $moduleName -MinimumVersion $moduleVersion -Force 
    }
}
    
function Install-PowerAppsCheckerModule {
    $moduleName = "Microsoft.PowerApps.Checker.PowerShell"
    $moduleVersion = "1.0.29"
    $module = Get-Module -ListAvailable -Name $moduleName
    if (!($module.Version -ge $moduleVersion )) {
        Write-host "Module $moduleName version $moduleVersion or higher not found, installing now"
        Install-Module -Name $moduleName -MinimumVersion $moduleVersion -Force -AllowClobber
    }
    else {
        Write-host "Module $moduleName Found"
        Import-Module -Name $moduleName -MinimumVersion $moduleVersion -Force 
    }
}

function Install-PowerAppsAdmin {
    $moduleName = "Microsoft.PowerApps.Administration.PowerShell"
    $moduleVersion = "2.0.126"
    $module = Get-Module -ListAvailable -Name $moduleName
    if (!($module.Version -ge $moduleVersion )) {
        Write-host "Module $moduleName version $moduleVersion or higher not found, installing now"
        Install-Module -Name $moduleName -MinimumVersion $moduleVersion -Force -AllowClobber
    }
    else {
        Write-host "Module $moduleName version $moduleVersion or higher Found"
        Import-Module -Name $moduleName -MinimumVersion $moduleVersion -Force 
    }
}

function Install-PowerAppsPowerShell {
    $moduleName = "Microsoft.PowerApps.PowerShell"
    $moduleVersion = "1.0.20"
    $module = Get-Module -ListAvailable -Name $moduleName
    if (!($module.Version -ge $moduleVersion )) {
        Write-host "Module $moduleName version $moduleVersion or higher not found, installing now"
        Install-Module -Name $moduleName -MinimumVersion $moduleVersion -Force -AllowClobber
    }
    else {
        Write-host "Module $moduleName Found"
        Import-Module -Name $moduleName -MinimumVersion $moduleVersion -Force 
    }
}
    
$ProgressPreference = 'SilentlyContinue'
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

if (-not $(Get-PackageProvider -Name NuGet -ErrorAction Ignore)) { 
    Install-PackageProvider -Name NuGet -Force -Scope CurrentUser
}
$PSGallery = Get-PSRepository | Where-Object Name -eq "PSGallery" | Select-Object InstallationPolicy
if (-not $PSGallery.InstallationPolicy -eq "Trusted") {
    Register-PSRepository -Default -ErrorAction SilentlyContinue    
    Set-PSRepository -Name PSGallery -InstallationPolicy Trusted -ErrorAction SilentlyContinue
}