Install.ps1

<#
    .SYNOPSIS
        Download the module files from GitHub.
 
    .DESCRIPTION
        Download the module files from GitHub to the local client in the module folder.
#>


[CmdLetBinding()]
Param (
    [ValidateNotNullOrEmpty()]
    [String]$ModuleName = 'PSDecode',
    [String]$InstallDirectory,
    [ValidateNotNullOrEmpty()]
    [String]$GitPath = 'https://raw.githubusercontent.com/PrateekKumarSingh/PSDecode/master'
)

$Pre = $VerbosePreference
$VerbosePreference = 'continue'

Try
{
    Write-Verbose "$ModuleName module installation started"

    $Files = @(
        'PSDecode.psd1',
        'PSDecode.psm1',
        'Data/ErrorCode.csv',
        'Data/HTTPStatusCode.csv',
        'Data/MACReference.csv',
        'Data/Ports.csv',
        'Source/Public/Get-ErrorDetail.ps1',
        'Source/Public/Get-HTTPStatusCode.ps1',
        'Source/Public/Get-MACVendor.ps1',
        'Source/Public/Get-Port.ps1'         
    )
}
Catch
{
    throw "Failed installing the module in the install directory '$InstallDirectory': $_"
}

Try
{
    if (-not $InstallDirectory)
    {
        Write-Verbose "$ModuleName no installation directory provided"

        $PersonalModules = Join-Path -Path ([Environment]::GetFolderPath('MyDocuments')) -ChildPath WindowsPowerShell\Modules

        if (($env:PSModulePath -split ';') -notcontains $PersonalModules)
        {
            Write-Warning "$ModuleName personal module path '$PersonalModules' not found in '`$env:PSModulePath'"
        }

        if (-not (Test-Path $PersonalModules))
        {
            Write-Error "$ModuleName path '$PersonalModules' does not exist"
        }

        $InstallDirectory = Join-Path -Path $PersonalModules -ChildPath $ModuleName
        Write-Verbose "$ModuleName default installation directory is '$InstallDirectory'"
    }

    if (-not (Test-Path $InstallDirectory))
    {
        New-Item -Path $InstallDirectory -ItemType Directory -EA Stop -Verbose | Out-Null
        New-Item -Path $InstallDirectory\Data -ItemType Directory -EA Stop -Verbose | Out-Null
        New-Item -Path $InstallDirectory\Source\Public -ItemType Directory -EA Stop -Verbose | Out-Null
        Write-Verbose "$ModuleName created module folder '$InstallDirectory'"
    }

    $WebClient = New-Object System.Net.WebClient

    $Files | ForEach-Object {
        $File = $installDirectory, '\', $($_ -replace '/', '\') -join ''
        $URL = $GitPath, '/', $_ -join ''
        "$URL $File"

        $WebClient.DownloadFile($URL, $File)
        Write-Verbose "$ModuleName installed module file '$_'"
    }

    Write-Verbose "$ModuleName module installation successful"
}
Catch
{
    throw "Failed installing the module in the install directory '$InstallDirectory': $_"
}
$VerbosePreference = $Pre