Normales Thema Programmierung: WSUS-Server über Visual C# abfragen (Gelesen: 2750 mal)
MartinG
WSUS Junior Member
*
Offline



Beiträge: 41
Mitglied seit: 11.09.09
Geschlecht: männlich
Programmierung: WSUS-Server über Visual C# abfragen
08.04.10 um 10:20:57
Beitrag drucken  
Der Zugriff auf Informationen von WSUS-Servern und ihre Steuerung ist auf verschiedene Weisen möglich. Von Microsoft mitgeliefert wird das WSUS-MMC-SnapIn, also die altbekannte WSUS-Konsole, die auf dem WSUS-Server automatisch mitinstalliert wird (und auf weiteren Rechnern bei Bedarf nachinstalliert werden kann).

Ausserdem möglich ist der Zugriff über die Windows PowerShell; Skripte hierzu finden sich einige in diesem Forum. Smiley


Weiterhin lässt sich dank des .NET Frameworks von Microsoft auch mit Hochsprachen wie Visual C# auf WSUS-Server zugreifen. Wie dies funktioniert, möchte ich hier kurz beispielhaft zeigen.


Benötigt wird:
  • Microsoft Visual C# - aktuell ist Version 2008 SP1 (deutsch), in der Express Edition kostenlos bei Microsoft herunterzuladen
  • Microsoft Report Viewer Redistributable 2008 - aktuelle Version ist SP1, gibt es (in deutsch) ebenfalls kostenlos bei Microsoft
  • Microsoft WSUS 3.0 SP2 - aus diesem Programmpaket muss auf dem Entwicklungsrechner die WSUS-Konsole installiert werden
  • .NET Framework - die aktuelle Version (3.5 SP1) sollte ebenfalls installiert sein



Ist dies alles installiert, kann im Visual Studio ein neues Projekt gestartet werden - in diesem Beispiel habe ich eine normale Windows Forms-Anwendung erstellt.


Noch kennt die Anwendung allerdings keinerlei WSUS-Funktionalitäten. Um auf diese zugreifen zu können, muss ein Verweis auf die entsprechende Bibliothek eingefügt werden.

Geht dazu im Menü Projekt auf Verweis hinzufügen.... Es werden alle installierten Bibliotheken aufgelistet, das kann einen Moment dauern. Die WSUS-Bibliothek allerdings wird nicht aufgelistet, diese müsst ihr manuell hinzufügen. Geht dazu auf den Reiter Durchsuchen und klickt euch durch zum Installationspfad der WSUS-Konsole (standardmässig: C:\Programme\Update Services).
Im Unterordner Api liegt die Datei Microsoft.UpdateServices.Administration.dll - wählt diese aus und klickt OK.

Die Bibliothek ist nun verknüpft - ihr könnt nun auf ihre Klassen und Funktionen zugreifen.
Exclaim Gleichzeitig wird die erstellte Anwendung aber nur auf Rechnern laufen, die diese Bibliothek kennen, also die WSUS-Konsole installiert haben.

Um nicht immer den vollen Namen der Assembly eingeben zu müssen, wenn ihr auf ihre Klassen zugreifen wollt, solltet ihr in den Kopfteil eurer Quellcode-Datei folgende Zeile einfügen:
Code
using Microsoft.UpdateServices.Administration; 




Eure Anwendung ist nun startklar. Smiley

Als Beispiel möchte ich nun einige Informationen vom WSUS-Server abrufen. Dazu habe ich (quick and dirty) einen Button und eine TextBox (MultiLine = true) auf die Anwendung gezogen und dem OnClick-Event des Buttons folgenden Code hinzugefügt:
Code
// wird später in der TextBox ausgegeben
List<string> output = new List<string>();

// SERVERNAME durch den Hostnamen eures WSUS-Servers ersetzen
// SSL auf true setzen, wenn ihr eine gesicherte Verbindung nutzt, sonst auf false
// PORT entsprechend einstellen, z.B. 80 (ohne SSL) oder 443 (mit SSL)
IUpdateServer wsus = AdminProxy.GetUpdateServer("SERVERNAME", SSL, PORT);


// generelle Status-Informationen
UpdateServerStatus status = wsus.GetStatus();
output.Add("Total Computers: " + status.ComputerTargetCount);

// benötigte Updates
ComputerTargetScope scope = new ComputerTargetScope();
scope.IncludedInstallationStates =
    UpdateInstallationStates.NotInstalled |
    UpdateInstallationStates.InstalledPendingReboot |
    UpdateInstallationStates.Downloaded;
scope.ExcludedInstallationStates = UpdateInstallationStates.Failed;
output.Add("Computers Needing Updates: " + wsus.GetComputerTargetCount(scope));

// Fehler
scope = new ComputerTargetScope();
scope.IncludedInstallationStates = UpdateInstallationStates.Failed;
output.Add("Computers With Errors: " + wsus.GetComputerTargetCount(scope));


// Ausgabe
textBox1.Lines = output.ToArray(); 




Diese Anwendung kann nun kompiliert und gestartet werden. Beim Klick auf den Button habe ich jedoch eine Exception erhalten - weil der Benutzer, unter dem ich bei Windows angemeldet ist, (natürlich) kein Administrator ist und somit seine Rechte nicht ausreichen, um auf den WSUS-Server zuzugreifen. Als Administrator ausgeführt zeigt die Anwendung jedoch die gewünschte Information an. Smiley
Exclaim Bei "richtigen" Anwendungen, die produktiv eingesetzt werden sollen, muss diese Exception (eine System.Security.SecurityException)  natürlich, wie jede andere Exception auch, abgefangen und behandelt werden.


Eure Anwendung kann nun die von Microsoft bereitgestellten Funktionalitäten zur Administrierung des WSUS-Servers nutzen. Damit lassen sich nicht nur Informationen auslesen, sondern ihr könnt alles machen, was auch in Microsofts WSUS-Konsole möglich ist - Updates freigeben, Computer in Gruppen verschieben, etc. pp.

Die nötige Klassenreferenz könnt ihr hier nachlesen:
(Du musst Dich Einloggen oder Registrieren um Multimediadateien oder Links zu sehen).


Viel Spaß beim Entwickeln und Testen!  Cool

Feedback und Kritik sind wie immer gern gesehen. Vielleicht nutzt ja der ein oder andere auch schon diese Möglichkeiten und möchte seinen Code mit uns teilen.
  
Zum Seitenanfang
 
Bookmarks: Facebook Google Google+ Linked in Twitter Yahoo
 



Nutzungsbedingungen | Datenschutz
Kontakt | RSS | Feedback | Impressum
Facebook | News einsenden