BGInfo von Sysinternals ist für viele Windows-Admins ein unverzichtbares Werkzeug. Es blendet Konfigurationsinformationen über den lokalen Rechner in das Hintergrundbild ein und erlaubt so eine schnelle Orientierung, mit welcher Maschine man es zu tun hat. Gerade bei der Serveradministration ist das wichtig, denn schnell geht bei der Nutzung mehrerer RDP-Fenster oder eines Monitor-Umschalters die Übersicht verloren.
Wenig bekannt ist, dass sich BGInfo um eigene Datenfelder erweitern lässt. Dazu dient der Button „Custom“ unter der Feldauswahl. Hier lassen sich diverse Feldtypen einbinden – im einfachsten Fall wird der Inhalt einer Textdatei ausgegeben (interessant z.B. für die Support-Telefonnummer) oder auch ein bestimmter Registry-Wert. Viel interessanter sind WMI-Abfragen oder VB-Skripts.
WMI-Abfragen
WMI-Abfragen lassen sich mit einem kleinen integrierten Hilfstool zusammenklicken. Die folgende Anweisung zeigt z.B. an, ob die Windows-Firewall aktiv ist oder nicht:
Select Started from Win32_Service where Name=“SharedAccess“
Anmerkung: Der Dienst heißt unter Windows XP und Windows Server 2003 „Shared Access“. In Windows Vista heißt er „MpsSvc“.
Ulf B. Simon-Weidner hat in seinem Blog darauf hingewiesen, dass BGInfo unter Vista und Windows Server 2008 versucht, die Konfiguration aller Netzwerkkarten auszugeben, auch wenn diese gar nicht konfiguriert sind. Das führt zu einer kaum brauchbaren Ausgabe. Auch hier bieten WMI-Abfragen Abilfe:
- Für die tatsächlich konfigurierten IP-Adressen eignet sich die Abfrage
SELECT IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE - Die wirklich eingestellten DNS-Server gibt diese Zeile zurück:
SELECT DNSServerSearchOrder FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE
Eine weitere Möglichkeit sind Versionsabfragen für Dateien. Das kann interessant sein, um etwa die Versionsnummer eines Netzwerktreibers mit BGInfo anzuzeigen. Dazu muss man natürlich erst mal wissen, welche Datei hier relevant sind. Im Falle des Netzwerktreibers hilft ein Blick in den Gerätemanager: Dort die Eigenschaften der Netzwerkkarte aufrufen und über die Registerkarte Treiber den Button Treiberdetails betätigen. Die Versionsnummer der gefundenen Datei kann dann über die Custom-Felder in BGInfo ausgegeben werden.
VBS-Skripte
VBS-Skripte haben innerhalb von BGInfo eine Besonderheit: Die Funktion zur Ausgabe heitßt nur „Echo“ und nicht „WScript.Echo“. Das folgende VBS-Skript gibt die Versionsinformation eines lokal installierten SQL Server aus:
- strSQLServer = „.“ ‚ hier Servernamen angeben; „.“ ist lokal
- strConn = „Driver={SQL Server};SERVER=“ & strSQLServer
- on error resume next
- set objDB = CreateObject(„ADODB.Connection“)
- objDB.Open(strConn)
- if err.number <> 0 then
- quitcode
- else
- sqlvers
- end if
- sub sqlVers()
- strSQL = „select v=@@version“
- set objRS = objDB.Execute(strSQL)
- if err.number <> 0 then
- quitcode
- exit sub
- end if
- strVer = objRS.Fields(„v“).value
- if err.number <> 0 then
- quitcode
- exit sub
- end if
- if instr(strVer, „2005 – 9“) > 0 then
- strSQL = „SELECT v= ‚SQL Server 2005 ‚ + cast(SERVERPROPERTY (‚productlevel‘)“ _
- & “ as varchar) + ‚, Version ‚ + cast(SERVERPROPERTY(‚productversion‘)“ _
- & “ as varchar) + ‚, ‚ + cast(SERVERPROPERTY (‚edition‘) as varchar)“
- set objRS = objDB.Execute(strSQL)
- strVer = objRS.Fields(„v“).value
- elseif instr(strVer, „2000 – 8“) > 0 then
- strSQL = „SELECT v= ‚SQL Server 2000 ‚ + cast(SERVERPROPERTY (‚productlevel‘)“ _
- & “ as varchar) + ‚, Version ‚ + cast(SERVERPROPERTY(‚productversion‘)“ _
- & “ as varchar) + ‚, ‚ + cast(SERVERPROPERTY (‚edition‘) as varchar)“
- set objRS = objDB.Execute(strSQL)
- strVer = objRS.Fields(„v“).value
- elseif instr(strVer, „7.00.1063“) then strVer = „SQL Server 7.0 SP4“
- elseif instr(strVer, „7.00.961“) then strVer = „SQL Server 7.0 SP3“
- elseif instr(strVer, „7.00.842“) then strVer = „SQL Server 7.0 SP2“
- elseif instr(strVer, „7.00.699“) then strVer = „SQL Server 7.0 SP1“
- elseif instr(strVer, „7.00.623“) then strVer = „SQL Server 7.0 ohne SP“
- end if
- echo strVer
- end sub
- sub quitcode()
- echo „(kein Wert ermittelt)“
- end sub
Ein ähnliches, wenn auch viel kürzeres Skript gibt die Versionsinfo für einen lokalen Exchange Server 2003 zurück:
- Set objNetwork = CreateObject(„WScript.Network“)
- strComputer = objNetwork.ComputerName
- On Error Resume Next
- Set objWMIService = GetObject(„winmgmts:\\“ & strComputer & „\root\MicrosoftExchangeV2“)
- If Err.Number = 0 Then
- Set colItems = objWMIService.ExecQuery(„SELECT * FROM Exchange_Server „ _
- & „WHERE Name='“ & strComputer & „‚“, „WQL“)
- For Each objItem In colItems
- Select Case objItem.Type
- Case 0 strType = „Standard Edition“
- Case 1 strType = „Enterprse Edition“
- Case 2 strType = „Conferencing Edition“
- End Select
- strMessage = strType & „, „ & objItem.ExchangeVersion
- if objItem.IsFrontEndServer then strMessage = strMessage & „, FrontEnd“
- Next
- Else
- strMessage = „Exchange 2003 nicht vorhanden“
- End If
- Echo strMessage
Hier ein Skript, das den Namen des laufenden Betriebssystems ausgibt – interessant deshalb, weil diese Angabe auch die x64-Varianten und Windows 2003 R2 erkennbar macht:
- Set objWMIService = GetObject(„winmgmts:\\.\root\CIMV2“)
- Set colItems = objWMIService.ExecQuery(„SELECT * FROM Win32_OperatingSystem“)
- For Each objItem In colItems
- Echo Left(objItem.Name, InStr(objItem.Name, „|“)–1)
- Next
Und schließlich ein Skript, das die Objektbeschreibung des Computerkontos aus Active Directory anzeigt:
- Set objADSysInf = CreateObject(„ADSystemInfo“)
- Set objComputer = GetObject(„LDAP://“ & objADSysInf.ComputerName)
- Echo objComputer.description
http://faq-o-matic.net/?p=685