将 SecureString 转换回纯文本时出现 PowerShell 错误

Ari*_*rik 9 powershell

如何将SecureString转换回纯文本?

例4中的微软文档

$secureString = ConvertTo-SecureString -String 'Example' -AsPlainText
$secureString # 'System.Security.SecureString'
ConvertFrom-SecureString -SecureString $secureString -AsPlainText # 'Example'
Run Code Online (Sandbox Code Playgroud)

但是当我尝试以下操作时:

>> $secureString = ConvertTo-SecureString -String 'Example' -AsPlainText -Force
>> $secureString # 'System.Security.SecureString'
>> ConvertFrom-SecureString -SecureString $secureString -AsPlainText # 'Example'
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ConvertFrom-SecureString : A parameter cannot be found that matches parameter name 'AsPlainText'.
At line:3 char:54
+ ... ertFrom-SecureString -SecureString $secureString -AsPlainText # 'Exam ...
+                                                      ~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [ConvertFrom-SecureString], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.ConvertFromSecureStringCommand
Run Code Online (Sandbox Code Playgroud)

当我在没有-AsPlainText 的情况下运行这些命令时,它返回:

01000000d08c9ddf0115d1118c7a00c04fc297eb0100000063db09d0a5a25b4d92484ee7d5911cf90000000002000000000003660000c00000001000000098fcbc0d5e009078dd7a1dfe9f24d3380000000004800000a00000001000000027a7f841c320bc17b5e4febbcd3e49551000000005a133e9f864340d9d7b2473939156ef14000000f889bf5c0fc4799a5aaf435ebb15cd0920f24575
Run Code Online (Sandbox Code Playgroud)

这是 Microsoft 问题还是 PowerShell 5.1 不支持此问题

PowerShell 版本

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      18362  628
Run Code Online (Sandbox Code Playgroud)

Ben*_*est 21

在 PowerShell 5.1 中不受支持。直到 PowerShell Core 7+ 才ConvertFrom-SecureString支持该
-AsPlainText参数。


如果要从SecureStringPowerShell 7之前的纯文本中获取纯文本字符串,请使用以下方法:

$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
$plaintext = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
Run Code Online (Sandbox Code Playgroud)

$plaintext将是您SecureString传入的明文字符串。