C# 正在寻找更好的过程来删除远程计算机上的文件夹

C# 正在寻找更好的过程来删除远程计算机上的文件夹,c#,windows,file-io,remote-server,C#,Windows,File Io,Remote Server,我有一个小实用程序,我正在工作,删除旧的用户配置文件从域机器 基本上,我陷入困境的地方是寻找一个更好的过程来删除远程目录 我知道我可以使用System.IO并将其从UNC路径中删除,但我对网络删除的性能不满意。删除中等大小的配置文件可能需要几个小时,如果有几十个或数百个配置文件或机器,这是不可行的解决方案 我能找到的最好的方法似乎是PSExec调用,但我需要一些管理的东西 是否有任何.NET类可以调用远程计算机来完成目录的删除,而不依赖于调用计算机?如果您的客户端计算机未检测到此病毒,您可以使

我有一个小实用程序,我正在工作,删除旧的用户配置文件从域机器

基本上,我陷入困境的地方是寻找一个更好的过程来删除远程目录

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

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


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

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

导言

Telnet等实用程序和Symantec PC等远程控制程序 任何地方都允许您在远程系统上执行程序,但它们可以是 设置和要求您在服务器上安装客户端软件非常困难 您希望访问的远程系统。PsExec是一种轻量级软件 telnet替换,允许您在其他系统上执行进程, 具有控制台应用程序的完全交互性,无需 必须手动安装客户端软件。PsExec最强大的 用途包括在远程系统上启动交互式命令提示 以及远程启用工具(如IpConfig),这些工具在其他方面没有 能够显示有关远程系统的信息

我不知道它是怎么工作的。在.NET代码中,想法是将RPC调用发送到您控制的远程应用程序,只要您已经在目标计算机上运行了该应用程序,这就很容易了。使用的机制是.NET远程处理或WCF。

受其启发,我做了一些小的修改。我无法使其运行100%托管,因为当我尝试从代码本身运行
rd
-命令时,会出现错误代码9(
存储控制块地址无效)

在我的小型测试设置中,基本功能的速度快得令人眼花缭乱,但是如果您否决了“确定吗?”提示,那么如果您指定了错误的路径,那么这也是相当危险的,因此在继续操作时戴上安全帽:

如果在任何命令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文件(通过代码或预生成)并将其复制到目标,但这应该很简单。

相关:@RobertHarvey谢谢,这正是我希望避免使用common Directory.Delete()方法和任何其他远程删除的原因。我想远程调用远程机器来执行操作。希望这是有道理的。一次200多台机器和超过1GB的多个配置文件真的加起来!您是否考虑过在cmd shell中生成一个进程来执行
rd/s
?为什么要管理一些东西?为什么这需要是一个.NET类?@AndersUP如果我可以在远程PC上完成,是的,这是很好的。是的,我可以,但仍然存在一些问题。(在我的PSExec操作中也提到)一个是PSExec需要在PC上有一个实例,用于每次删除时调用它。。。尽管第二点让我很感兴趣。我假设我可以将可执行文件推送到机器上,使用remoting/WCF,也许还可以使用套接字向“服务器”报告,或者动态调用机器。。。可能比我希望的要复杂,但优点可能是值得的。PsExec页面说它不需要在目标计算机上运行客户端程序。不,不需要,但我正在考虑将类似PsExec的东西写入.NET实用程序。PsExec也有一个非常有趣的EULA,我们广泛使用它,但我不想担心它以后被错误地识别和违反EULA。批处理文件当然很琐碎,看起来它也有潜力。