El rincón de JMACOE

¿Cómo encontrar todas las impresoras en el Active Directory?

Si alguna vez quieres hacer una impresión a escala masiva, es necesario encontrar todas las impresoras en Active Directory, no sólo las que están conectados a su ordenador. Por extraño que parezca, el método para encontrar no es trivial. El código esta en C# y funciona en Visual Studio 2008.

private void FindAllPrinters()
{
     string[] wantedProps = { "name", "servername", "printername", 
                              "drivername", "shortservername", "location" };
     var ds = new DirectorySearcher { Filter = "(objectClass=printqueue)" };
     foreach (SearchResult sr in ds.FindAll())
     {
          Debug.WriteLine(sr.Path);
          ResultPropertyCollection rpc = sr.Properties;
          // usa rpc.PropertyNames en lugar de wantedProps si quieres 
          // conocer mas acerca de las impresoras  
          foreach (string property in wantedProps)
          {
               foreach (object value in rpc[property])
               Debug.WriteLine(string.Format("\t{0}: {1}", property, value));
          }
       }
 }

Ten en cuenta que es necesario agregar una referencia a System.DirectoryServices. También hay que tener en cuenta que el código busca todas las impresoras de tu dominio. Si tienes muchos dominios en la organización, tendrás que obtener la lista y crear una instancia de clase DirectorySearcher por separado para cada uno.

Comparte y diviertete: