1

我有点迷路了,我有一个任务是从网络域中获取所有文件夹,例如(我的网上邻居/整个网络/Microsoft Windows 网络/xyNetwork)。

我必须获取所有文件夹和子文件夹,然后获取分配给该文件夹的所有安全组以及授予每个安全组的权限。

我之前做过的第二部分,然而,获取所有文件夹列表的第一部分似乎非常复杂。

任何可能有帮助的指南或参考资料?

4

2 回答 2

2

好吧,另一个类似条目中有一个代码列出了网络中的所有计算机名称......这是您要求的第一部分。对于第二部分,我认为您需要深入System.DirectoryServices研究类,因为也有一些权限......祝你好运。

//Lists all available computer names on the network.
public static List<String> ListNetworkComputers()
{
    var computerNames = new List<String>();
    var computerSchema = "Computer";

    var entries = new System.DirectoryServices.DirectoryEntry("WinNT:");
    foreach (var domains in entries.Children)
    {
        foreach (var computer in domains.Children)
        {
            if (computer.SchemaClassName.ToLower().Contains(computerSchema .ToLower()))
            {
                computerNames.Add(computer.Name);
            }
        }
    }

    return computerNames;
}

我刚刚打印出这些值,它对我来说效果很好。

foreach (string lst in ListNetworkComputers())
{
    Console.WriteLine("PC: " + lst);
}

(以上代码取自:Getting computer names from my network places

您需要的是从您的代码中访问 Win32_Share WMI。添加对 System.Management.dll 的引用并使用以下代码。

来自此处主题的 VB.NET 中的代码示例: http ://www.pcreview.co.uk/forums/finding-share-s-directory-spec-t3064222.html

VB.net程序的C#版本:

class Program
{
    static void Main(string[] args)
    {
        var objClass = new System.Management.ManagementClass("Win32_Share");

        foreach(var objShare in objClass.GetInstances())
        {
            Console.WriteLine(String.Format("{0} -> {1}", 
                objShare.Properties["Name"].Value, objShare.Properties["Path"].Value));
        }
    }
}

您可以将上面代码的结果与通过在 Windows 命令提示符下运行以下命令获得的结果进行比较:

C:\net share

这将为您提供共享名称(共享时给出的共享名称,即 MySharedDir)和资源(Windows 路径,即 C:\myshareddir)。

于 2013-01-15T15:54:37.580 回答
0

你可以简单地使用GetDirectories. 例如:

var folders = Directory.GetDirectories(@"\\server\share");

要获取所有目录(即包括子目录),请使用以下命令:

var folders = Directory.GetDirectories(@"\\server\share", "*", SearchOption.AllDirectories));
于 2013-01-15T15:18:15.547 回答