WMI удаленный процесс для копирования файла - PullRequest
3 голосов
/ 16 января 2012

Короче говоря, моему приложению необходимо скопировать файл в удаленную цель, где 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 ]

4 голосов
/ 28 августа 2012

Откровенно говоря, на самом деле вы должны отдать себе должное, поскольку созданный вами метод, вероятно, является первым в истории, который обошел ограничения WMI по удаленному копированию файлов! Я провел 3 недели в поисках информации / обходного пути, а у вас работает только один! Если бы у меня были какие-либо вопросы, я бы проголосовал за ваше решение ...

Я создал полностью рабочий скрипт VBS & WMI на основе вашего метода:

 InputParameters("CommandLine") = "cmd /c echo myFTPCommands > c:\ftpscript.txt"

, где вы заменяете myFTPCommands по мере необходимости любым скриптом, который вы хотите поместить в файл c: \ ftpscript.bat (или .vbs, .ps1, или как вам угодно). Если вам не удалось разместить достаточно текста в однострочном скрипте, добавьте тот же метод, используя >>. Теперь вы можете использовать XCOPY, PSEXEC, COPY или что-либо еще для запуска только что созданного сценария в файловой системе удаленного хоста.

Вот мой полностью переработанный VBScript с использованием вашего метода. Еще раз спасибо. :)

НТН, Lizz

3 голосов
/ 18 января 2012

В целях безопасности большинство методов программного соединения с удаленным компьютером и указания ему скопировать файл себе с другого компьютера заблокированы. Наконец-то у меня сработало 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 вчера работал, теперь нет. НИЧЕГО не изменилось, поэтому я в полном недоумении для объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...