Bents Blog

 

Ein IT Blog mit Themen aus dem Windows Server Umfeld.

Update meiner Skripterweiterungen für BGinfo

BGinfo von Sysinternals zählt ja zu den von mir absolut bevorzugten Werkzeugen für die Administration einer Serverlandschaft. Die Auflistung aller (aus meiner Sicht) relevanten Informationen eines Servers als Hintergrundbild mit automatischer Aktualisierung bei der Anmeldung ist für mich ein extrem wichtiges und mittlerweile unverzichtbares Hilfsmittel geworden.

Allerdings bedurfte es einiger Änderungen meiner bereits veröffentlichten BGInfo-Erweiterungen, um die folgenden Wünsche umzusetzen:

  • Vereinfachung beim Ausrollen der Erweiterungen
  • Beseitigung von Problemen bei der Ermittlung des Arbeitsspeichers
  • Anzeige aller Speicher-Controller

Alle Änderungen befinden sich im folgenden Packet bginfo_server.zip. Für die Ausführung wird das Programm bginfo.exe (aktuell in Version 4.16 4.20) benötigt, welches hier heruntergeladen werden kann.

Dokumentation der Änderungen

BGInfo benötigt zur Darstellung der gewünschten Werte im Hintergrundbild ein Template (BGI-Datei). In diesem Template ist nicht nur die Anordnung der Werte (Systemname, IP-Adresse, Betriebssystem etc.) sondern auch deren Herkunft (Registry, Umgebungsvariable, WMI-Abfrage, VBS-Skript) verankert. In meinem Paket lautet dieses Template

Server.bgi

und beinhaltet folgende Konfiguration (mit bginfo.exe geöffnet):

Hier sind alle später dargestellten Werte aufgelistet, auf der linken Seite befindet sich die Bezeichnung, auf der rechten Seite die zugehörige Variable. Leider sind nicht alle vordefinierten Variablen in BGInfo uneingeschränkt sinnvoll nutzbar, weswegen ich für die mit roten Punkten markierten Werte eigene VBS-Skripte geschrieben und im Template Server.bgi eingebunden habe:

  1. <IP Adress Detail> – ipadress.vbs: zeigt die IP-Adressen aller Netzwerkadapter des Systems an, die eine gültige IP-Adresse besitzen
  2. <DNS Server Complete> – dnsserver.vbs: zeigt alle eingetragenen DNS Server für aktivierte Netzwerkadapter mit gültigen IP-Adressen an
  3. <Network> – network.vbs: zeigt alle aktiven Netzwerkadapter, deren Verbindungsgeschwindigkeit und MAC-Adresse an
  4. <Memory Details> – memory.vbs: zeigt den physisch vorhandenen Arbeitsspeicher in MByte und in Prozent den freien Bereich an
  5. <Controller> – controller.vbs: zeigt alle SCSI- und IDE-Controller des Systems an
  6. <Diskspace> – diskspace.vbs: zeigt alle Volumes mit Laufwerksbuchstaben, Label, Gesamtgröße und prozentualen freien Speicherplatz an
  7. <Uptime> – uptime.vbs: zeigt die Betriebszeit des Servers seit dem letzten Reboot in Tagen, Stunden und Minuten an

Neu hinzugekommen ist das Skript controller.vbs, da der bisherige ausgelesene Wert <SCSI Controller> keine IDE-Controller berücksichtigte, die beispielsweise in mit Hyper-V virtualisierten Maschinen benutzt werden (dort muss die primäre Festplatte an einen IDE-Controller gebunden werden).

Außerdem wurde das Skript memory.vbs geändert, welches auf einigen virtuellen Systemen den physischen Arbeitsspeicher nicht korrekt ermitteln konnte.

Wichtigste und komfortabelste Änderung jedoch betrifft das Template Server.bgi selbst, in dem nun alle auf die VBS-Skripte verweisenden Pfade durch Nutzung einer Systemvariable (%userdnsdomain%) keiner Änderung beim Ausrollen bedürfen: Für die Ausführung meiner Erweiterung ist ein Verzeichnis innerhalb der Domäne nötig:

\\<FQDN>\Netlogon\BGinfo\

In diesem Verzeichnis muss das Tool bginfo.exe kopiert und der Inhalt meines ZIP-Paketes extrahiert werden. Anschließend kann der Aufruf sofort und ohne Anpassung des Templates erfolgen, da alle Skripte über den Pfad

\\%userdnsdomain%\netlogon\bginfo\<skriptname>.vbs

referenziert werden. Bei einem erneuten Update der Skripte bzw. des Templates können diese so zukünftig einfach und flexibel an dieser zentralen Stelle ersetzt werden.

Update vom April 2014

Inzwischen habe ich mein Skript um einige Informationen erweitert, sowie Änderungen bzw. Anpassungen vorgenommen. Ebenfalls geändert hat sich die Version von BGinfo selbst – hier ist nun die Version 4.20 vom 30.7.2013 aktuell.

Im Folgenden möchte ich kurz auf die Änderungen eingehen:

BGinfo Version 2013

Als zusätzliche Information wird der registrierte WSUS-Server eingeblendet. Dieser wird über den Registry-Wert

HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\WUServer

ermittelt und angezeigt. Neu hinzugekommen sind die beiden Werte Fullusername und NetDrives. Diese werden über folgende VBS-Skripte ermittelt:

  1. <Fullusername> – username.vbs: zeigt via Active Directory Abfrage den userPrincipalName an
  2. <NetDrives> – netdrives.vbs: zeigt die verbundenen Netzlaufwerke für den aktuellen Benutzer an

Außerdem habe ich eine zweite Variante des diskspace.vbs Skriptes im ZIP-Paket abgelegt. So zeigt die Version diskspace-v2.vbs an Stelle des Prozentwertes den tatsächlich freien Speicherplatz der lokalen Laufwerke an. Wer diese Version nutzen möchte, einfach den Inhalt dieser Datei im Skript diskspace.vbs ersetzen.

Automatischer und manueller Aufruf von BGinfo

Auf den von mir betreuten Kundensystemen habe ich BGinfo immer via Gruppenrichtlinie aufgerufen. Dies erfolgt in einer eignen Richtlinie (Verknüpft für die gesamte Domäne, Sicherheitsfilterung Domänen-Admins) in der unter Benutzerkonfiguration, Richtlinien, Windows-Einstellungen, Skripts der Eintrag (erster Teil als Name, zweiter Teil als Parameter)

\\<FQDN>\netlogon\bginfo\bginfo.exe \\<FQDN>\netlogon\bginfo\server.bgi /timer:0 /nolicprompt

erstellt wurde. So aktualisiert BGinfo bei der Anmeldung einen Domänen-Administrators an einem beliebigen Computer der Domäne den Bildschirmhintergrund mit den relevanten Daten. Das erzeugte Bitmap wird dabei im TEMP-Ordner des Benutzers abgelegt.

Oftmals ist es jedoch wünschenswert, während der Arbeit an einem System, die Daten des Hintergrundbildschirms schnell zu aktualisieren. Um den relativ langen Aufruf-Pfad nicht jedesmal umständlich von Hand eingeben zu müssen, empfiehlt sich die folgende Gruppenrichtlinieneinstellung (Gruppenrichtlinienerweiterungen für Windows Server 2008) für eine neue Verknüpfung:

Dadurch wird eine Verknüpfung im Startmenü (Programme) des entsprechenden Benutzers erzeugt, bei dessen Ausführung der Bildschirmhintergrund sofort aktualisiert wird.

Seit geraumer Zeit nutze ich nur noch in der betreffenden Gruppenrichtlinie (über die BGinfo für bestimmte Benutzer angewendet werden soll) die Ausführung als Skript bei der Anmeldung. Hier sind unter der Benutzerkonfiguration, Richtlinien, Windows-Einstellungen, Skripts (Anmelden/Abmelden), Anmelden folgende Einträge nötig:

Skriptname: \\%userdnsdomain%\NETLOGON\BGinfo\Bginfo.exe
Skriptparameter: \\%userdnsdomain%\NETLOGON\BGinfo\Server.bgi /timer:0 /nolicprompt

BGinfo als Anmeldeskript

So wird BGinfo bei der Benutzeranmeldung automatisch ausgeführt, einfach und zentral verwaltbar.

Fazit

BGinfo ist und bleibt für mich die erste Wahl, wenn es um die Darstellung von wichtigen Eckdaten eines Systems auf dem Bildschirmhintergrund geht. Wünschenswert wäre eine für die Anzeige mögliche Farbwahl in Abhängigkeit vom ermittelten Variablenwert (bspw. rot für einen zu 99% belegtes Laufwerk, sonst weiß), dies würde noch schneller auf eventuelle Probleme oder Fehler hinweisen. Doch auch mit dem gegebenen Funktionsumfang genügt mir BGinfo, um relevante Informationen einfach und flexibel zu visualisieren.

Wie bei allen meinen Beiträgen gilt: Bei Tipps, Vorschlägen sowie Fragen oder Kritiken hinterlasst bitte einen Kommentar.

Einen Blog am Leben zu erhalten kostet Zeit und Geld. Da ich auf meiner Seite weder Werbung einbinde, noch andersweitige Zuwendungen erhalte, freue ich mich über jede kleine Spende. Einfach und unkompliziert geht das über PayPalMe. Du unterstützt damit diesen Blog. Vielen Dank.

32 Kommentare für “Update meiner Skripterweiterungen für BGinfo”

  • Andreas

    Hallo Bent, bin auch ein BGInfo Verfechter…. danke für die geniale Vorlage.

  • Bent Schrader

    Hallo Andreas,

    bitteschön. Ich freue mich, wenn jemand die Früchte meiner Arbeit wertzuschätzen weiß …

    Gruß,
    Bent

  • Marco

    Hallo Bent,
    super Vorlagen!
    Die VBS-Scripte sind wahnsinnig nützlich.
    Vielen Dank!

  • Martin

    Vielen Dank für das Template und die VBS-Skripte. Wirklich sehr hilfreich.

  • Bernd

    Das „diskspace.vbs“ ist sehr nützlich, besteht aber auch die Möglichkeit anstatt des prozentualen freien Speicherplatz, die Größe des freien Speicherplatz für jedes Volume anzuzeigen?

    [ C:] 70, 53 GB free on 151,20 GB (System)

  • Bent Schrader

    Hallo Bernd,

    selbstverständlich. Dafür ersetzt Du einfach die Zeile 9 durch folgenden Code:

    Echo „[ “ & objDisk.DeviceID & “ ] “ & FormatNumber(objDisk.FreeSpace / 1073741824,2,-1) & “ GB free on “ &_

    Alles andere bleibt gleich.
    Gruß,
    Bent

  • Bernd

    Hallo Bent, zuerst gab es einen Kompilierungsfehler, die Hochkommata (z.B. vor der eckigen Klammer) wurden nicht akzeptiert, nach entsprechender Anpassung ist es genau so wie ich es wollte. …. super, vielen Dank

  • tom

    Hallo Bent,
    super vielen Dank für die tolle Scriptsammlung zu BGinfo! Ich bin über den Radius/Wlan Artikel hierhergekommen und werde oft wiederkommen um die anderen Postings auch zu lesen. Danke für Deine Arbeit.
    Gruss von tom

  • sesterz

    Hallo Bent,

    igendwie bereitet bginfo neuerdings Problem, seit geraumer Zeit wird beim Start von bginfo das Feld „Boot Time“ nicht mehr aktualisiert, d.h. es wird ein Zeitpunkt aus der Vergangenheit angezeigt. Haben Sie (oder sonst jemand) eine Idee an was dies liegen könnte?

    Mfg

  • Bent Schrader

    Hallo Sesterz,

    der Zeitpunkt wird aus der Registry gelesen und entspricht der Zeit zu der der Eventlog-Dienst gestartet wurde. Inwiefern wird denn bei Dir eine falsche Zeit ermittelt bzw. angezeigt?

    Gruß Bent

  • sesterz

    Danke für den Tipp, dass „Boot Time“ aus Registry eingelesen wird und dem Zeitpunkt entspricht zu dem der Eventlog-Dienst gestartet wird. Nach dem Löschen der „Ereignisse“ funktioniert BGInfo wieder einwandfrei!

  • Rolf

    Hello Bent

    .. war auf der Suche nach „erweiterten“ möglichkeiten für BgInfo und bin auf Deinem Blog gelandet.

    WOW, Herzlichen Dank für Deine Zeit und Tips !

    Da ich pro Server meistens mehrere „Domain-Suffix“ habe ist mir aufgefallen, dass der angemeldete Benutzer (User Login) mit der RegDomain fix veranket ist.

    Frage:

    Wie kann ich dies mit dem „userPrincipalName“ anzeigen wie im Active Directory ?

    Grüssli
    Rolf

  • Bent Schrader

    Hallo Rolf,

    vielen Dank für die Blumen! :)
    An Stelle der Varaible RegDomain kannst Du auch die DNS Domain nutzen (die aus der Environment Variable %USERDNSDOMAIN% gelesen wird). Leider ist diese dann immer in Großbuchstaben, weshalb ich in meiner Vorlage die RegDomain genutzt hatte. Bei einer Transformation (in Kleinbuchstaben) müsste halt wieder ein VBS-Skript her, dort würde ich diese Variable dann sowieso anders auslesen.

    Genügt Dir das vorerst?
    Grüzi in die Schwiz

  • Rolf

    Hello Bent

    Ups, Danke für die rasche Antwort :-)

    Hmm, %USERDNSDOMAIN% ergibt bei mir das selbe wie RegDomain, sprich „xyz.local“ einfach in Grossbuchstaben …

    Ich versuche es nochmals anders zu Beschreiben.

    Wenn ich die MMC-Console öffne und das Snap-In „Active Directory-Domänen und -Vertauensstellungen“ anwähle und dann unter Eigenschaften kann ich meine TLD die ich verwalte als Benutzerprinzipalnamen-Suffixe meine alternative UPN-Suffixe angeben.

    Beispiel: tad.ch, hugo.ch, maryland.com

    Jetzt, je nach Benutzer und eben der alternative UPN-Suffixe sollte es dann z.B. „administrator@hugo.ch“, felix.muster@maryland.com“ anzeigen als login.

    Uhhh, wenn ich noch kleine Buchstaben wünschen darf, ja gerne :-))
    Habe leider von scipten keine Ahnung, snif

    Okay ? – Grüssli Rolf

  • Rolf

    Hello zusammen

    Dank dem Google habe ich mir ein Script erstellt, wo mein Bedürfnis abdeckt :-)

    On Error Resume Next

    Set objSysInfo = CreateObject(„ADSystemInfo“)
    strUser = objSysInfo.UserName
    Set objUser = GetObject(„LDAP://“ & strUser)
    strFullName = objUser.Get(„userPrincipalName“)

    echo strFullName

    Grüssli
    Rolf

  • Robert

    Hallo,

    diese BGinfo Vorlage ist echt Spitze!
    Habe sie shon nach meinen Bedürfnissen angepasst.
    Jedoch fehlt mir die Möglichkeit den UNC Pfad von Netzlaufwerken anzeigen zu lassen.

    Hat jemand ne Idee?

    Gruss Robert

  • Bent Schrader

    Hallo Rolf,

    dein Skript funktioniert wunderbar, habe es eben getestet. Wenn Du nun noch in der letzte Zeile

    Echo LCase(strFullName)

    verwendest, erfüllt sich auch Dein Wunsch in Bezug auf die Kleinbuchstaben. :)
    In der nächsten Version werde ich – mit Deiner Erlaubnis – Deinen Vorschlag sicher mit einarbeiten.

    Vielen Dank und Grüzi in die Schwiz,
    Bent

  • Bent Schrader

    Hallo Robert,

    ich denke, was Du suchst, sieht in etwa so aus:

    strComputer = „.“
    Set objWMIService = GetObject(„winmgmts:“ _
    & „{impersonationLevel=impersonate}!\“ & strComputer & „rootcimv2“)
    Set colDisks = objWMIService.ExecQuery _
    („Select * from Win32_MappedLogicalDisk“)
    For Each objDisk in colDisks
    On Error Resume Next
    Echo „[ “ & objDisk.DeviceID & “ ] “ & FormatPercent(objDisk.FreeSpace / objDisk.Size,0) & “ free on “ &_
    FormatNumber(objDisk.Size / 1073741824,2,-1) & “ GB“ & “ (“ & objDisk.ProviderName & „)“
    Next

    Als VBS abspeichern, einbinden und los geht es.

    Gruß,
    Bent

  • Bent Schrader

    Hallo Robert und alle anderen,

    wie ich selber festgestellt habe, funktioniert das Skript für die Netzlaufwerke problemlos unter Windows Server 2008. Unter Windows Server 2003 wird ein Hotfix von Microsoft benötigt: http://bit.ly/16JozU3

    Ursache ist unter obigen Link dokumentiert. Leider sehe ich aktuelle keine guten Alternativen.

    Gruß,
    Bent

  • Robert

    Hallo Bent,

    bekomme mein Test des Scriptes unter einem 2008 R2 die Fehlermeldung „Error evaluating scripted filds……“ „Kompilierungsfehler in Microsoft VBScript“

    Muss ich an dem Script noch was anpassen????

    Gruss Robert

  • Rainer

    Hallo Bent,

    klasse Script geschrieben, vielen Dank. Habe gerade festgestellt das die Uptime beim 2012 Server nicht mehr angezeigt wird, hast Du dazu eine Idee bzw. Lösung.

    Mit dem Scripten komme ich nicht so klar.

    Gruß Rainer

  • Bent Schrader

    Hallo Rainer,

    ich habe soeben eine neuere Version des Skriptes hochgeladen (Version 2013). Diese läuft bei mir auch auf einem 2012 R2 Server ohne Probleme.

    Gruß,
    Bent

  • Rainer

    Hallo Bent,

    herzlichen Dank, läuft perfekt.

    Grüße
    Rainer

  • Jan

    Hallo Bent,

    danke für die klasse Anleitung und den vielen Skripten. Siehst Du eine Möglichkeit, die öffentliche IP Adresse meiner Verbindung über einen UMTS Surfstick dazustellen? Anscheinend wird das nicht als NetworkAdapter geführt.
    vielen Dank im voraus.
    Grüße
    Jan

  • Bastian

    Was bitte ist denn der Sinn des uptime -scrips?

    Um die uptime auf dem aktuellen stand zu halten, müsste doch das BGinfo script in regelmäßigen abständen aktuallisiert werden oder ?

  • Bent Schrader

    Hallo Bastian (<- das nennt man auch Grußformel),

    der Sinne des Uptime-Skriptes besteht darin, nach der Anmeldung an einem System (vorrangig remote auf Servern) auf einen Blick zu erkennen, wann die betroffene Maschine das letzte Mal neu gestartet wurde.
    Selbstverständlich zeigt Bginfo keine dynmaischen Werte an, darum geht es bei diesem Tool aber auch nicht. Wichtig ist, einen schnellen Gesamtüberblick mit allen relevanten Informationen zu erhalten. Für dynamische Anzeigen gibt es bspw. Desktop Info: http://bit.ly/1xzWXzA

    Gruß,
    Bent

  • Ronny

    Hallo Bent,

    klasse Ausarbeitung. Ich habe mich mal damit auseinander gesetzt und kämpfe gerade etwas an ein Paar Einstellungen.
    Würdest du mir verraten, wie ich am besten nur bestimmte Netzlaufwerke anzeigen lasse. Wenn ich versuche zu Coden, gibt es nur Nervenzerlegende Fehlermeldungen.
    Mein Ansatz wäre die Datei netdrives.vbs anzupassen:

    Set colDisks = objWMIService.ExecQuery („Select * from Win32_MappedLogicalDisk WHERE Name = ‚“ & VolumeLetter & „‚“,,48)

    in eine Abfrage zu stecken, die nur die gewünschten LW Buchstaben ausgibt. Wie wäre da die SQL Abfrage?

    Danke für die Hilfe, auch wenn das Thema nicht mehr so aktuell ist =)

    Gruß
    Ronny

  • Bent Schrader

    Hi Ronny,

    so richtig verstehe ich noch nicht den Sinn hinter Deiner Frage.
    Warum willst Du die Ausgabe auf bestimmte Laufwerksbuchstaben beschränken?
    Vielleicht skizzierst Du kurz was Du vor hast?

    Gruß,
    Bent

  • Mike Leon

    Hi,

    oft sehe ich mich gezwungen, über Rechtsklick auf „Arbeitsplatz“ bzw. „Computer“ herauszufinden, ob das System vor mir ein x86 oder ein x64 ist. Wie könnte man das via bginfo darstellen?

    Mit Dank und Gruss
    Mike

  • Bent Schrader

    Hallo Mike,

    wie wäre es mit folgender WMI-Abfrage: (Custom field, WMI query)

    SELECT OSArchitecture FROM Win32_OperatingSystem

    Damit sollte sich Dein Problem lösen lassen.
    Gruß,
    Bent

  • Lukas

    Vielen Dank für die super Anleitung!

  • Andre

    Hallo,

    ich habe das Skript der IP-Adresse geändert in folgendes:

    strMsg = „“
    strComputer = „.“

    Set objWMIService = GetObject(„winmgmts:“ & „{impersonationLevel=impersonate}!\“ & strComputer & „rootcimv2“)
    Set IPConfigSet = objWMIService.ExecQuery(„Select IPAddress from Win32_NetworkAdapterConfiguration WHERE IPEnabled = ‚True'“)

    For Each IPConfig in IPConfigSet
    If Not IsNull(IPConfig.IPAddress) Then
    For i = LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
    If Not Instr(IPConfig.IPAddress(i), „:“) > 0 Then
    strMsg = strMsg & IPConfig.IPAddress(i) & vbcrlf
    End If
    Next
    End If
    Next

    Echo strMsg

    ################

    Dadurch wird nur die IP Adresse angezeigt. Skript habe ich von hier: http://bit.ly/1K0PimZ

Einen Kommentar hinterlassen:

Antispam Bee hat Bent's Blog vor 410.433 Spam-Kommentaren bewahrt.