1

我正在尝试实现一种使用存储的安全字符串的方法,以便我的 SFTP 密码在脚本中不可见。例如,我想生成一个可以替代使用的变量 $password。我在网上找到了以下示例,但不幸的是我无法让它们工作。我过去做过类似的事情,但可以找到我的笔记或网站链接,解释如何完成任务。

read-host -assecurestring | convertfrom-securestring | out-file C:\securestring.txt 
$pass = cat C:\securestring.txt | convertto-securestring
$mycred = new-object -typename System.Management.Automation.PSCredential -argumentlist "test",$pass

这是我的脚本。如果有人感兴趣,这里是 snapin 的链接。 http://www.k-tools.nl/index.php/sftp-in-powershell/

#Add the SFTP snap-in
Add-PSSnapin KTools.PowerShell.SFTP

#Define some variables
$sftpHost = "ftp.domain.com"
$userName = "user"
$userPassword = "password"

$localFile = "C:\bin\emp1.xlsx"

#Open the SFTP connection
$sftp = Open-SFTPServer -serverAddress $sftpHost -userName $userName -userPassword $userPassword

#Upload the local file to the root folder on the SFTP server
$sftp.Put($localFile)

#Close the SFTP connection
$sftp.Close()

再次感谢大家的帮助!

更新

我试过这个:

$pass = cat c:\bin\ftpcreds.txt | convertto-securestring
$mycred = new-object -typename System.Management.Automation.PSCredential -argumentlist "usertest1",$pass
$sftpHost = "ftp.domain.com"
$userName = $mycred.username
$userPassword = $mycred.password
$sftp = Open-SFTPServer -serverAddress $sftpHost -userName $userName -userPassword $userPassword
$sftp.Put($localFile)
$sftp.Close()

并得到这个错误:

Method invocation failed because [Tamir.SharpSsh.jsch.JSchException] doesn't contain a method named 'Put'.
At C:\bin\SFTP Upload Samples.ps1:21 char:1
+ $sftp.Put($localFile)
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

Method invocation failed because [Tamir.SharpSsh.jsch.JSchException] doesn't contain a method named 'Close'.
At C:\bin\SFTP Upload Samples.ps1:36 char:1
+ $sftp.Close()
+ ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

有什么建议么?

谢谢!

4

1 回答 1

0

如果您的 SFTP 想要使用您的安全密码的解密版本,那么您需要通过以下方式从您的 $mycred 中提取它:

$userpassword = $mycred.getnetworkcredential().password.tostring()
于 2013-08-12T16:33:50.527 回答