Как получить текстовый файл с SFTP-сервера и сохранить в локальном VBScript - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь получить текстовый файл с SFTP-сервера и сохранить его на моем локальном компьютере.

Примечание. Код необходим в VBScript.
Это коммерческая версия. Я пытался

Function MISC_FTPUpload(byVal sSite, byVal sUsername, byVal sPassword, byVal sLocalFile, byVal sRemotePath, byRef sError)

Const OpenAsDefault = -2
Const FailIfNotExist = 0
Const ForReading = 1
Const ForWriting = 2
Dim oFTPScriptFSO
Dim oFTPScriptShell
Dim sOriginalWorkingDirectory
Dim sFTPScript
Dim sFTPTemp
Dim bRetCode
Dim sFTPTempFile
Dim oFTPScript
Dim sResults
Dim sOut
Dim sCmd

LOG_Write "MISC_FTPUpload called at: " & Now

Set oFTPScriptFSO = CreateObject("Scripting.FileSystemObject")
Set oFTPScriptShell = CreateObject("WScript.Shell")

sRemotePath = Trim(remothpath)
sLocalFile = Trim(localpath)


If InStr(sRemotePath, " ") > 0 Then
    If Left(sRemotePath, 1) <> """" And Right(sRemotePath, 1) <> """" Then
          sRemotePath = """" & sRemotePath & """"
    End If
End If

If InStr(sLocalFile, " ") > 0 Then
    If Left(sLocalFile, 1) <> """" And Right(sLocalFile, 1) <> """" Then
          sLocalFile = """" & sLocalFile & """"
    End If
End If


If Len(sRemotePath) = 0 Then
    'Please note that no premptive checking of the
    'remote path is done. If it does not exist for some
    'reason, Unexpected results may occur.
    sRemotePath = "\"
End If

If InStr(sLocalFile, "*") Then
    If InStr(sLocalFile, " ") Then
        sError = "Error: Wildcard uploads do not work if the path contains a space." & vbNewLine & "This is a limitation of the Microsoft FTP client."
          LOG_Write sError
          MISC_FTPUpload = False
          Exit Function
    End If
ElseIf Len(sLocalFile) = 0 Or Not oFTPScriptFSO.FileExists(sLocalFile) Then

    sError = "Error: File Not Found."
    LOG_Write sError
    MISC_FTPUpload = False
    Exit Function
End If



sFTPScript = sFTPScript & "option batch on" & vbCRLF
sFTPScript = sFTPScript & "option confirm off"& vbCrLf  
sFTPScript = sFTPScript & "option transfer binary" & vbCrLf
sFTPScript = sFTPScript & "open sftp://" & sftpuser & ":" & passsftp & "@" & sftphostname & vbCrLf
sFTPScript = sFTPScript & "cd " & sftp server path & vbCrLf
sFTPScript = sFTPScript & "put " & localpath & vbCRLF
sFTPScript = sFTPScript & "close" & vbCrLf
sFTPScript = sFTPScript & "exit" & vbCrLf

LOG_Write "Script for FTP File: " & vbNewLine & sFTPScript

sFTPTemp = oFTPScriptShell.ExpandEnvironmentStrings("%TEMP%")
sFTPTempFile = sFTPTemp & "\" & oFTPScriptFSO.GetTempName
LOG_Write "FTP Input file stored at: " & sFTPTempFile


Set oFTPScript = oFTPScriptFSO.CreateTextFile(sFTPTempFile, True)
oFTPScript.WriteLine(sFTPScript)
oFTPScript.Close
Set oFTPScript = Nothing  

sCmd = """C:\Program Files\WinSCP\WinSCP.com"" -script=" & sFTPTempFile 
MISC_RunCmd sCmd, sOut, sError
LOG_Write sOut

Wscript.Sleep 1000


oFTPScriptFSO.DeleteFile(sFTPTempFile)


If sError = ""  And InStr(sOut, "binary") >0  And InStr(sOut, "100%") >0 Then
    MISC_FTPUpload = True
Else
    sError = "Error: " & sError
    LOG_Write sError
    MISC_FTPUpload = False 
End If

Set oFTPScriptFSO = Nothing
Set oFTPScriptShell = Nothing
End Function`

Но я не получаю никакого ответа.

1 Ответ

1 голос
/ 18 октября 2019

Одной из важных проблем в вашем скрипте является то, что он ожидает, что файл C:\Websites\SFTP\put.txt будет существовать локально, прежде чем загружать его:

ElseIf Len(sLocalFile) = 0 Or Not oFTPScriptFSO.FileExists(sLocalFile) Then
    sError = "Error: File Not Found."
    LOG_Write sError
    MISC_FTPUpload = False
    Exit Function
End If

Если файл не существует, ваш код завершится здесь.

Еще одна вещь состоит в том, что ваша функция получает параметры (sSite, sUsername, sPassword и т. Д.), Которые вы должны использовать в функции. Вместо этого вы сразу перезаписываете sRemotePath и sLocalFile. Это может быть связано с тем, что вы устраняли неполадки, но другие параметры тоже не используются.

Существуют и другие проблемы с кавычками в следующих строках:

sFTPScript = sFTPScript & "open sftp://" & buildsftp & ":" & 9D2GRGCu & "@" & sftp-qa.ebs.thomsonreuters.com & vbCrLf
sFTPScript = sFTPScript & "cd " & \\sftp-qa.ebs.thomsonreuters.com\dummy\ldapfulltab.txt & vbCrLf
sFTPScript = sFTPScript & "put " & C:\Websites\SFTP\put.txt & vbCRLF

Должно быть как минимум так, но вы должны использовать свои параметры здесь:

sFTPScript = sFTPScript & "open sftp://" & buildsftp & ":" & "9D2GRGCu" & "@" & "sftp-qa.ebs.thomsonreuters.com" & vbCrLf
sFTPScript = sFTPScript & "cd " & "\\sftp-qa.ebs.thomsonreuters.com\dummy\ldapfulltab.txt" & vbCrLf
sFTPScript = sFTPScript & "put " & sLocalFile & vbCrLf
...