¿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.
[sql]
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));
}
}
}
[/sql]
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.