WMI удаленный процесс для копирования файла
Короче говоря, моему приложению необходимо скопировать файл в удаленную цель, где UNC-подключения к цели могут быть невозможны. Однако UNC-соединения ОТ цели и НАЗАД к серверу всегда будут возможны. Поэтому планировалось использовать WMI для запуска удаленной командной оболочки (cmd) и использовать команду copy, чтобы получить файл. Но это не работает. Следующая команда работает нормально, когда выполняется вручную из командной строки цели:
copy \\192.168.100.12\c$\remotefile.txt c:\localfile.txt
Но когда я пытаюсь эту же команду как часть InputParameters("CommandLine")
это не работает, и не выдает ошибки. Обратите внимание, что я могу использовать WMI для подключения к цели, и удаленное выполнение прекрасно работает, так как я могу запустить calc.exe и т. Д. Вот код, который не работает:
Dim ConnectionOptions As New System.Management.ConnectionOptions
With ConnectionOptions
.Username = "target\Administrator"
.Password = "password"
End With
Dim ManagementScope As New System.Management.ManagementScope("\\192.168.100.11\root\cimv2", ConnectionOptions)
Try
ManagementScope.Connect()
MsgBox("connected")
Dim ManagementPath As New System.Management.ManagementPath("Win32_Process")
Dim ManagementOptions As New System.Management.ObjectGetOptions
Dim ManagementClass As New System.Management.ManagementClass(ManagementScope, ManagementPath, ManagementOptions)
Dim InputParameters As System.Management.ManagementBaseObject = ManagementClass.GetMethodParameters("Create")
InputParameters("CommandLine") = "cmd /c copy \\192.168.100.12\c$\remotefile.txt c:\localfile.txt"
Dim OutputParameters As System.Management.ManagementBaseObject = ManagementClass.InvokeMethod("Create", InputParameters, Nothing)
MsgBox("done")
Catch ex As Exception
MsgBox(ex.Message)
End Try
Есть идеи, почему это не работает? Или у кого-нибудь есть лучший способ сделать то, что я пытаюсь сделать?
2 ответа
Откровенно говоря, вы должны отдать себе должное, так как созданный вами метод, вероятно, является первым в мире, который обошел ограничения WMI удаленного копирования файлов! Я провел 3 недели в поисках информации / обходного пути, а у вас работает только один! Если бы у меня были какие-либо вопросы, я бы проголосовал за ваше решение...
Я создал полностью рабочий скрипт VBS & WMI на основе вашего метода:
InputParameters("CommandLine") = "cmd /c echo myFTPCommands > c:\ftpscript.txt"
где вы заменяете myFTPCommands по мере необходимости любым скриптом, который вы хотите поместить в файл c:\ftpscript.bat (или.vbs, .ps1, или как вам угодно). Если вам не удалось разместить достаточно текста в однострочном скрипте, добавьте тот же метод, используя >>. Теперь вы можете использовать XCOPY, PSEXEC, COPY или что-либо еще, чтобы запустить скрипт, который вы только что создали в файловой системе удаленного хоста.
Вот мой полностью отлаженный VBScript с использованием вашего метода. Еще раз спасибо.:)
HTH, Лиз
По соображениям безопасности большинство методов программного соединения с удаленным компьютером и указания ему скопировать файл себе с другого компьютера заблокированы. Одна вещь, которая наконец-то сработала для меня, это FTP. Используя приведенный выше код, я могу сделать что-то вроде этого:
InputParameters("CommandLine") = "ftp -s:c:\ftpscript.txt"
Что заставляет утилиту командной строки ftp запускаться на удаленном компьютере, используя c: \ ftpscript.txt для получения списка команд. Поскольку нет способа скопировать файл сценария ftp в цель (опять же, нет соединения UNC), я сначала могу сделать:
InputParameters("CommandLine") = "cmd /c echo myFTPCommands > c:\ftpscript.txt"
И это работает:)
ОБНОВЛЕНИЕ: никогда не думал, что использовать XCOPY
и работает отлично
InputParameters("CommandLine") = "cmd /c echo F | xcopy remotefile localfile"
ОБНОВЛЕНИЕ: XCOPY работал вчера, теперь нет. НИЧЕГО не изменилось, поэтому я в полном недоумении для объяснения.