寻找更好的删除远程计算机上的文件夹的过程

时间:2013-08-07 15:05:48

标签: c# windows file-io remote-server

我正在使用一个小工具来删除域计算机中的旧用户配置文件。

基本上,我遇到的问题是寻找一个更好的删除远程目录的过程。

我知道我可以使用System.IO并从UNC路径中删除它,但我对网络删除的性能不满意。删除中等大小的配置文件可能需要数小时,如果有数十个或数百个配置文件或计算机,则这不可行作为解决方案。

So this appears to be out of the question

我能找到的最好的似乎是PSExec调用,但我想要管理一些东西。

是否有任何.NET类可以调用远程机器来完成目录的删除而不是依赖于调用机器?

2 个答案:

答案 0 :(得分:1)

如果客户端计算机未将此检测为病毒,则可以使用它在网络计算机上执行远程命令,包括删除文件夹:

PsExec v1.98

  

<强>简介

     

像Telnet这样的实用程序和Symantec的PC等远程控制程序   Anywhere允许您在远程系统上执行程序,但它们可以是一个   设置的痛苦,并要求您在上安装客户端软件   您希望访问的远程系统。 PsExec重量轻   telnet替换,允许您在其他系统上执行进程,   完整的控制台应用程序的完全交互性,没有   必须手动安装客户端软件。 PsExec最强大   用途包括在远程系统上启动交互式命令提示   和IpConfig等远程启用工具,否则没有   能够显示有关远程系统的信息。

我不知道它是如何运作的。在.NET代码中,想法是将RPC调用发送到您控制的远程应用程序,如果已经在目标计算机上运行了所述应用程序,这很容易。使用的机制是.NET Remoting或WCF。

答案 1 :(得分:1)

this answer的启发,我做了一些小修改。我无法让它运行100%托管,因为当我尝试从代码本身运行The storage control block address is invalid - 命令时,我收到错误代码9(rd)。

在我的小型测试设置中基本功能非常快,但考虑到你否决了“你确定吗?”提示,如果你指定错误的路径也是相当危险的,所以在你继续时戴上你的安全帽:

如果你在任何命令shell中执行echo Y | rd /S c:\Temp\test,你将很快删除C:\ Temp \ Test及其下面的任何内容,而不会发出警告。

但直接在代码中执行此解决方案不起作用。所以我的快速修复是在机器上放置一个bat文件(称为DeleteTest.bat),只包含这一行,然后通过WMI执行bat文件。

在我的小测试中,它会在一秒左右的时间内删除约900个文件,总共约200 MB。

另外,除了引用的答案之外,我还得到了返回代码,因此我的完整代码变为:

        var processToRun = new[] { "c:\\Temp\\DeleteTest.bat" };

        var connection = new ConnectionOptions();
        connection.Username = "me";
        connection.Password = "password";
        var wmiScope = new ManagementScope(String.Format("\\\\{0}\\root\\cimv2", "MyRemoteMachine"), connection);
        var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
        var result = wmiProcess.InvokeMethod("Create", processToRun);
        Console.WriteLine(
        "Creation of process returned: " + result);

您显然还需要生成bat文件(通过代码或预生成)并复制到目标,但这应该是微不足道的。