Save-TFWindowsBinary.ps1
<#
.SYNOPSIS Save the specific version Windows Terraform binary file. #> function Save-TFWindowsBinary { [CmdletBinding(DefaultParameterSetName = 'Latest')] param ( [Parameter(ParameterSetName = 'Latest', Mandatory = $true)] [Switch]$Latest, [Parameter(ParameterSetName = 'Version', Mandatory = $true)] [SemVer]$Version, [Parameter(ParameterSetName = 'Latest', Mandatory = $true)] [Parameter(ParameterSetName = 'Version', Mandatory = $true)] [string]$DestinationPath ) # This function is for Windows only. if (-not $IsWindows) { Write-Warning "This function is supported for Windows only." return } # Test path if (-not (Test-Path -LiteralPath $DestinationPath)) { Write-Error "DestinationPath $DestinationPath does not exist." return } # get release information $release = switch ($PSCmdlet.ParameterSetName) { 'Latest' { Find-TFRelease -Latest } 'Version' { Find-TFRelease -Version $Version } } if (-not $release) { Write-Error "Failed to get Terraform release information." return } # find windows build url $build = if (IsCurrentProcess64bit) { $release.Builds | Where-Object { $_.OS -eq 'windows' -and $_.Architecture -eq 'amd64' } } else { $release.Builds | Where-Object { $_.OS -eq 'windows' -and $_.Architecture -eq '386' } } Write-Verbose ("Find build URL : {0}" -f ($build.url)) # download and expand zip archive $tempPath = $env:TEMP $zipFileName = $build.GetFileName() $zipFullPath = Join-Path $tempPath -ChildPath $zipFileName try { # download WriteInfo ("Download {0}" -f ($build.Url)) WriteInfo (" to {0}" -f ($tempPath)) $build.Download($tempPath) # expand WriteInfo ("Expand {0} to {1}" -f $zipFileName, $DestinationPath) Expand-Archive -LiteralPath $zipFullPath -DestinationPath $DestinationPath -Force # success WriteInfo ("Binary file is saved to {0}" -f $DestinationPath) } finally { if (Test-Path -LiteralPath $zipFullPath) { WriteInfo ("Remove {0}" -f $zipFullPath) Remove-Item -LiteralPath $zipFullPath } } } |