【问题标题】:C# gpresult /r equivalentC# gpresult /r 等效
【发布时间】:2014-07-08 21:22:45
【问题描述】:

我正在编写一个小应用程序,用于检查计算机和当前用户是否是 Active Directory 中相应安全组的成员。我偶然发现了这个问题LINK,但看起来它被遗忘了,我遇到了与 OP 相同的问题。最终结果是我希望能够创建一个与从命令提示符运行以下命令非常相似的数组。

gpresult /r

这是我从上述链接尝试过的代码示例,在尝试设置 LoggingUser 和 LoggingComputer 时,我遇到了与 OP 相同的错误,特别是“超出范围”异常。因为我无法获得过去这些错误我什至不确定这种方法是否正确。

GPRsop rsop = new GPRsop(RsopMode.Logging, "root\\RSOP\\Computer");
rsop.LoggingComputer = "MyComputer";
rsop.LoggingUser = "domain\\user";
rsop.LoggingMode = LoggingMode.Computer;
rsop.CreateQueryResults();
rsop.GenerateReportToFile(ReportType.Xml, "C:\\Temp\\test.xml");

【问题讨论】:

  • 在 Stack Overflow 上提问之前,您是否研究过这个问题?我可以确切地理解你想要什么,但是你事先尝试过任何代码吗?
  • 是的,正如我上面所说,我发现了一个类似的问题并尝试了建议的答案,但遇到了与 OP 相同的问题。
  • 请您发布您尝试过的代码(不要将其发布在 cmets 中,编辑您的问题并将其添加到那里)?
  • 代码已更新,顺便感谢您的帮助。
  • 这是您在生产中逐字运行的代码吗?因为此代码将要求您将这些魔术字符串替换为适合您环境的值。我确定您没有从“MyComputer”上的“域”域中以“用户”身份运行程序......

标签: c# group-policy


【解决方案1】:

我找到了一种迂回的方法来完成我需要的方法,方法是读取位于“HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\History”中的注册表项以获取应用的组策略,将它们添加到 ArrayList 然后检查以查看如果列表中包含我感兴趣的政策。

为确保动态更新这些密钥,我从 GPO 组中删除了相关机器,重新启动并删除了与该策略关联的密钥。

            ArrayList groupPolicies = new ArrayList();

        using (RegistryKey historyKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\History"))
        {
            foreach (string historySubkey in historyKey.GetSubKeyNames())
            {
                using (RegistryKey guidKey = historyKey.OpenSubKey(historySubkey))
                {
                    foreach (string guidsubkey in guidKey.GetSubKeyNames())
                    {
                        using (RegistryKey keyvalue = guidKey.OpenSubKey(guidsubkey))
                        {
                            groupPolicies.Add(keyvalue.GetValue("DisplayName"));
                            //Console.WriteLine(keyvalue.GetValue("DisplayName"));
                        }
                    }
                }
            }
        }
        if (!groupPolicies.Contains("replacewithyourGPOname"))
        {
            Console.WriteLine("The machine is not a member of the policy");
        }

【讨论】:

    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多