使用Microsoft.GroupPolicy获取GPO信息

本文关键字:GPO 信息 获取 GroupPolicy Microsoft 使用 | 更新日期: 2023-09-27 18:12:14

我们正在尝试获取我们电脑的gpo信息。因此,我们希望使用c# -而不是gpresult.exe(因为它可以在系统上下文中执行…)。

嗯,我发现有一个DLL Microsoft.GroupPolicy.Management.dll可以在c#中导入。听起来太简单了:

using Microsoft.GroupPolicy;
[...]
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");

作为输出文件,我得到这个:

<?xml version="1.0" encoding="utf-16"?>
<Rsop xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.microsoft.com/GroupPolicy/Rsop">
  <ReadTime>2013-05-06T13:28:17.1529206Z</ReadTime>
  <DataType>LoggedData</DataType>
</Rsop>
这里有谁曾经使用过这个DLL,可以给我一些提示吗?提前感谢!

欢呼

使用Microsoft.GroupPolicy获取GPO信息

您应该在生成报告之前执行rsop.CreateQueryResults()。这需要设置LoggingMode, LoggingUserLoggingComputer属性。

GPRsop rsop = new GPRsop(RsopMode.Logging, null);
rsop.LoggingMode = LoggingMode.Computer;
rsop.LoggingComputer = Environment.GetEnvironmentVariable("COMPUTERNAME");
rsop.LoggingUser = Environment.UserDomainName + @"'" + Environment.GetEnvironmentVariable("USERNAME");
rsop.CreateQueryResults();
var xml = rsop.GenerateReport(ReportType.Xml);

GPMGMTLib使用

GPM gpm = new GPM();
var rsop = gpm.GetRSOP(GPMRSOPMode.rsopLogging, null, 0);
rsop.LoggingFlags = 0x20000;
rsop.LoggingComputer = Environment.GetEnvironmentVariable("COMPUTERNAME");
rsop.LoggingUser = Environment.UserDomainName + @"'" + Environment.GetEnvironmentVariable("USERNAME");
rsop.CreateQueryResults();
object cancel = new GPMAsyncCancel();
var result = rsop.GenerateReport(GPMReportType.repXML, null, out cancel);
string xml = result.Result;
        using GPMGMTLib;

        GPM groupPolicyManagement = new GPM();
        IGPMConstants groupPolicyConstants = groupPolicyManagement.GetConstants();
        GPMRSOP rsop = groupPolicyManagement.GetRSOP(groupPolicyConstants.RSOPModeLogging, null, 0);
        rsop.LoggingComputer = "MyComputer";
        rsop.LoggingUser = "domain''user";
        rsop.CreateQueryResults();
        rsop.GenerateReportToFile(groupPolicyConstants.ReportXML, "C:''Temp''test.xml");