2012-06-25 6 views
5

Sto lavorando in un grande ambiente scrivendo un'utilità per un team di supporto tecnico. Devo fornire un elenco di tutti i server di stampa nel dominio e lasciare che ne scelgano uno. Una volta scelto un server di stampa, elencherò tutte le code di stampa su quel server di stampa e le selezionerà. Ho trovato un sacco di esempi su come estrarre l'elenco delle code di stampa dal server di stampa, ma nessun esempio su come ottenere un elenco di server di stampa.Ottieni l'elenco di tutti i server di stampa nel dominio in C#

Come posso ottenere un elenco di tutti i server di stampa in un dominio (C#)?

+0

Hai trovato una soluzione o hai fatto uno dei nostri wirklich. Si prega di condividere o votare. Grazie –

risposta

1

È possibile utilizzare lo spazio dei nomi System.Management.

prega di fare riferimento a questo thread:
Is there a .NET way to enumerate all available network printers?

+0

Grazie per la risposta, ma non vedo dove ciò possa aiutarmi a ottenere un elenco di server di stampa. Posso ottenere tutte le stampanti, ma nel nostro ambiente sarebbero migliaia. Devo presentare un elenco di server di stampa e quindi, una volta selezionato un server di stampa, elencare le code su quel server. – ScottK

+0

Dai uno sguardo allo spazio dei nomi System.Print.PrinterServer: http://msdn.microsoft.com/en-us/library/system.printing.printserver.aspx. Questo ha un metodo GetPrintQueue. – ems305

+3

Esattamente quello che userò per la seconda metà del compito. Ho coperto quel pezzo. Quello di cui ho bisogno è un modo per ottenere un elenco di tutti i server di stampa disponibili. – ScottK

0

Non sono sicuro se questo aiuta, ma si poteva guardare per tutti i computer della rete e verificare il loro nome.

Come così:

// 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

In PowerShell è possibile effettuare le seguenti operazioni:

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

Problemi correlati