[求助]怎么样利用WMI向一个远程机器的C盘根目录COPY一个文件,谢谢
rt 问题点数:100、回复次数:15Top
1 楼sfanpu(Erick Shuai)回复于 2006-03-09 23:29:27 得分 0
顶一下Top
2 楼sfanpu(Erick Shuai)回复于 2006-03-10 09:59:17 得分 0
顶
Top
3 楼jrl5365(king007)回复于 2006-03-10 10:07:52 得分 0
帮顶,学习一下Top
4 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-10 10:09:38 得分 10
http://www.microsoft.com/technet/scriptcenter/guide/sas_fil_ixpv.mspxTop
5 楼pgy8288(Just Coding)回复于 2006-03-10 10:12:08 得分 10
2003里:管理工具->远程桌面->添加一个连接
登陆后,在左边的导航栏设置属性->其他->选中登陆远程计算机时自动映射本地驱动器
注销后再登陆,可以看到本地的驱动器了Top
6 楼zhongkeruanjian(编程亮子)回复于 2006-03-10 10:23:33 得分 20
Set sh = CreateObject("wscript.shell")
sh.run "net use \\xxx.xxx.xxx.xxx\c$\ admin /user:admin"
sh = null
' VBScript source code
Const source_Folder = "C:\"
Const aim_Folder = "\\xxx.xxx.xxx.xxx\c$\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = aim_Folder
Set objFolder = objFSO.GetFolder(objStartFolder)
Set colFiles = objFolder.Files
For Each objFile in colFiles
If objFile.Attributes AND 1 Then
objFile.Attributes = objFile.Attributes XOR 1
End If
Next
'Copy StartFolder Files
Const OverWriteFiles = True
Set sourceStartFolder = objFSO.GetFolder(source_Folder)
ShowSubfolders objFSO.GetFolder(sourceStartFolder)
Set sourceStartFolderFiles = sourceStartFolder.Files
If sourceStartFolderFiles.count > 0 Then
objFSO.CopyFile source_Folder&"\*.*" , aim_Folder, OverWriteFiles
End IF
Wscript.Echo "Good"
Sub ShowSubFolders(Folder)
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each Subfolder in Folder.SubFolders
Set objFolder = objFSO.GetFolder(Subfolder.Path)
If objFSO.FolderExists(aim_Folder&"\"&objFolder.Name) Then
If objFolder.Name <> "DLLs" And objFolder.Name <> "DataBase" Then
Set colFiles = objFolder.Files
For Each objFile in colFiles
If objFSO.GetExtensionName(source_Folder&"\"&objFolder.Name&"\"&objFile.Name) <> "cs" AND objFSO.GetExtensionName(source_Folder&"\"&objFolder.Name&"\"&objFile.Name) <> "pdb" Then
If objFSO.FileExists(aim_Folder&"\"&objFolder.Name&"\"&objFile.Name) Then
Set aimFile = objFSO.GetFile(aim_Folder&"\"&objFolder.Name&"\"&objFile.Name )
If objFile.DateLastModified>aimFile.DateLastModified Then
If aimFile.Attributes AND 1 Then
aimFile.Attributes = aimFile.Attributes XOR 1
End If
objFSO.CopyFile source_Folder&"\"&objFolder.Name&"\"&objFile.Name , aim_Folder&"\"&objFolder.Name&"\", OverWriteFiles
End If
Else
objFSO.CopyFile source_Folder&"\"&objFolder.Name&"\"&objFile.Name , aim_Folder&"\"&objFolder.Name&"\", OverWriteFiles
End if
End if
Next
End If
Else
If objFolder.Name <> "DLLs" And objFolder.Name <> "DataBase" Then
objFSO.CopyFolder source_Folder&"\"&objFolder.Name,aim_Folder&"\"&objFolder.Name,OverWriteFiles
End If
End If
Next
End Sub
Top
7 楼zhongkeruanjian(编程亮子)回复于 2006-03-10 10:24:46 得分 0
这是我以前给远程机器上传文件的方法。比如文件对比等,你看看,可能有帮助。Top
8 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2006-03-10 10:29:56 得分 50
用wmi不是很好,有很多限制
还是用net use 命令好一些,只要知道用户名密码
public static bool Ping(string remoteHost)
{
bool Flag = false;
Process proc = new Process();
try
{
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
string dosLine = @"ping -n 1 " + remoteHost;
proc.StandardInput.WriteLine(dosLine);
proc.StandardInput.WriteLine("exit");
while (proc.HasExited == false)
{
proc.WaitForExit(500);
}
string pingResult = proc.StandardOutput.ReadToEnd();
if (pingResult.IndexOf("(0% loss)") != -1)
{
Flag = true;
}
proc.StandardOutput.Close() ;
}
catch (Exception ex)
{
}
finally
{
try
{
proc.Close();
proc.Dispose();
}
catch
{
}
}
return Flag;
}
public static bool Connect(string remoteHost, string userName, string passWord)
{
if(!Ping(remoteHost))
{
return false;
}
bool Flag = true;
Process proc = new Process();
try
{
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
string dosLine = @"net use \\" + remoteHost + " " + passWord + " " + " /user:" + userName + ">NUL";
proc.StandardInput.WriteLine(dosLine);
proc.StandardInput.WriteLine("exit");
while (proc.HasExited == false)
{
proc.WaitForExit(1000);
}
string errormsg = proc.StandardError.ReadToEnd();
if (errormsg != "")
{
Flag = false;
}
proc.StandardError.Close() ;
}
catch (Exception ex)
{
Flag = false;
}
finally
{
try
{
proc.Close();
proc.Dispose();
}
catch
{
}
}
return Flag;
}Top
9 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2006-03-10 10:34:56 得分 0
连接成功后,用File.Copy就可以了Top
10 楼sfanpu(Erick Shuai)回复于 2006-03-10 14:18:01 得分 0
谢谢各位的解答,我现在已经有怎么做的概念了。
to lovefootball:File.Copy能够把文件Copy到远程计算机上吗?怎么指定在远程计算机上的路径?Top
11 楼csShooter(Sharp Shooter)回复于 2006-03-10 14:24:33 得分 0
markTop
12 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2006-03-13 12:29:51 得分 0
如果你连接远程计算机成功后
你就可以像操作本地机器一样了
只是路径前要加上远程机器的IPTop
13 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2006-03-13 12:34:03 得分 0
File.Copy(sourceFileName , destFileName , overwrite );
sourceFileName
要复制的文件。
destFileName
目标文件的名称。不能是目录。
overwrite
如果可以改写目标文件,则为 true;否则为 false。
其中destFileName的值,就是远程机器IP加盘符加文件夹....Top
14 楼zhzuo(秋枫)回复于 2006-03-13 12:42:43 得分 10
先使用Wmi开通连接,再Copy文件
下面是sdk中的例子。
using System;
using System.Management;
// This example demonstrates how to connect to remote machine
// using supplied credentials.
class Sample_ConnectionOptions
{
public static int Main(string[] args) {
ConnectionOptions options = new ConnectionOptions();
options.Username = UserName; //could be in domain\user format
options.Password = SecurelyStoredPassword;
ManagementScope scope = new ManagementScope(
"\\\\servername\\root\\cimv2",
options);
try {
scope.Connect();
ManagementObject disk = new ManagementObject(
scope,
new ManagementPath("Win32_logicaldisk='c:'"),
null);
disk.Get();
}
catch (Exception e) {
Console.WriteLine("Failed to connect: " + e.Message);
}
return 0;
}
}
Top
15 楼pgy8288(Just Coding)回复于 2006-03-17 09:40:39 得分 0
真是不知者无畏
呵呵
回答的驴头不对马嘴
谢谢楼主给分
哈哈Top




