Public/Invoke-TerraformGet.ps1

function Invoke-TerraformGet {
    <#
        .SYNOPSIS
        Invoke "terraform.exe get" command
        .DESCRIPTION
        The function to downloads/updates modules before planning/applying changes using "terraform.exe get" command.
        .PARAMETER WorkingDir [System.IO.FileInfo]
        The mandatory parameter $WorkingDir represents the project directory (project's root module) to execute the command in.
        Either a full path must be provided or a subfolder as relative path to $PSScriptRoot.
        .PARAMETER Update [bool]
        The optional parameter $Update specifies if modules shall only be downloaded if not existing or downloaded and
        updated even if the module already exists.
        Default to: $true
        .EXAMPLE
        Invoke-TerraformGet -WorkingDir "C:\Terraform\Project"
        Invoke-TerraformGet -WorkingDir "Project" -Update $false
    #>

    [CmdletBinding(SupportsShouldProcess=$true,HelpUri="https://github.com/uplink-systems/powershell-modules/UplinkSystems.Terraform")]
    [Alias("Invoke-TfGet")]
    param(
        [Parameter(Position=0,Mandatory=$true,HelpMessage="Enter the Terraform working/project directory...")]
        [ValidateScript({if(-not($_ | Test-Path)) {throw "Directory does not exist..."}; return $true})]
        [System.IO.FileInfo] $WorkingDir,
        [Parameter(Mandatory=$false)]
        [bool] $Update = $true
    )
    begin {
        $ErrorActionPreference = 'SilentlyContinue'
        Set-Location -Path $WorkingDir
    }
    process {
        Write-Host -Object "`n$($WorkingDir) " -ForegroundColor White -NoNewLine
        if ($Update) {
            Write-Host -Object "-> Checking for required modulels and installing/replacing/updating...`n" -ForegroundColor DarkGray
            Start-Process -FilePath "terraform.exe" -ArgumentList "get -update" -NoNewWindow -PassThru -Wait | Out-Null
        } else {
            Write-Host -Object "-> Checking for required modules and installing...`n" -ForegroundColor DarkGray
            Start-Process -FilePath "terraform.exe" -ArgumentList "get" -NoNewWindow -PassThru -Wait | Out-Null
        }
    }
    end {
        Set-Location -Path $MyInvocation.PSScriptRoot
    }
}