长话短说,我的应用程序需要将文件复制到远程目标,在该目标中可能无法与目标建立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
为什么这不起作用的任何想法?或者有没有人有更好的方法来做我想做的事情?
答案 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