来自 SecureString 的密码使脚本挂起
Password from SecureString makes the script hanging
$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'
有什么建议吗?我不认为我输入了错误的密码,因为我输入了好几次。此外,如果密码输入错误,我会收到一条错误消息。
顺便说一句,脚本的objective是将文件传输到linux框。
如评论中所述,.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)
将字符串转换为字节和 returns 指向它所在位置的指针
下一部分[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 密码。
$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'
有什么建议吗?我不认为我输入了错误的密码,因为我输入了好几次。此外,如果密码输入错误,我会收到一条错误消息。 顺便说一句,脚本的objective是将文件传输到linux框。
如评论中所述,.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)
将字符串转换为字节和 returns 指向它所在位置的指针
下一部分[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 密码。