2012-06-25 26 views
5

Estoy trabajando en un entorno grande escribiendo una utilidad para un equipo de soporte técnico. Necesito proporcionar una lista de todos los servidores de impresión en el dominio y dejar que elijan uno. Una vez que seleccionan un servidor de impresión, enumeraré todas las colas de impresión en ese servidor de impresión y haré que seleccionen uno. He encontrado muchos ejemplos de cómo extraer la lista de colas de impresión del servidor de impresión, pero no hay ejemplos de cómo obtener una lista de servidores de impresión.Obtenga una lista de todos los servidores de impresión en el dominio en C#

¿Cómo puedo obtener una lista de todos los servidores de impresión en un dominio (C#)?

+0

¿Has encontrado una solución, o una de nuestras wirklich? Por favor comparta o vote. Gracias –

Respuesta

1

Puede utilizar el Espacio de nombres de gestión del sistema.

Por favor, se refieren a este tema:
Is there a .NET way to enumerate all available network printers?

+0

Gracias por la respuesta, pero no veo dónde puedo ayudarme a obtener una lista de servidores de impresión. Puedo obtener todas las impresoras, pero en nuestro entorno, eso sería miles. Necesito presentar una lista de servidores de impresión y una vez que seleccionen un servidor de impresión, enumere las colas en ese servidor. – ScottK

+0

Eche un vistazo al espacio de nombres System.Print.PrinterServer: http://msdn.microsoft.com/en-us/library/system.printing.printserver.aspx. Esto tiene un método GetPrintQueue. – ems305

+3

Exactamente lo que usaré para la segunda mitad de la tarea. Tengo esa pieza cubierta. Lo que necesito es una forma de obtener una lista de todos los servidores de impresión disponibles. – ScottK

0

No estoy seguro de si esto ayuda, pero podría buscar todos los equipos de la red y comprobar su nombre.

así:

// Reference System.DirectoryServices is needed 

DirectoryEntry root = new DirectoryEntry("WinNT:"); 
foreach (DirectoryEntry computers in root.Children) 
{ 
    foreach (DirectoryEntry computer in computers.Children) 
    { 
     if (computer.SchemaClassName == "Computer") { 
      if (computer.Name.IndexOf("printer-prefix-or-so")==-1) 
       Console.WriteLine(computer.Name); 
     }        
    } 
} 
0

En PowerShell puede hacer lo siguiente:

Import-Module ActiveDirectory Get-ADObject -LDAPFilter "(& (& (& (uncName = *) (objectCategory = printQueue)))) "-properties * | Sort-Object -Unique -Property servername | select servername

Cuestiones relacionadas