WMI远程进程复制文件

时间:2012-01-16 18:42:08

标签: vb.net wmi

长话短说,我的应用程序需要将文件复制到远程目标,在该目标中可能无法与目标建立UNC连接。但是,从目标和BACK到服务器的UNC连接始终是可能的。所以计划是使用WMI启动远程命令shell(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

为什么这不起作用的任何想法?或者有没有人有更好的方法来做我想做的事情?

1 个答案:

答案 0 :(得分:4)

弗兰克你应该真的给自己信任,因为你创建的方法可能是第一个绕过远程文件复制的WMI限制!我做了3周的搜索信息/解决方法,你的是唯一有效的!如果我有任何积分,我会投票支持你的解决方案......

我创建了一个完全正常工作的VBS& WMI脚本基于您的方法:

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

根据需要将myFTPCommands替换为您想要进入文件c:\ ftpscript.bat(或.vbs,.ps1或您喜欢的任何内容)的任何脚本。如果您在单行脚本中无法输入足够的文本,则使用>>添加相同的方法。现在,您可以使用XCOPY,PSEXEC,COPY或其他任何内容来运行您刚刚在远程主机的文件系统上创建的脚本。

Here's使用您的方法完全充实VBScript。再次感谢。 :)

HTH, LIZZ