[英]C# linking group policy in AD
如何在AD中設置組策略? 我能夠創建我的OU,但我還需要附加組策略鏈接到它。 所以這就是我到目前為止所擁有的。
string strOU = "OU=test454545,OU=Clients,OU=Clients,DC=domain,DC=net";
GPMGMTLib.GPM gpm = new GPMGMTLib.GPM();
GPMGMTLib.GPMConstants gpc = gpm.GetConstants();
GPMGMTLib.GPMDomain gpd = gpm.GetDomain(Environment.GetEnvironmentVariable("USERDNSDOMAIN"), "", gpc.UseAnyDC);
GPMGMTLib.GPMSOM gpSom = gpd.GetSOM(strOU);
GPMGMTLib.GPMGPO gpo = gpd.CreateGPO();
gpo.DisplayName = "TestOutCome";
gpSom.CreateGPOLink(-1,gpo);
這仍然不會創建GPO鏈接,但我想要做的就是鏈接現有的GPO,不管怎么說? 謝謝你的幫助。
好的越來越近了,這只是創建了一個政策並沒有實際鏈接現有的...
string strGPO = "Default Security with web access";
string strOU = "OU=test454545,OU=Clients,OU=Clients,DC=domain,DC=net";
GPMGMTLib.GPM gpm = new GPMGMTLib.GPM();
GPMGMTLib.GPMConstants gpc = gpm.GetConstants();
GPMGMTLib.GPMDomain gpd = gpm.GetDomain(Environment.GetEnvironmentVariable("USERDNSDOMAIN"), "", gpc.UseAnyDC);
GPMGMTLib.GPMSearchCriteria searchOBJ = gpm.CreateSearchCriteria();
searchOBJ.Add(gpc.SearchPropertyGPODisplayName, gpc.SearchOpEquals, strGPO);
GPMGMTLib.GPMGPOCollection objGPOlist = gpd.SearchGPOs(searchOBJ);
GPMGMTLib.GPMSOM gpSom = gpd.GetSOM(strOU);
GPMGMTLib.GPMGPO gpo = gpd.CreateGPO();
gpSom.CreateGPOLink(-1,gpo);
更新和工作:
這是用於使用C#將現有GPO鏈接到OU
1)安裝http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=0a6d4c24-8cbd-4b35-9272-dd3cbfc81887
2)參考gpmgmt.dll(在安裝目錄中找到)
3)您可能必須安裝.Net 1.1
4)添加對VS的引用
5)使用GPMGMTLib添加; 使用GPOADMINLib; 項目
string strGPO = "Default Security with web access";
string strOU = "OU=test454545,OU=Clients,OU=clients,DC=domainh,DC=net";
GPMGMTLib.GPM gpm = new GPMGMTLib.GPM();
GPMGMTLib.GPMConstants gpc = gpm.GetConstants();
GPMGMTLib.GPMDomain gpd = gpm.GetDomain(Environment.GetEnvironmentVariable("USERDNSDOMAIN"), "", gpc.UseAnyDC);
GPMGMTLib.GPMSearchCriteria searchOBJ = gpm.CreateSearchCriteria();
searchOBJ.Add(gpc.SearchPropertyGPODisplayName, gpc.SearchOpEquals, strGPO);
GPMGMTLib.GPMGPOCollection objGPOlist = gpd.SearchGPOs(searchOBJ);
GPMGMTLib.GPMSOM gpSom = gpd.GetSOM(strOU);
GPMGMTLib.GPMGPO gpo = gpd.CreateGPO();
gpSom.CreateGPOLink(-1,objGPOlist[1]);
看看這個鏈接
它包含大量示例腳本,您需要從GPOAdmin.dll向GPO Admin 1.0類型庫添加引用(COM)。
有討論了類似的問題在這里用C#示例腳本
編輯 :
將gpmgmt.dll作為COM互操作引用,並使用如下代碼:
Public Function CreateAndLinkGPO(ByVal strDomain As String, ByVal strOU As String, ByVal strGPOName As String)
Dim gpm As New GPM()
Dim gpmConst As GPMConstants = gpm.GetConstants()
Dim domain As GPMDomain = gpm.GetDomain(strDomain, "", gpmConst.UseAnyDC)
Dim som As GPMSOM = domain.GetSOM(strOU)
'create new GPO
Dim gpo As GPMGPO = domain.CreateGPO()
gpo.DisplayName = strGPOName
'create link to OU
som.CreateGPOLink(-1, gpo)
CreateAndLinkGPO = gpo
End Function
這是在VB.NET中,但可以從這里輕松移植到由MSFT海報發布的C#。 我認為關鍵是。 CreateGPOLink , GPMSOM是您的OU(檢索表示指定路徑上的域或組織單位(OU)的IGPMSOM接口。)
我一直在尋找一種方法來簡單地列出鏈接到特定OU的GPO,這個線程對我幫助很大。 我有以下分享。 它不會列出GPO的名稱,但會返回計數。 較小的mod將允許您獲取名稱(在foreach循環中查看GPOLink的屬性)。 您需要安裝GPMC並添加gpmgmt.dll作為項目引用。
private string getGPOLinkCount(string OUPathDN, bool onlyEnabledLinks, bool includeInheritedLinks)
{
int linkCount = 0;
try
{
GPMGMTLib.GPM gpm = new GPMGMTLib.GPM();
GPMGMTLib.IGPMConstants gpc = gpm.GetConstants();
GPMGMTLib.IGPMDomain gpd = gpm.GetDomain(Environment.GetEnvironmentVariable("USERDNSDOMAIN"), "", gpc.UseAnyDC);
GPMGMTLib.GPMSOM gpSom = gpd.GetSOM(OUPathDN);
GPMGPOLinksCollection GPOLinks = gpSom.GetGPOLinks();
GPMGPOLinksCollection GPOLinksIncludingInherited = gpSom.GetInheritedGPOLinks();
if (!includeInheritedLinks)
{
foreach (GPMGPOLink GPOLink in GPOLinks)
{
if (onlyEnabledLinks)
{
if (GPOLink.Enabled)
{
linkCount++;
}
}
if (!onlyEnabledLinks) //Get all links, disabled or enabled
{
linkCount++;
}
}
}
if (includeInheritedLinks)
{
foreach (GPMGPOLink GPOLink in GPOLinksIncludingInherited)
{
if (onlyEnabledLinks)
{
if (GPOLink.Enabled)
{
linkCount++;
}
}
if (!onlyEnabledLinks) //Get all links, disabled or enabled
{
linkCount++;
}
}
}
}
catch (Exception ex)
{
return "GPO links: " + ex.Message.Replace("\r\n", "");
}
return linkCount.ToString();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.