Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Script-basierte IIS Administration

Geschrieben von: Christoph Wille
Kategorie: Server

Daß man den IIS mit dem Internet Services Manager administrieren kann, dürfte jedem bekannt sein. Daß man allerdings die Administration auch mit Hilfe von ASP oder WSH Scripts bewerkstelligen kann - ohne funktionale Abstriche machen zu müssen - das wissen nur wenige.

Wie funktioniert der Skriptzugriff auf die IIS Administration? Nun, dazu hole ich etwas aus. Heute sollte jedem das Active Directory (AD) von Windows 2000 bereits ein Begriff sein - es dient der Verwaltung von Objekten (Benutzer, Drucker, etc) in einem Netzwerk. Um es einfach programmierbar zu machen, existiert das sogenannte Active Directory Services Interface, kurz ADSI. Im Falle des C++ Programmierers sieht das (für den VB Programmierer) grausam aus, allerdings gibt es "high-level" Schnittstellen, die für VB/VBScript Programmierer gedacht sind. Damit erhält man Zutritt zur vollständigen Administration des AD's und der dort gespeicherten Objekte.

Was hat dieser Ausflug in das Active Directory mit der Administration von IIS zu tun? Nun, die Besitzer des NT 4 Option Packs waren die "Beta Tester" für so ziemlich alles, was dann in Windows 2000 zur Reife gelangt ist: Transaction Server, Message Queue Server, Certificate Server und eben auch die ADSI Programmierschnittstelle - denn diese erlaubt nicht nur den Zugriff auf den AD Provider, sondern auch andere Provider die die ADSI Schnittstelle implementieren. Und man darf raten - IIS implementiert diese seit der Version 4.

Alle Objekte für die Administration des IIS werden unter dem Begriff IISAO - IIS Administration Objects - zusammengefasst. Diese bilden eine Hierarchie, und das folgende Flowchart zeigt die Hierarchie für eine Web Site plus eine FTP Site:

Der Text in den Boxen entspricht dem Namen der Objektinstanz, der Objekttyp steht jeweils rechts daneben. Angesprochen werden die jeweiligen Elemente mit einer dem HTTP Protokoll ähnlichen Syntax:

IIS://computername/W3SVC/1/Root

Diese "URL" liefert mir ein Objekt des Typs IisWebVirtualDir, und zwar das Rootverzeichnis meiner ersten Website (wie man zum Namen kommt, dazu später). Ein einfaches und wirkungsvolles Tool, um sich diese Hierarchie ohne tolles User Interface anzusehen ist der Metabase Editor aus dem Windows 2000 Resource Kit:

Wo werden diese Informationen ausgelesen, beziehungsweise gespeichert? Erraten, dafür ist die Metabase zuständig - diese hält sämtliche IIS-relevanten Konfigurationsinformationen. Für den IIS 5 ist das Speicherformat binär, das kann sich aber in zukünftigen Versionen durchwegs ändern.

Hervorragend - wir hätten geklärt wo die Konfiguration gespeichert wird (Metabase), mit welcher Programmierschnittstelle man diese angreift (ADSI), und wie man die Informationen adressiert (IIS:// Syntax).

Nun kommen wir aber zum ersten Hands-on Beispiel des heutigen Artikels: listsites.asp. Wie der Name schon impliziert, liefert mir der Code eine Liste aller Web Sites, die auf meinem Server laufen:

<%
Set theService = GetObject("IIS://localhost/W3SVC")

For Each theServer in theService
  If (theServer.Class = "IIsWebServer") Then
     Response.Write "<i>Server</i>: <a href=""dumpsite.asp?AdsPath="
     Response.Write Server.UrlEncode(theServer.ADsPath) & """>"
     Response.Write theServer.ServerComment & "</a>"
     Response.Write "  <i>ADS Pfad</i>: " & theServer.ADsPath & "<BR>"
  End If
Next
%>

Wer jetzt zu gierig war, und das sofort ausprobiert hat, ist wahrscheinlich in folgenden Fehler hineingelaufen:

Microsoft VBScript runtime error '800a0046' 
Permission denied: 'GetObject' 
/aspheute/adsi/sonicht.asp, line 2 

Der Grund hierfür ist, daß NT klarerweise die Sicherheitseinstellungen honoriert, und nur Siteadministratoren (üblicherweise das lokale Administratorenkonto) an diese Daten heranlassen möchte. Daher müssen wir das Skript absichern, sodaß nur noch die entsprechenden User darauf Zugriff haben:

Und jetzt funktioniert es auch so wie gewünscht, und wir bekommen eine Liste aller konfigurierten Websites:

Ich habe mir erlaubt, einen kleinen Hyperlink zu legen - und zwar auf dumpsite.asp, welches mir alle Verzeichnisse der Website auflistet. Auch dieses verwendet wieder GetObject um an das ADS zu binden, und liest dann die Informationen aus den benötigten Serviceobjekten aus:

<%
strAdsPath = Request.QueryString("AdsPath")
Set theServer = GetObject(strAdsPath)
strSiteDescription = theServer.ServerComment
%>
<HTML>
<HEAD>
<TITLE>IISAO hierarchy for <%=strSiteDescription%></TITLE>
</HEAD>
<BODY>

<PRE>
<%
Level = 0      ' start level is zero

PrintChildren(theServer)

Sub PrintChildren(ParentObj)
  For Each Child in ParentObj
    Level = Level + 1
    Response.Write Space(2*Level) & Child.Name & "<BR>"
    PrintChildren(Child)
  Next
  Level = Level - 1
End Sub
%>
</PRE>

</BODY>
</HTML>

Die Kindobjekte des Rootverzeichnisses werden rekursiv aufgelistet. Und da ich es mir (wie immer) einfach gemacht habe, mache ich die Einrückungen der Hierarchieebenen mit Hilfe von Leerzeichen. Das sieht dann so aus:

Wenn man sich den Internet Services Manager ansieht, dann fehlen uns hier eigentlich nur noch die bunten Icons:

Wer sich später die Zeit nimmt, die IISAO Dokumentation genauer zu lesen wird feststellen daß alle Einstellungen aus der ISM in IISAO zu finden sind - und das mit gutem Grund: die ISM verwendet ebenso ADS (die C++ Variante), um die Konfiguration durchzuführen. Die ISM bietet als "Zusatz" eine nette Oberfläche.

Da ISM auch auf IISAO aufbaut ist es klar, daß man zB per Skript auch Verzeichnisse anlegen kann. Der Beweis ist das folgende createvdir.asp.

<%
Set root = GetObject("IIS://localhost/W3SVC/2/Root")
Set newVDir = root.Create("IIsWebVirtualDir","ScriptCreatedDir")
newVDir.Path = "f:\inetpub\adsi"
newVDir.EnableDirBrowsing = True
newVDir.AccessScript = True
newVDir.AccessRead = False
newVDir.SetInfo
%>

Obwohl alle Eigenschaften selbstbeschreibend sind, möchte ich auf die Methode SetInfo eingehen. Wenn man diese nicht aufruft, werden sämtliche Änderungen nicht durchgeführt! Der Grund hierfür ist eine Geschwindigkeitsoptimierung, um viele kleine Eigenschaftsänderungen "auf einen Rutsch" in die Metabase zu committen - und genau das macht SetInfo.

Zum Beweis, daß mein Script auch funktioniert hat, hier ein abschließender Screenshot der ISM.

Schlußbemerkung

Wir haben heute nur einen kleinen Ausschnitt aus den IISAO und seinen Eigenschaften und Methoden betrachtet. Gerade für ISPs mit sich wiederholenden Konfigurationsaufgaben ist die Scriptingfähigkeit der Administration ein Geschenk aus Redmond.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Den Webserver umsiedeln (IIS 4 oder 5)
IIS, was machst du gerade?
Virtuelle Verzeichnisse umbenennen

Links zu anderen Sites

IISAO Dokumentation

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.