mirror of
https://github.com/PowerShell/PowerShell
synced 2026-06-08 12:12:50 +00:00
Add -AsPlainText to ConvertFrom-SecureString (#11142)
This commit is contained in:
committed by
Aditya Patwardhan
parent
5605bf4195
commit
03f10f052d
@@ -139,6 +139,12 @@ namespace Microsoft.PowerShell.Commands
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a switch to get the secure string as plain text.
|
||||
/// </summary>
|
||||
[Parameter(ParameterSetName = "AsPlainText")]
|
||||
public SwitchParameter AsPlainText { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Processes records from the input pipeline.
|
||||
/// For each input object, the command encrypts
|
||||
@@ -165,6 +171,19 @@ namespace Microsoft.PowerShell.Commands
|
||||
{
|
||||
encryptionResult = SecureStringHelper.Encrypt(SecureString, Key);
|
||||
}
|
||||
else if (AsPlainText)
|
||||
{
|
||||
IntPtr valuePtr = IntPtr.Zero;
|
||||
try
|
||||
{
|
||||
valuePtr = Marshal.SecureStringToGlobalAllocUnicode(SecureString);
|
||||
exportedString = Marshal.PtrToStringUni(valuePtr);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Marshal.ZeroFreeGlobalAllocUnicode(valuePtr);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
exportedString = SecureStringHelper.Protect(SecureString);
|
||||
@@ -342,22 +361,8 @@ namespace Microsoft.PowerShell.Commands
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!Force)
|
||||
{
|
||||
string error =
|
||||
SecureStringCommands.ForceRequired;
|
||||
Exception e = new ArgumentException(error);
|
||||
WriteError(new ErrorRecord(e, "ImportSecureString_ForceRequired", ErrorCategory.InvalidArgument, null));
|
||||
}
|
||||
else
|
||||
{
|
||||
// The entire purpose of the SecureString is to prevent a secret from being
|
||||
// permanently stored in memory as a .Net string. If they use the
|
||||
// -AsPlainText and -Force flags, they consciously have made the decision to be OK
|
||||
// with that.
|
||||
importedString = new SecureString();
|
||||
foreach (char currentChar in String) { importedString.AppendChar(currentChar); }
|
||||
}
|
||||
importedString = new SecureString();
|
||||
foreach (char currentChar in String) { importedString.AppendChar(currentChar); }
|
||||
}
|
||||
}
|
||||
catch (ArgumentException e)
|
||||
|
||||
Reference in New Issue
Block a user