Ошибка PowerShell при преобразовании SecureString обратно в обычный текст - PullRequest
2 голосов
/ 31 января 2020

Как преобразовать SecureString обратно в обычный текст?

Из Пример 4 из Документации Microsoft .

$secureString = ConvertTo-SecureString -String 'Example' -AsPlainText
$secureString # 'System.Security.SecureString'
ConvertFrom-SecureString -SecureString $secureString -AsPlainText # 'Example'

Но когда я пытаюсь сделать следующее:

>> $secureString = ConvertTo-SecureString -String 'Example' -AsPlainText -Force
>> $secureString # 'System.Security.SecureString'
>> ConvertFrom-SecureString -SecureString $secureString -AsPlainText # 'Example'

я получаю эту ошибку:

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

Когда я запускаю эти команды без -AsPlainText возвращает:

01000000d08c9ddf0115d1118c7a00c04fc297eb0100000063db09d0a5a25b4d92484ee7d5911cf90000000002000000000003660000c00000001000000098fcbc0d5e009078dd7a1dfe9f24d3380000000004800000a00000001000000027a7f841c320bc17b5e4febbcd3e49551000000005a133e9f864340d9d7b2473939156ef14000000f889bf5c0fc4799a5aaf435ebb15cd0920f24575

Это проблема Microsoft или она не поддерживается в PowerShell 5.1

Версия PowerShell

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      18362  628

1 Ответ

1 голос
/ 31 января 2020

Это не поддерживается в PowerShell 5.1 . ConvertFrom-SecureString не поддерживает параметр -AsPlainText до PowerShell Core 7+.


Если вы хотите получить строку простого текста из простого текста SecureString в PowerShell до 7, используйте следующие методы:

$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
$plaintext = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)

$plaintext будет вашей строкой открытого текста, преобразованной из SecureString, который вы передали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...