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