2012-01-16 99 views
3

长话短说,我的应用程序需要将文件复制到远程目标,UNC可能无法连接到目标。但是,从目标和BACK到服务器的UNC连接始终是可能的。所以计划是使用WMI启动远程命令外壳(cmd)并使用copy命令来获取文件。但这不起作用。当距离目标的命令行手动执行下面的命令正常工作:WMI远程进程复制文件

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 

任何想法,为什么这个ISN没有工作?还是有人有更好的方式做我想做的事情?

回答

3

出于安全原因,大多数以编程方式连接到远程计算机并告诉它将文件从另一台计算机复制到自身的方法都被阻止。终于为我工作的一件事是FTP。使用上面的代码中,我可以做这样的事情:

InputParameters("CommandLine") = "ftp -s:c:\ftpscript.txt" 

这将导致FTP命令行实用程序在远程机器上运行,用c:\ ftpscript.txt摆脱命令的列表。由于没有办法到FTP脚本文件复制到目标(同样不UNC连接),我可以先做:

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

而这个工程:)

UPDATE:从来没有想过使用XCOPY和它完美的作品:

InputParameters("CommandLine") = "cmd /c echo F | xcopy remotefile localfile" 

UPDATE:XCOPY昨天的工作,现在没有。没有什么改变,所以我完全丧失了解释。

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