2012-05-06 75 views
2

試圖使用C#在Active Directory中查找打印機/共享。如何以編程方式在Active Directory中搜索打印機

這是我的示例代碼,適用於用戶,但我無法看到使用相同概念查找打印機。 (我是Active Directory的新手)。

DirectoryEntry entry = new DirectoryEntry(); 
    entry.Path = "LDAP://xxx.xxx.xx.xx/CN=Printers;DC=domainName, DC=com"; 
    entry.Username = @"domainName.com\Administrator"; 
    entry.Password = "admin"; 

    DirectorySearcher search = new DirectorySearcher(entry); 
    search.Filter = "(objectCategory=printQueue)"; 
    SearchResult result = search.FindOne(); 

    if (result != null) 
    { 
     ResultPropertyCollection fields = result.Properties; 

     foreach (String ldapField in fields.PropertyNames) 
     { 

      foreach (Object myCollection in fields[ldapField]) 
       Console.WriteLine(String.Format("{0,-20} : {1}", 
           ldapField, myCollection.ToString())); 
     } 
    } 

任何援助將不勝感激。

回答

3

與用戶(CN=Users)不同,安裝後在Active Directory中沒有CN=Printers容器。

打印機在Active Directory中的相關計算機容器中發佈。 相關電腦容器是什麼意思?那麼,請打開Active Directory用戶和計算機MMC管理單元並按照以下步驟操作:

  1. 請在視圖菜單中選擇高級功能。
  2. 在視圖菜單中選擇Users,Contancts,Groups和Computers作爲容器。
  3. 導航到您的打印機所屬的計算機對象(現在顯示爲容器) 。
  4. 單擊計算機容器的加號。在那裏您將看到打印機對象 。

因此,您會看到打印機在Active Directory中的相關計算機容器(打印機屬於)中發佈,而不是在一個普通容器(如CN=Printers)中發佈。

因此,要在Active Directory中搜索打印機對象,必須指定 不同的LDAP路徑。例如,你可以指定你的Active Directory 的根目錄下搜索根:

using (DirectoryEntry entry = new DirectoryEntry()) 
{ 
    entry.Path = "LDAP://xxx.xxx.xxx.xxx/DC=domainName,DC=com"; 
    entry.Username = @"domainName.com\Administrator"; 
    entry.Password = "SecurePassword"; 

    using (DirectorySearcher search = new DirectorySearcher(entry)) 
    { 
    search.Filter = "(objectCategory=printQueue)"; 
    SearchResult result = search.FindOne(); 

    if (result != null) 
    { 
     ResultPropertyCollection fields = result.Properties; 

     foreach (String ldapField in fields.PropertyNames) 
     { 
     foreach (Object myCollection in fields[ldapField]) 
      Console.WriteLine(String.Format("{0,-20} : {1}", 
          ldapField, myCollection.ToString())); 
     } 
    } 
    } 
} 

當然,你也可以指定爲搜索根LDAP路徑到您的打印機 共享的計算機。如果您共享的域控制器上的打印機

LDAP://xxx.xxx.xxx.xxx/CN=server10,CN=Computers,DC=domainName,DC=com 

那麼LDAP路徑略有:例如,如果您的打印機被稱爲server10計算機上的共享,並在此計算機位於CN=Computers容器,然後指定此LDAP路徑不同(因爲默認域控制器計算機對象位於組織單位OU=Domain Controllers):

LDAP://xxx.xxx.xxx.xxx/CN=DomainControllerName,OU=Domain Controllers,DC=domainName,DC=com 
+0

您好,非常感謝!我有另一個活動目錄問題: 我看到在打印機返回的屬性沒有ACL(訪問控制列表),是否有可能找出誰應該有權訪問打印機從Active Directory? (使用C#路徑和搜索過濾器) – acolene

+0

@acolene:你的意思是哪個ACL?對於活動目錄中的打印機對象或打印機共享? – Hans

+0

對於打印機共享?如果可能? – acolene

相關問題