Как указано в комментарии, файл .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 в виде простого текста.