Пароль от SecureString заставляет скрипт зависать - PullRequest
0 голосов
/ 09 мая 2019
$password = Get-Content 'c:\temp\tmp1\pw.dat' | ConvertTo-SecureString 
& "C:\Program Files\PuTTY\pscp.exe" -P 2222 -pw $password 'c:\temp\tmp1\test.txt' 'root@localhost:/home/root/temp'

Приведенный выше код просто завис; Однако приведенный ниже код работал.

$password='mypw'
& "C:\Program Files\PuTTY\pscp.exe" -P 2222 -pw $password 'c:\temp\tmp1\test.txt' 'root@localhost:/home/root/temp'

Есть предложения? Я не думаю, что я набрал пароль неправильно, так как я сделал это несколько раз. Кроме того, я ожидаю сообщение об ошибке, если пароль был введен неправильно. Кстати, цель скрипта - перенести файл в ящик linux.

1 Ответ

1 голос
/ 09 мая 2019

Как указано в комментарии, файл .dat создается с использованием

read-host -AsSecureString | ConvertFrom-SecureString | out-file

Итак, я знаю, что я могу это сделать двумя способами.

$EncryptedString = read-host -AsSecureString | ConvertFrom-SecureString

$SecureString = $EncryptedString | ConvertTo-SecureString

$Pointer = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString)

$PlainTextPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($Pointer)

$PlainTextPassword

Секрет здесь - [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString), который превращает строку в байты и возвращает указатель на то, где она находится

Следующая часть [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($Pointer) переходит к указателю и превращает байты в строку.

Другой способ - превратить защищенную строку в PSCredential.

$EncryptedString = read-host -AsSecureString | ConvertFrom-SecureString

$SecureString = $EncryptedString | ConvertTo-SecureString

$PlainTextPassword = ([PsCredential]::new("DoesntMatter",$SecureString)).GetNetworkCredential().Password

$PlainTextPassword

Это превращает защищенную строку в PSCredential, где вы можете получить пароль NetworkCredential в виде простого текста.

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