2012-06-25 16 views
5

Ich arbeite in einer großen Umgebung, ein Dienstprogramm für ein Tech-Support-Team zu schreiben. Ich muss eine Liste aller Druckserver in der Domäne bereitstellen und sie auswählen lassen. Sobald sie einen Druckserver ausgewählt haben, listet ich alle Druckwarteschlangen auf diesem Druckserver auf und lässt sie auswählen. Ich habe viele Beispiele gefunden, wie man die Liste der Druckwarteschlangen vom Druckserver holt, aber keine Beispiele, wie man eine Liste von Druckservern erhält.Liste aller Druckserver in der Domäne in C#

Wie kann ich eine Liste aller Druckserver in einer Domäne (C#) bekommen?

+0

Haben Sie eine Lösung gefunden, oder hat eine von uns wirklich funktioniert? Bitte teile oder stimme ab. Danke –

Antwort

1

Sie können den System.Management-Namespace verwenden.

entnehmen Sie bitte diesen Thread:
Is there a .NET way to enumerate all available network printers?

+0

Danke für die Antwort, aber ich sehe nicht, wo das mir helfen kann, eine Liste von Druckservern zu bekommen. Ich kann alle Drucker bekommen, aber in unserer Umgebung wären das tausende. Ich muss eine Liste der Druckserver präsentieren und dann, wenn sie einen Druckserver auswählen, die Warteschlangen auf diesem Server auflisten. – ScottK

+0

Werfen Sie einen Blick auf den Namespace System.Print.PrinterServer: http://msdn.microsoft.com/en-us/library/system.printing.printserver.aspx. Dies hat eine GetPrintQueue-Methode. – ems305

+3

Genau was ich für die zweite Hälfte der Aufgabe verwenden werde. Ich habe das Stück abgedeckt. Was ich brauche, ist eine Möglichkeit, eine Liste aller verfügbaren Druckserver zu erhalten. – ScottK

0

Ich bin nicht sicher, ob das hilft, aber Sie für alle Computer im Netzwerk aussehen könnten und ihren Namen überprüfen.

Wie so:

// 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 können Sie wie folgt vorgehen:

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