This is another script I have written to encode and decode string for Terraform using PowerShell GUI. These scripts helps me in the live demonstrations and PowerPoint to client about infrastructure as a code. Once script is executed in PowerShell GUI, it looks like below, It helps to Base64 Encode given string, In the same GUI, this helps to Decode encoded string back to human readable format string. I find this process very Simple and efficient.
Earlier PowerShell GUI Code: Self-Signed Certificates Made Easy with PowerShell GUI
Download Terraform Encode/Decode String Tool here or it is also available on github.com.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 |
# .NOTES # -------------------------------------------------------------------------------- # Generated on: 13-Sep-25 8:15 PM # Generated for: Terrafrorm Encode/Decode String # PowerShell Version: V7 # -------------------------------------------------------------------------------- # .DESCRIPTION # vcloud-lab.com Terraform Encode/Decode String $assemblies = ('System.Windows.Forms', 'System.Data', 'System.Drawing', 'PresentationFramework') $assemblies | Foreach-Object {[void][reflection.assembly]::Load($_)} Add-Type -AssemblyName "System.Drawing", "System.Windows.Forms", "System.Data", "System.Design", "PresentationFramework" [System.Windows.Forms.Application]::EnableVisualStyles() $formEncodeDecodeString = New-Object 'System.Windows.Forms.Form' $richtextbox = New-Object 'System.Windows.Forms.RichTextBox' $statusstrip = New-Object 'System.Windows.Forms.StatusStrip' $picturebox = New-Object 'System.Windows.Forms.PictureBox' $textboxOutput = New-Object 'System.Windows.Forms.TextBox' $buttonEncode = New-Object 'System.Windows.Forms.Button' $radiobuttonDecode = New-Object 'System.Windows.Forms.RadioButton' $radiobuttonEncode = New-Object 'System.Windows.Forms.RadioButton' $textboxInput = New-Object 'System.Windows.Forms.TextBox' $labelStringToEncode = New-Object 'System.Windows.Forms.Label' $toolstripstatuslabel = New-Object 'System.Windows.Forms.ToolStripStatusLabel' $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' $radiobuttonEncode_CheckedChanged={ $labelStringToEncode.Text = 'String to Encode:' $buttonEncode.Text = 'Encode' $textboxInput.Text = 'Password123!' $textboxOutput.Text = 'UGFzc3dvcmQxMjMh' } $radiobuttonDecode_CheckedChanged={ $labelStringToEncode.Text = 'String to Decode:' $buttonEncode.Text = 'Decode' $textboxInput.Text = 'UGFzc3dvcmQxMjMh' $textboxOutput.Text = 'Password123!' } $buttonEncode_Click={ if ($radiobuttonEncode.Checked) { $originalString = $textboxInput.Text #"Password123!" $bytes = [System.Text.Encoding]::UTF8.GetBytes($originalString) $encodedString = [System.Convert]::ToBase64String($bytes) #Write-Host "Encoded String (UTF8): $encodedString" $textboxOutput.Text = $encodedString } if ($radiobuttonDecode.Checked) { $error.Clear() try { $encodedString = $textboxInput.Text.Trim() #"UGFzc3dvcmQxMjMh" # Base64 for "Password123!" (UTF8) $decodedBytes = [System.Convert]::FromBase64String($encodedString) $decodedString = [System.Text.Encoding]::UTF8.GetString($decodedBytes) #Write-Host "Decoded String (UTF8): $decodedString" $textboxOutput.Text = $decodedString } catch { $textboxOutput.Text = 'Error: Invalid encoded string provided!' } } } $Form_StateCorrection_Load= { $formEncodeDecodeString.WindowState = $InitialFormWindowState } $Form_Cleanup_FormClosed= { try { $buttonEncode.remove_Click($buttonEncode_Click) $radiobuttonDecode.remove_CheckedChanged($radiobuttonDecode_CheckedChanged) $radiobuttonEncode.remove_CheckedChanged($radiobuttonEncode_CheckedChanged) $formEncodeDecodeString.remove_Load($formEncodeDecodeString_Load) $formEncodeDecodeString.remove_Load($Form_StateCorrection_Load) $formEncodeDecodeString.remove_FormClosed($Form_Cleanup_FormClosed) } catch { Out-Null } $formEncodeDecodeString.Dispose() $labelStringToEncode.Dispose() $textboxInput.Dispose() $radiobuttonEncode.Dispose() $radiobuttonDecode.Dispose() $buttonEncode.Dispose() $textboxOutput.Dispose() $picturebox.Dispose() $statusstrip.Dispose() $toolstripstatuslabel.Dispose() $richtextbox.Dispose() } $formEncodeDecodeString.SuspendLayout() $picturebox.BeginInit() $statusstrip.SuspendLayout() $formEncodeDecodeString.Controls.Add($richtextbox) $formEncodeDecodeString.Controls.Add($statusstrip) $formEncodeDecodeString.Controls.Add($picturebox) $formEncodeDecodeString.Controls.Add($textboxOutput) $formEncodeDecodeString.Controls.Add($buttonEncode) $formEncodeDecodeString.Controls.Add($radiobuttonDecode) $formEncodeDecodeString.Controls.Add($radiobuttonEncode) $formEncodeDecodeString.Controls.Add($textboxInput) $formEncodeDecodeString.Controls.Add($labelStringToEncode) $formEncodeDecodeString.AutoScaleDimensions = New-Object System.Drawing.SizeF(8, 17) $formEncodeDecodeString.AutoScaleMode = 'Font' $formEncodeDecodeString.ClientSize = New-Object System.Drawing.Size(467, 348) $formEncodeDecodeString.FormBorderStyle = 'FixedDialog' $formEncodeDecodeString.Name = 'formEncodeDecodeString' $formEncodeDecodeString.Text = 'Encode/Decode String for Terraform' $formEncodeDecodeString.add_Load($formEncodeDecodeString_Load) $richtextbox.Location = New-Object System.Drawing.Point(13, 131) $richtextbox.Margin = '4, 4, 4, 4' $richtextbox.Name = 'richtextbox' $richtextbox.ReadOnly = $True $richtextbox.Size = New-Object System.Drawing.Size(435, 176) $richtextbox.TabIndex = 8 $richtextbox.Text = 'How to encode and decode string in Terraform? To encode string use below function: base64encode("Password123!") # Output: UGFzc3dvcmQxMjMh To decode string use below function: textdecodebase64("UGFzc3dvcmQxMjMh") # Output: Password123! ' [void]$statusstrip.Items.Add($toolstripstatuslabel) $statusstrip.Location = New-Object System.Drawing.Point(0, 323) $statusstrip.Name = 'statusstrip' $statusstrip.Padding = '1, 0, 19, 0' $statusstrip.Size = New-Object System.Drawing.Size(467, 25) $statusstrip.TabIndex = 7 $statusstrip.Text = 'statusstrip' $ImageString = @" iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACx jwv8YQUAAAAJcEhZcwAAAdcAAAHXAYySCGgAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5v cmeb7jwaAAAHaUlEQVR4Xu1bB4wVRRh+iLHEHgsKd/P/s7N3x3EFDDEIeAiIIE2O3gldJELgQCC0 KFGKlENAUIII0g4IRZBuTqWDxkIJOZVEDE0IPaDUMf/szt6+3Qcc3t177+B9yRfuL7Nv5ntTl3mB QAwxxPB/IRirLISId/tSUlIe4Iy/Tv9qX1J8fNkExCraZow9ZSLWdAoFAgEezzMSyyY+o+24uLiH DWbUqRkI3K99AqAa57yMYwsRT3XQdtghAP8VgGvdPgOgnQCUJuOtXL6lAvAaIj6kyiGOoxzOeRLZ iXFx5cg2gE/TZQTjPSwfNFTPMIwnBOANgTjXyQFcR3XQdrhRiiooAHPdTgOgq/Iz3snxIa4iX1JS 0mNkC8TJtgAVyTbj44UtwCxdRjDexxagubKFeE49F3GxkwOYSz6qi/aFE8UqgAm8u/V8qK+eYfWA 64LhHJ0jANcIwEvaDjeKVQCaQxI4rxEIBEprH4139zwBAC9wztO1HXYIgC0C+Idun4HYhRpjMt7R 5VMCpDyb8qgqx3gnE/CAbkwoATSo6ycyZiAiusVwISLd/6agxhgA85IAuONjvIUAmBKcmY+bCFCK xrvdyzSPmIxV0AmC4QwBmOcqE16YAFXdDS0oypcr97SJWE/bajmjXgM43fHREmv5fhGInwnARdbQ wk+dnCiYBC/TUuT1mwBDDYYbBMAmRYZzaC+gE0zEsdYwyf82DYAGNKYdmxl1rG+djyC7xKwC9M16 uq1F1/ptAE6yvl140V3WjRIrQIhVoLTdkG/yc4IFoF0fLWlBm6d7SYBQk2BMgLtZAAHwkfLFi1Sy Oedglcmf4Q3GXlOiMBxJNiI+f9cIQIcfk/EOgUDgPqccYlt7s6NgiQJX7ZXmtAA8r3oN4ns6xxbg RqQEUMsZnf7cvoIIoEHHW5PxlkQBUMu70yNRDIbfC+A/CoAfDOCfpJcp84gnPtpdJuIwEZvYPeNv AXjQZlDXJdDO0M5zL5VL3DlRD4H4sUDs7PbRCwy1RWX4m0uAXH321zABTwnAwwbDwUQBuJ9Oe7Qk UpzGvAmwmnqJXaS0YJjj7nEG4tuhzg9hQ6g5oKAQgBcF4m6XvZyeh4hPkp2/CsAwFY/CVSCkAPY+ vz+99tI+0zQfd9uEggvAh6t4SRGAhgT53V3VZLhLAO4LygO8SH6XXTIEoBcQ9A3rA40APER/a9I7 QvLT+HX8arzDBU/eFQF41GXnqXIMs5XNMMdu8GYrbk2a9B7BVeaQ8ll2fyPOSPPWt0ghAAaYyK/b DY86Ut1MgCxvvYsEdHSlD6havYacumKdzNm5J6pIdXq5Wgb1mGsJAMne+hcaJkBvUnnyklVy1wUZ lcxe/JXqCbQ8eutfaNChhB7++aatvg+OFlLdrOFgHaCKFDEBYgL4BRg4eoJs17N3EEdOnaliO8/f kL0GDffF75S9Bo9Qz6Jnjpwy0xd/d8zEyAlQPaOmbylq2Kylim0+cUmmp6b74nfKiumV5JaT/6hn NmjawhfPeLV25ATYceaqzD1yNog7zl134ttOX/HF75T0DOfzzl33xakOERMg2hgTICZATIDwCtCq cw9JZwM3u2cNVrHtZ67K+k2a++Jeduufn98gs4UvTjM/xSiHcr3x1l16Rk6Alp27+yqkG0Sz9xtv NvPFvezWb9AtBSOfI0C/Qb44fQkREyDaeM8LsOHgcVm3cdNL3htoRYKSIIDN4rkwURIEoLnig1lf HqP3h976FxqhBNhx9pp/a3q7rfDRc0GVpn2+N2frqcu+xhWEc77dqeYAA3GIt/6FRigBXqlRy3c4 qdsoU8W+O35BplZI9cWJPQcOVTmLd+2VCUL44slJ5dV49jbwdgz7JJg1apzMbNM+iEMmTFUx6h1d +g7wxTPbdlCvrihn458nZZuub/lyOvTq45wA74RhFyDaeNcLsO73Y/Kj+UvlsMkzQpJ2oXetANNX bZQVkiv45ovQ5O94619oRFIAWjnSUtNlckq6bDZxvuy4aGsQ28/LlWlVMnTjv3ZfsS8yhBKAuqT3 PyhoYtPx1QcO+eJEWiF0zrKf83zxFXsPBgkwa8Nm1biGI6fIrDwZxH77LsvqrbtajWe4Xl/JL3KE EqBy5Zd83a92vQYqtvnERZkoTF+c2LXvQJWzcPuvvpjmmrzDzudMXLRC+ZpnLwpu/P4rsnqb7ipG FzP13YJiQSgBJsxfJvuPGhvEaSvXO/H3Z3zhixMXbPvJFumSHDx+ii8+dPJ0tYzeSoCwNp4QSoBw 0StA2BtPiBYBItJ4QjQI0HT83KDGF9uEFwr6hxCjZy/wVbC4OSlnpWp0cmolPUmuC2vjCWY5M85E 42JaSpocNC5bjpm9UI6dkyM3/XVKVZKWM/J5uXzPHypOyyPle+MFIb1msxsemcZrmIw3TjDEWVdl ZNaosQd2n5drGzVrfdzt18xs0/4oxfuMGKWuwBSSkWu8Bt34onu8dLuTftJGv+YiP/2uR9/6dJOu vFKcbolRvjdeUArETNM0H/TWJ4YYYigU/gP24kGZ+h2qtAAAAABJRU5ErkJggg== "@ $System_IO_MemoryStream = [System.IO.MemoryStream][System.Convert]::FromBase64String($ImageString) $picturebox.Image = [System.Drawing.Image]::FromStream($System_IO_MemoryStream) $System_IO_MemoryStream = $null $picturebox.Location = New-Object System.Drawing.Point(371, 23) $picturebox.Margin = '4, 4, 4, 4' $picturebox.Name = 'picturebox' $picturebox.Size = New-Object System.Drawing.Size(77, 66) $picturebox.TabIndex = 6 $picturebox.TabStop = $False $textboxOutput.Font = [System.Drawing.Font]::new('Microsoft Sans Serif', '12') $textboxOutput.Location = New-Object System.Drawing.Point(13, 93) $textboxOutput.Margin = '4, 4, 4, 4' $textboxOutput.Name = 'textboxOutput' $textboxOutput.ReadOnly = $True $textboxOutput.Size = New-Object System.Drawing.Size(435, 30) $textboxOutput.TabIndex = 5 $textboxOutput.Text = 'UGFzc3dvcmQxMjMh' $textboxOutput.TextAlign = 'Center' $buttonEncode.Location = New-Object System.Drawing.Point(263, 54) $buttonEncode.Margin = '4, 4, 4, 4' $buttonEncode.Name = 'buttonEncode' $buttonEncode.Size = New-Object System.Drawing.Size(100, 30) $buttonEncode.TabIndex = 4 $buttonEncode.Text = 'Encode' $buttonEncode.UseVisualStyleBackColor = $True $buttonEncode.add_Click($buttonEncode_Click) $radiobuttonDecode.Location = New-Object System.Drawing.Point(107, 54) $radiobuttonDecode.Margin = '4, 4, 4, 4' $radiobuttonDecode.Name = 'radiobuttonDecode' $radiobuttonDecode.Size = New-Object System.Drawing.Size(86, 31) $radiobuttonDecode.TabIndex = 3 $radiobuttonDecode.Text = 'Decode' $radiobuttonDecode.UseVisualStyleBackColor = $True $radiobuttonDecode.add_CheckedChanged($radiobuttonDecode_CheckedChanged) $radiobuttonEncode.Checked = $True $radiobuttonEncode.Location = New-Object System.Drawing.Point(13, 54) $radiobuttonEncode.Margin = '4, 4, 4, 4' $radiobuttonEncode.Name = 'radiobuttonEncode' $radiobuttonEncode.Size = New-Object System.Drawing.Size(86, 31) $radiobuttonEncode.TabIndex = 2 $radiobuttonEncode.Text = 'Encode' $radiobuttonEncode.UseVisualStyleBackColor = $True $radiobuttonEncode.add_CheckedChanged($radiobuttonEncode_CheckedChanged) $textboxInput.ImeMode = 'NoControl' $textboxInput.Location = New-Object System.Drawing.Point(138, 23) $textboxInput.Margin = '4, 4, 4, 4' $textboxInput.Name = 'textboxInput' $textboxInput.Size = New-Object System.Drawing.Size(225, 23) $textboxInput.TabIndex = 1 $textboxInput.Text = 'Password123!' $labelStringToEncode.AutoSize = $True $labelStringToEncode.Location = New-Object System.Drawing.Point(13, 26) $labelStringToEncode.Margin = '4, 0, 4, 0' $labelStringToEncode.Name = 'labelStringToEncode' $labelStringToEncode.Size = New-Object System.Drawing.Size(117, 17) $labelStringToEncode.TabIndex = 0 $labelStringToEncode.Text = 'String to Encode:' $toolstripstatuslabel.Name = 'toolstripstatuslabel' $toolstripstatuslabel.Size = New-Object System.Drawing.Size(160, 20) $toolstripstatuslabel.Text = 'Powered by vcloud-lab.com' $statusstrip.ResumeLayout() $picturebox.EndInit() $formEncodeDecodeString.ResumeLayout() $InitialFormWindowState = $formEncodeDecodeString.WindowState $formEncodeDecodeString.add_Load($Form_StateCorrection_Load) $formEncodeDecodeString.add_FormClosed($Form_Cleanup_FormClosed) $formEncodeDecodeString.ShowDialog() | Out-Null |
When working with Terraform you can use below code to encode and decode given string.
locals { original_string = "Password123!" // The string you want to encode encoded_string = base64encode(local.original_string) } output "encoded_output" { value = local.encoded_string } ######################################################################################## locals { existing_encoded_string = "UGFzc3dvcmQxMjMh" // This is "Password123!" Base64 encoded decoded_string = textdecodebase64(local.existing_encoded_string, "UTF-8") } output "decoded_output" { value = local.decoded_string } ######################################## Result ############################################### terraform plan Changes to Outputs: + decoded_output = "Password123!" + encoded_output = "UGFzc3dvcmQxMjMh" You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure. ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
Useful Articles
Get Nutanix virtual machine details using PowerShell #AHV #AOS
From Manual to Automated - Managing Dell iDRAC Power via Redfish API and PowerShell
Turn Your PowerShell Into a Web Server: Instantly Share Local HTML & Files!
Monitoring Dell Server Health Using RACADM CLI: Sensor Info from iDRAC
PowerShell Create and Export Self-Signed RSA Certificates (PFX, CER, PEM)
How to create byte array in PowerShell
Automate Intune MDM Device Sync: A PowerShell Script for Microsoft Graph API
Streamlining Intune MDM Device Management with Microsoft Graph and PowerShell
PowerShell & Microsoft Graph API: Automate Full Intune Devices Sync more than 1000 Pagination
Self-Signed Certificates Made Easy with PowerShell GUI

