Private/New-TemporaryFolder.ps1

Function New-TemporaryFolder {
    <#
        .SYNOPSIS
            Creates a new temporary folder

        .NOTES
            Author: Aaron Parker
            Twitter: @stealthpuppy
    #>

    [CmdletBinding(SupportsShouldProcess = $true)]
    [OutputType([System.String])]
    param ()

    # Get temp Path
    if (Test-Path -Path env:Temp -ErrorAction "SilentlyContinue") {
        $Parent = $Env:Temp
    }
    elseif (Test-Path -Path env:TMP -ErrorAction "SilentlyContinue") {
        $Parent = $Env:TMP
    }
    elseif (Test-Path -Path $env:HOME -ErrorAction "SilentlyContinue") {
        $Parent = $Env:HOME
    }

    # Check whether current PowerShell environment matches or is higher than $Version
    try {
        $Folder = "vcredist_$([System.Convert]::ToString((Get-Random -Maximum 65535),16).PadLeft(4,'0')).tmp"
        $T = Join-Path -Path $Parent -ChildPath $Folder
        if ($PSCmdlet.ShouldProcess($T, "New directory.")) {
            $Path = New-Item -Path $T -ItemType "Directory" -ErrorAction "SilentlyContinue"
            Write-Output -InputObject $Path.FullName
        }
    }
    catch {
        throw $_.Exception.Message
    }
}