ConvertBase64/ConvertFromBase64.cs
+20
-5
diff --git a/ConvertBase64/ConvertFromBase64.cs b/ConvertBase64/ConvertFromBase64.cs
index ef09193..47dc6fe 100644
@@ -3,24 +3,39 @@ using System.Management.Automation;
namespace ConvertBase64;
[Cmdlet(VerbsData.ConvertFrom, "Base64")]
[Cmdlet(VerbsData.ConvertFrom, "Base64", DefaultParameterSetName = TextParameterSet)]
[Alias("cfb")]
[OutputType(typeof(string))]
[OutputType(typeof(string), ParameterSetName = [TextParameterSet])]
[OutputType(typeof(byte[]), ParameterSetName = [BytesParameterSet])]
public sealed class ConvertFromBase64 : Cmdlet
{
private const string TextParameterSet = "Text";
private const string BytesParameterSet = "Bytes";
#nullable disable
[Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true)]
public string Payload { get; set; }
#nullable restore
[Parameter()]
[Parameter(ParameterSetName = TextParameterSet)]
[ValidateSet("UTF7", "UTF8", "UTF32", "ASCII", "Unicode", "BigEndianUnicode", IgnoreCase = false)]
public string Encoding { get; set; } = "UTF8";
[Parameter(ParameterSetName = BytesParameterSet)]
public SwitchParameter OutputBytes { get; set; }
protected override void ProcessRecord()
{
var encoding = EncodingHelper.GetTextEncoding(Encoding);
WriteObject(encoding.GetString(Convert.FromBase64String(Payload)));
var bytes = Convert.FromBase64String(Payload);
if (OutputBytes.IsPresent)
{
WriteObject(bytes, enumerateCollection: false);
}
else
{
var encoding = EncodingHelper.GetTextEncoding(Encoding);
WriteObject(encoding.GetString(bytes));
}
}
}
ConvertBase64/ConvertToBase64.cs
+26
-6
diff --git a/ConvertBase64/ConvertToBase64.cs b/ConvertBase64/ConvertToBase64.cs
index 8a5e385..50007c6 100644
@@ -3,24 +3,44 @@ using System.Management.Automation;
namespace ConvertBase64;
[Cmdlet(VerbsData.ConvertTo, "Base64")]
[Cmdlet(VerbsData.ConvertTo, "Base64", DefaultParameterSetName = TextParameterSet)]
[Alias("ctb")]
[OutputType(typeof(string))]
public sealed class ConvertToBase64 : Cmdlet
public sealed class ConvertToBase64 : PSCmdlet
{
private const string TextParameterSet = "Text";
private const string BytesParameterSet = "Bytes";
#nullable disable
[Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true)]
public string Payload { get; set; }
[Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true, ParameterSetName = TextParameterSet)]
public string Text { get; set; }
[Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true, ParameterSetName = BytesParameterSet)]
public byte[] Bytes { get; set; }
#nullable restore
[Parameter()]
[Parameter(ParameterSetName = TextParameterSet)]
[ValidateSet("UTF7", "UTF8", "UTF32", "ASCII", "Unicode", "BigEndianUnicode", IgnoreCase = false)]
public string Encoding { get; set; } = "UTF8";
protected override void ProcessRecord()
{
var bytes = ParameterSetName switch
{
TextParameterSet => GetTextBytes(),
BytesParameterSet => Bytes,
_ => throw new ArgumentException(
$"Unrecognized parameter set \"{ParameterSetName}\".",
nameof(ParameterSetName)
),
};
WriteObject(Convert.ToBase64String(bytes));
}
private byte[] GetTextBytes()
{
var encoding = EncodingHelper.GetTextEncoding(Encoding);
WriteObject(Convert.ToBase64String(encoding.GetBytes(Payload)));
return encoding.GetBytes(Text);
}
}