Захват вывода объекта оболочки WScript - PullRequest
0 голосов
/ 31 мая 2018

Этот код загружает файл на FTP-сервер, используя Putty

Dim wsh As Object
Dim waitOnReturn As Boolean
Dim windowStyle As Integer
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
Dim site As String
Dim resp As String

Set wsh = VBA.CreateObject("WScript.Shell")

'Wait the execution to finish
waitOnReturn = True

'Show the window
windowStyle = 1

'Variables
cstrSftp = """" & Application.ActiveWorkbook.Path & "\pscp.exe" & """"
site = "http://mysite/"
pUser = "user"
pPass = "password  "
pHost = "ftp.mysite"
pRemotePath = "/home/"
pFile = """" & Application.ActiveWorkbook.Path & "file.png" & """"

'Command string
strCommand = "cmd /c echo n | " & cstrSftp & " -sftp -l " & pUser & " -pw " & pPass & " " & pFile & " " & pHost & ":" & pRemotePath

'Run the command
wsh.Run strCommand, windowStyle, waitOnReturn

Поскольку сервер хранения не является надежным, мне нужно захватить вывод, чтобы узнать, сработала ли загрузка.И, если это не так, мне нужно знать, что это за сообщение.

Я подумал об использовании команды "> C: \ output.txt" для захвата вывода.Вот так

strCommand = strCommand & " > " & """" "C:\output.txt" & """"

Когда загрузка работает, мой выходной файл тоже работает.Но когда загрузка не работает, в выходной файл ничего не записывается.

Например, когда я получаю сообщение Fatal: Server unexpectedly closed network connection, в выходной файл ничего не пишется.Но мне нужно знать, что именно сообщается.

1 Ответ

0 голосов
/ 31 мая 2018

Пример использования exec для получения вывода, может быть, это полезно в вашем случае

Sub TestExec()

Dim wsh As New WshShell
Dim s As String

    s = wsh.Exec("cmd /c Dir C:\ ").StdOut.ReadAll
    Debug.Print s

End Sub
...