使用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,可以给我一些提示吗?提前感谢!欢呼
您应该在生成报告之前执行rsop.CreateQueryResults()
。这需要设置LoggingMode
, LoggingUser
和LoggingComputer
属性。
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");