Required/Add-QuickUtility.ps1

function global:Add-QuickUtility {
    param(
        [Switch] $InstallEntireBelt,
        [Switch] $Force
    )
    . "$PSScriptRoot\Reserved\Get-QuickEnvironment.ps1"
    . "$QuickReservedHelpersRoot\New-FileWithContent.ps1"
    . "$QuickReservedHelpersRoot\Show-Menu.ps1"
    
    $QuickForceText = if ($Force) { '-force' } else { '' }
    
    $localUtilityBeltPath = "$QuickReservedHelpersRoot\UtilityBelt"
    
    $localUtilityBeltFunctionsPath = "$localUtilityBeltPath\Functions"
    $utilityBeltFunctions = @(Get-ChildItem $localUtilityBeltFunctionsPath -Filter '*.ps1') 
    $localUtilityBeltAliasesPath = "$localUtilityBeltPath\Aliases"
    $utilityBeltAliases = @(Get-ChildItem $localUtilityBeltAliasesPath -Filter '*.ps1')
    
    $UtilityBeltCommands = New-Object System.Collections.ArrayList
    $utilityBeltFunctions | ForEach-Object {
        $obj = [PSCustomObject]@{
            Name = $_ -replace '.ps1', ''
            InstallLocation = "$QuickFunctionsRoot\$_"
            InstallerLocation = "$localUtilityBeltFunctionsPath\$_"
        }
        $UtilityBeltCommands.Add($obj) | Out-Null;
    }
    $utilityBeltAliases | ForEach-Object {
        $obj = [PSCustomObject]@{
            Name = $_ -replace '.ps1', ''
            InstallLocation = "$QuickAliasesRoot\$_"
            InstallerLocation = "$localUtilityBeltAliasesPath\$_"
        }
        $UtilityBeltCommands.Add($obj) | Out-Null;
    }
    
    if ($InstallEntireBelt) {
        foreach($tool in $UtilityBeltCommands) {
            $InstallLocation = $tool.InstallLocation
            $InstallerLocation = $tool.InstallerLocation
            $fileText = "('$QuickUtilityBeltFunctionIdentifier`r' + (Get-Content $InstallerLocation -Raw))"
            Invoke-Expression "New-FileWithContent -FilePath $InstallLocation -FileText $fileText $QuickForceText"
        }
    } else {
        $MenuOptions = @{}
        $MenuOptionMappings = @{}
        $UtilityBeltCommands | ForEach-Object {
            $MenuOptions[$_.Name] = $_.Name
            $MenuOptionMappings[$_.Name] = $_
        }
        $ChosenOption = Show-Menu "Install which tool?" $MenuOptions
    
        $tool = $MenuOptionMappings[$ChosenOption]
        $InstallLocation = $tool.InstallLocation
        $InstallerLocation = $tool.InstallerLocation
        $fileText = "('$QuickUtilityBeltFunctionIdentifier`r' + (Get-Content $InstallerLocation -Raw))"
        Invoke-Expression "New-FileWithContent -FilePath $InstallLocation -FileText $fileText $QuickForceText"
        
    }
    
}