我的excel文件中有一个宏,它使用pscp(putty客户端)将文件上传到我的服务器。
这是代码
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
Dim cstrSftp As String
Dim strCommand As String
Dim pUser As String
Dim pPass As String
Dim pHost As String
Dim pFile As String
Dim pRemotePath As String
'Specifying the values
cstrSftp = """" & Application.ActiveWorkbook.Path & "\pscp.exe" & """"
pUser = "username"
pPass = "password "
pHost = "ftp.xyz.com"
pFile = """" & Application.ActiveWorkbook.Path & "\test.mkv" & """"
pRemotePath = "/home/storage/public_html/"
'Setting the command
strCommand = cstrSftp & " -sftp -l " & pUser & " -pw " & pPass & _
" " & pFile & " " & pHost & ":" & pRemotePath
'Execution
wsh.Run strCommand, windowStyle, waitOnReturn
这很好,但我有两个问题:
1)使用Windows 10,系统会弹出一条消息,询问用户是否要运行pscp.exe。我想绕过它。
而不是WScript.Shell我正在使用它:
Call Shell(strCommand, vbNormalFocus)
使用Call Shell操作系统不会询问有关运行pscp.exe的问题,但问题是我无法知道该进程何时结束
2)当用户第一次运行命令时,putty会提示此消息:
服务器的主机密钥未缓存在注册表中。你没有 保证服务器是您认为的计算机。该 server&rs; rsa2 key>指纹是:[ssh-rsa 1024 somekey]如果你 相信这个主人,输入" y"将密钥添加到PuTTY的缓存并携带 在连接上。如果你想只进行一次连接,没有 将密钥添加到缓存中,输入" n"。如果你不相信这个主人, 按Return键放弃连接。将密钥存储在缓存中? (Y / N)
我需要它完全即时免费,自动。
我尝试使用" echo n"像这样:
strCommand =" echo n | " &安培; cstrSftp& " -sftp -l" &安培; pUser& " -pw" &安培; pPass& _ " " &安培; pFile& " " &安培; pHost& ":" &安培; pRemotePath
但是我得到的消息是" IWshShell3"失败。
答案 0 :(得分:-1)
问题2解决了!
Echo是一个批处理文件命令,因此它需要有一个包装器。
此命令有效:
strCommand =“cmd / c echo n |”& cstrSftp& “-sftp -l”& pUser& “-pw”& pPass& _ “”& pFile& “”& pHost& “:”& pRemotePath