Templates/tfalias.ps1
#!/usr/bin/env pwsh #Requires -Version 5.0 Set-StrictMode -Version 3.0 # Redirect Windows PowerShell to PowerShell 7 if ($PSVersionTable.PSVersion.Major -le 5) { pwsh -NonInteractive -NoProfile -Command "$($Script:MyInvocation.MyCommand.Path)" $script:args exit $LASTEXITCODE } <# tfalias.ps1 : TerraformUtil for command prompt #> function ShowHelp () { @" tfalias Usage: tfalias use [version] Install and use a specific version of Terraform tfalias list List installed Terraform versions tfalias list-remote List all installable versions tfalias uninstall Uninstall a specific version of Terraform tfalias pin Write current version to .terraform-version file tfalias --version Show version Example C:\> tfalias use latest C:\> tfalias use 1.2.3 C:\> tfalias list C:\> tfalias list-remote C:\> tfalias uninstall 1.2.3 C:\> tfalias pin "@ | Out-Host } function ShowVersion () { # Note : loading module is slow, so separeted --version command. "tfalias ver.{0}" -f (Get-InstalledModule TerraformUtil).Version | Out-Host } function Main () { $command, $commandArgs = $script:args -split ' ' if ($null -eq $command) { ShowHelp return } switch ($command) { 'use' { if ($null -eq $commandArgs) { ShowHelp return } switch (@($commandArgs)[0]) { 'latest' { Set-TFAlias -Latest } Default { try { $ver = [semver](@($commandArgs)[0]) Set-TFAlias -Version $ver } catch { Write-Warning "Failed to parse version." } } } return } 'uninstall' { if ($null -eq $commandArgs) { ShowHelp return } try { $ver = [semver](@($commandArgs)[0]) Uninstall-TFAlias -Version $ver } catch { Write-Warning "Failed to parse version." } return } 'list' { if ( @($commandArgs).Where({ $_ -eq '--json' })) { Get-TFInstalledAlias | ForEach-Object { [PSCustomObject]@{ Current = $_.Current; Version = $_.Version.ToString(); Path = $_.Path } } | ConvertTo-Json return } Get-TFInstalledAlias | ForEach-Object { "{0} {1}" -f $(if ($_.Current) { '*' } else { ' ' }), ($_.Version.ToString()) } return } 'list-remote' { if ( @($commandArgs).Where({ $_ -eq '--json' })) { Find-TFVersion | ForEach-Object { [PSCustomObject]@{ Version = $_.ToString() } } | ConvertTo-Json return } Find-TFVersion | ForEach-Object { $_.ToString() } return } 'pin' { Set-TFAlias -Pin return } { $_ -in ('--version', '-V') } { ShowVersion return } Default { ShowHelp return } } } # Start main Main |