コードを使用して、特定の OU に適用された (リンクおよび継承された) すべての GPO を一覧表示する方法を探しています。
GPLink と呼ばれるリンクされた GPO を表す属性があることは知っていますが、直接リンクされたものしか提供しません。
Google を検索したところ、gpmgmt COM オブジェクトがあることがわかりましたが、目的のためにそれを使用する方法と、それが可能かどうかさえ理解できませんでした。
助けてくれてありがとう。
コードを使用して、特定の OU に適用された (リンクおよび継承された) すべての GPO を一覧表示する方法を探しています。
GPLink と呼ばれるリンクされた GPO を表す属性があることは知っていますが、直接リンクされたものしか提供しません。
Google を検索したところ、gpmgmt COM オブジェクトがあることがわかりましたが、目的のためにそれを使用する方法と、それが可能かどうかさえ理解できませんでした。
助けてくれてありがとう。
共有する次のサブがあります。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();
}
ドメイン ヘッドに到達するまで、特定の OU の各親を上方に反復する必要があります。