2012-05-10 13 views
0

コードを使用して特定のOUに適用(リンクおよび継承)されたすべてのGPOをリストする方法を探しています。継承されたものに含まれるすべてのGPOを一覧表示する方法(C#)

私は、GPLinkと呼ばれるリンクされたGPOを表す属性がありますが、直接リンクされているものだけを提供していることは知っています。

私はgoogleを検索し、gpmgmt COMオブジェクトがあることがわかりましたが、それを私の目的のために、またそれを可能にする方法を理解することができませんでした。

ありがとうございました。

答えて

0

ドメインヘッドに達するまで、指定されたOUの各親を上方向に反復する必要があります。

1

私は次のサブを共有しています。 GPOの名前は表示されませんが、カウントが返されます。マイナーなモデムを使用すると、名前を取得できます(GPOLinkのforeachループのプロパティを参照してください)。 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();    
    }