Ответ 1
$Пароль является Securestring, и это вернет пароль обычного текста.
[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password))
У меня есть script Я пишу, что делает подключение к службе SOAP. После того, как соединение выполнено, мне нужно передать имя пользователя/пропуск с каждой передаваемой мной командой. Проблема в том, что когда я использую read-host для этого, мой пароль отображается в открытом виде и остается в оболочке:
PS C:\Users\Egr> Read-Host "Enter Pass"
Enter Pass: MyPassword
MyPassword
Если я скрою его с помощью -AsSecureString, это значение больше не будет передано службе, поскольку теперь это объект System.Security.SecureString:
PS C:\Users\gross> Read-Host "Enter Pass" -AsSecureString
Enter Pass: **********
System.Security.SecureString
Когда я передаю это, он не работает. Я не забочусь о том, чтобы пароли передавались в службу в открытом виде, я просто не хочу, чтобы они зависали в пользовательской оболочке после ввода пароля. Возможно ли скрыть ввод Read-Host, но все еще есть пароль, который хранится в виде открытого текста? Если нет, есть ли способ передать объект System.Security.SecureString в виде открытого текста?
Спасибо
$Пароль является Securestring, и это вернет пароль обычного текста.
[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password))
Вы можете сохранить пароль (ввод) в качестве переменной и передать его в свою службу. Если код запускается в script или как функция, переменная, содержащая пароль, будет удалена после ее завершения (они хранятся в локальной области temp.). Если вы запускаете команды в консоли (или dot-source script как . .\myscript.ps1
), переменная пароля останется в области сеанса, и они будут сохранены до тех пор, пока вы ее не удалите или не закроете. Если вы хотите убедиться, что переменная удалена после запуска script, вы можете удалить ее самостоятельно. Вот так:
#Get password in cleartext and store in $password variable
$password = Read-Host "Enter Pass"
#run code that needs password stored in $password
#Delete password
Remove-Variable password
Чтобы узнать больше о том, как хранятся переменные в области, просмотрите about_Scopes