Skip to content

Instantly share code, notes, and snippets.

@steviecoaster
Last active January 7, 2019 02:54
Show Gist options
  • Save steviecoaster/cb44a5ba32e0f86b8daadf3058672f3b to your computer and use it in GitHub Desktop.
Save steviecoaster/cb44a5ba32e0f86b8daadf3058672f3b to your computer and use it in GitHub Desktop.
Converts a Base64 string into something usable
using namespace System.Management.Automation
using namespace System.Text
class EncodingTransformAttribute : ArgumentTransformationAttribute {
[object] Transform([EngineIntrinsics]$engineIntrinsics, [object] $inputData) {
switch ($inputdata) {
{ $_ -is [System.Text.Encoding]} {
return $_
}
{ $_ -is [String]} {
if ( $_ -in ([Encoding] | Get-Member -Static -MemberType Property).Name ) {
return [System.Text.Encoding]::$_
}
elseif ($_ -in [System.Text.Encoding]::GetEncodings().Name) {
return [System.Text.Encoding]::GetEncoding($_)
}
}
}
throw [ArgumentTransformationMetadataException]::new()
}
}
function ConvertFrom-Base64String {
<#
.SYNOPSIS
Converts a Base64 String into human readable text in your default encoding
.PARAMETER Base64String
.EXAMPLE
ConvertFrom-Base64String "kRlc2NyaXB0aW9uIjogICJKdXN0IHRlc3"
.EXAMPLE
"kRlc2NyaXB0aW9uIjogICJKdXN0IHRlc3" | ConvertFrom-Base64String
#>
[cmdletBinding()]
param(
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
[String]
$Base64String,
[Parameter()]
[ArgumentCompleter(
{
param($Command, $Parameter, $Encoding, $CommandAst, $FakeBoundParams)
$ValidEncodings = ([Encoding] | Get-Member -Static -MemberType Property).Name + [System.Text.Encoding]::GetEncodings().Name | Sort-Object
if(!$Encoding){
return $ValidEncodings
}
else {
return $ValidEncodings.Where{ $_.StartsWith($Encoding) }
}
}
)]
[EncodingTransformAttribute()]
[Encoding]
$Encoding
)
begin {}
process {
$Encoding.GetString([System.Convert]::FromBase64String($Base64String))
}
end {}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment