Обработка специальных символов в строке пароля - PullRequest
0 голосов
/ 04 мая 2020

У меня есть строка. Иногда это выглядит так:

9xABp '} H9 $ G (@

А иногда это выглядит так:

9xABp "} H9 $ G (@

Я не могу контролировать набор символов, используемый для генерации строки, но мне нужно, чтобы Powershell перестал жаловаться на невозможность синтаксического анализа строки и выдал мне все символы.

$string = '9xABp'}H9$G(@'
$secure = ConvertTo-SecureString -String $string -AsPlainText -Force
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

Это не работает, поэтому я попытался заключить строку в двойные кавычки, а не в одинарные.

$string = "9xABp'}H9$G(@"
$secure = ConvertTo-SecureString -String $string -AsPlainText -Force
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

Это нормально, но $ G не включен (заменен backsla sh), и что делать, если в моей строке есть двойные кавычки внутри?

Я пробовал использовать [Regex] :: Escape ().

$string = "9xABp'}H9$G(@"
$secure = ConvertTo-SecureString -String ([Regex]::Escape($string)) -AsPlainText -Force
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

Но $ G по-прежнему отсутствует. Еще одна попытка, на этот раз с двойными и одинарными кавычками снаружи.

$string = "'9xABp'}H9$G(@'"
$secure = ConvertTo-SecureString -String ([Regex]::Escape($string)) -AsPlainText -Force
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

Что я могу здесь сделать?

1 Ответ

2 голосов
/ 04 мая 2020

Строка PowerShell существует как раз для такого случая.

$string = @"
'9xABp'}H9$G(@'
"@

Символы @" и "@ должны находиться в отдельной строке, но допускать использование любых символов внутри них.

Edit

Спасибо Майку Клементу за напоминание о варианте с одинарной кавычкой, который следует использовать, если ваш пароль может содержать $ или другой символ, имеющий значение в PowerShell.

$string = @'
'9xABp'}H9$G(@'
'@

Это работает так же, как и предыдущая здесь-строка, но эта не расширяет переменную и лучше подходит.

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