控制台应用程序无法以域管理员身份读取基于访问权限的枚举的完整目录列表

Console App cannot read full directory listing for access based enumberation as domain admin

我有一个控制台应用程序正在模拟域管理员或 运行s 作为域管理员。它应该读取启用了基于访问的枚举的文件夹中的所有目录名称,然后对这些文件夹应用一些权限。获取目录的应用程序部分是:

        string dirPath = ConfigurationManager.AppSettings["EPath"] + @"2019 Working Files";

        DirectoryInfo di = new DirectoryInfo(dirPath);
        DirectoryInfo[] directories = di.GetDirectories();

        foreach (DirectoryInfo dir in directories)
        {
            // Doing something...

        }

我已经登录到需要 运行 作为本地和域管理员的服务器并且 运行 这个。我还尝试过模拟相同的用户,检索到的只是 6500 多个目录信息项中的 45 个。我用来模拟管理员的代码是:

        string impersonatedUserName = ConfigurationManager.AppSettings["EstimatingPathUser"].ToString();
        string impersonationDomain = ConfigurationManager.AppSettings["EstimatingPathDomain"].ToString();
        string impersonatedUserPassword = ConfigurationManager.AppSettings["EstimatingPathPassword"].ToString();
        SafeTokenHandle safeTokenHandle;

        string dirPath = ConfigurationManager.AppSettings["EPath"] + @"2019 Working Files";

        DirectoryInfo di = new DirectoryInfo(dirPath);
        DirectoryInfo[] directories = di.GetDirectories();

        if (LogonUser(impersonatedUserName, impersonationDomain, impersonatedUserPassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out safeTokenHandle))
        {
            directories = di.GetDirectories();

        }

        foreach (DirectoryInfo dir in directories)
        {
            // Doing something...
        }

我什至试过冒充所有文件夹的所有者。似乎没有任何效果。

通常这样做没问题 - 刚刚测试过

也许您可以像这样检查您对丢失的文件夹之一的权限:

System.Security.AccessControl.DirectorySecurity ds = Directory.GetAccessControl(文件夹路径);

您也可以尝试 运行 您的应用 'as administrator' 也许这有帮助

请告诉我

一夜之间服务器重新启动,应用程序现在可以正常运行。找到并处理了所有 6519 个文件夹。