BGInfo-Einrichtung

Ich hatte vor fast zwei Jahren schon mal einen Artikel zu dem Thema gemacht: Systeminformationen auf dem Hintergrundbild mit „BGInfo“
Der Artikel ist recht allgemein verfasst, daher folgt jetzt eine kleine Anleitung zur Einrichtung, wie ich es in der Regel durchführe.

Benötigte Dateien

  • bginfo.exe
  • bginfo.bgi
  • diskspace.vbs
  • uptime.vbs
  • run.bat

Zentrale Ablage der Dateien im Netzwerk

Die Dateien können entweder auf einem Fileserver oder im Share für die GPOs auf den Domain-Controllern abgelegt werden. Normalerweise sollte man Dateien auf den GPO-Shares vermeiden, hier bei BGInfo handelt es sich aber um minimale Dateigrößen und es geht um eine zentrale Funktion, daher sehe ich technisch kein Problem damit.

Hierzu auf dem Domain-Controller im Server-Manager nachsehen, wo bspw. die Freigabe „NETLOGON“ liegt, dann diesen lokalen Pfad im Windows-Explorer öffnen und dort den Ordner „BGInfo“ anlegen, sowie alle oben genannten Dateien dort hin kopieren.
Die Dateien sollten nun auch über den Pfad „\\<NAME-of-DOMAIN>\SysVol\<NAME-of-DOMAIN>\scripts\BGInfo“ erreichbar sein.

Gruppenrichtlinien

Zur Verteilung der Dateien und dem geplanten Ausführen des Tools lege ich folgende vier GPOs an:

  1. _BGINFO-Step01_S-C-PR-WS-FS_Create-required-folder_v1.0
  2. _BGINFO-Step02_S-C-PR-WS-FS_Copy-required-files_v1.0
  3. _BGINFO-Step03a_S-C-PR-CPS-ST_CreateTask-in-TaskScheduler_v1.0
  4. _BGINFO-Step03b_S-X-PO-WS-SC_Run-Update_v1.0

Details zu „_BGINFO-Step01_S-C-PR-WS-FS_Create-required-folder_v1.0“

Diese GPO erstellt auf allen Zielsystemen den Ordner „bginfo“ unter C:\ und versteckt ihn, sodass er nicht mit einfachen Mitteln zu sehen ist.

Details zu „_BGINFO-Step02_S-C-PR-WS-FS_Copy-required-files_v1.0“

Diese GPO kopiert alle o.g. benötigten Dateien vom Netzlaufwerk zum Ordner „C:\bginfo“ und versteckt diese.
D.h. es werden nun für alle Dateien unter „Computer Configuration > Preferences > Windows Settings > Files“ ein Eintrag erstellt nach folgendem Schema:

  • Action: „Replace“
  • Source: \\<NAME-of-DOMAIN>\SysVol\<NAME-of-DOMAIN>\scripts\BGInfo\Bginfo.exe
  • Destination: C:\BGinfo\Bginfo.exe

Details zu „_BGINFO-Step03a_S-C-PR-CPS-ST_CreateTask-in-TaskScheduler_v1.0“

Diese GPO erstellt den Task „_GPO_bginfo“. Dabei muss man aufpassen, dass man im Kontextmenü die Option „Scheduled Task (At least Windows 7)“ auswählt. Danach mit folgenden Einstellungen den Task konfigurieren:

  • Allgemein
    • Action: Replace (Achtung: Im Screenshot ist da leider „Update“ dargestellt)
    • Name: _GPO_bginfo
    • Description: Runs bginfo
    • Benutzer: BULTIN\Users (deutsch: VORDEFINIERT\Benutzer)
    • Run when user is logged in
  • Trigger
    • At startup
    • At log on
    • On idle
    • On connection to user session > Connection from remote computer
    • On connection to user session > Connection from local computer
    • On workstation unlock
  • Actions
    • Action: Start a program
    • Program/Script: C:\bginfo\Bginfo.exe
    • Add arguments: „C:\bginfo\bginfo.bgi“ /SILENT /TIMER:0 /NOLICPROMPT
  • Conditions
    • Hier alles im Standard lassen -> also kein Haken gesetzt
  • Settings
    • Haken bei:
      • Allow task to be run on demand
      • Run task as soon as possible after a scheduled start is missed
      • If the running task does not end when requested, force it to stop
    • If the task is already running, then the following rule applies: Queue a new instance

Details zu „_BGINFO-Step03b_S-X-PO-WS-SC_Run-Update_v1.0“

In dieser GPO wird ein einfaches Skript ausgeführt, was nochmal unabhängig vom Task die BGInfo ausgeführt wird und als Art „Fallback“ dient, falls der Task mal nicht so will, wie er soll 😉

Es werden in folgenden GPO-Pfaden die Info zum Skript hinterlegt:

  • Computer Configuration > Policies > Windows Settings > Scripts
    • Startup
    • Shutdown
  • User Configuration > Policies > Windows Settings > Scripts
    • Logon
    • Logoff

Kleiner Tipp hierbei:
Die Datei „run.bat“ vorher anlegen, dann im Properties-Dialog auf den Button <Add> klicken, dann auf <Browse> und dort dann die Datei einfügen. Vorteil ist, dass sie dann direkt bei der zugehörigen GPO ist.

Inhalt vom Skript „run.bat“:

@echo off

C:\bginfo\Bginfo.exe "C:\bginfo\bginfo.bgi" /SILENT /TIMER:0 /NOLICPROMPT

exit

Verlinken der GPOs und deren Reihenfolge

Die GPOs sind jetzt fertig und können dort verlinkt werden, wo sie angewandt werden sollen, wie bspw. auf den Domain-Controllern.

Dazu einfach in der OU „Domain Controllers“ einen Rechtsklick machen und im Kontextmenü „Link an Existing GPO…“ auswählen. Da die GPOs mit „_BGINFO“ beginnen, sollten sie auch einfach zu finden sein; dann alle vier auswählen und auf <OK> klicken.

Die Reihenfolge sollte jetzt so angepasst werden, dass von unten noch oben gelesen, die Reihe genau umgekehrt ist; also:

  1. _BGINFO-Step03b_S-X-PO-WS-SC_Run-Update_v1.0
  2. _BGINFO-Step03a_S-C-PR-CPS-ST_CreateTask-in-TaskScheduler_v1.0
  3. _BGINFO-Step02_S-C-PR-WS-FS_Copy-required-files_v1.0
  4. _BGINFO-Step01_S-C-PR-WS-FS_Create-required-folder_v1.0

Weitere Infos zur Verarbeitung gibt es in meinem Artikel Verarbeitungsreihenfolge der GPOs.

Test

Nach einem „gpupdate /force“ sind der Ordner, die Dateien und der Task da. Den Task kann man jetzt erstmalig manuell anstoßen und schon sollte sich das Hintergrundbild ändern.

Anpassungen

Möchte man die Infos anpassen (oder noch ein Firmenlogo einfügen), so bearbeitet man einfach die „bginfo.bgi“ auf dem o.g. Pfad; also Rechtsklick und „Open“, dann einmalig den Lizenzdialog bestätigen.

Das Tool ist im Grunde genommen selbsterklärend; im Hauptbereicht hat man den Text mit den Variablen (welche man rechts auswählen & hinzufügen kann), darüber kann man ein bisschen die Schrift gestalten. Rechts sind noch vier interessante Buttons:

  • Background
    Hier kann man einstellen, ob das persönliche Hintergrundbild beibehalten werden soll (optional kann man ganz unten den Haken („Make wallpaper visible behind test„) setzen, dass es hinter dem BGinfo-Text weiterhin zusehen ist – da sollte man dann aber auf den Kontrast zwischen Bild und Text achten 😉
    Man kann aber auch auf „Use these settings“ wählen und selbst ein bestimmtes (Firmen-)Hintergrundbild festlegen oder eine schlichte Farbe wählen; dann muss allerdings das Textfeld bei „Wallpaper Bitmap“ leer sein.
  • Position…
    Hier kann man einstellen, wo auf dem Desktop die Infos angezeigt werden sollen, sowie sich das bei mehreren Monitoren verhalten soll. Gängig ist eine Anzeige im rechten oberen/unteren Eck.
  • Desktops
    Hier kann man einstellen, welche Hintergrundbilder aktualisiert werden sollen. In der Regel stehen alle drei Wallpaper auf „Update this wallpaper“:
    • User Desktop
    • Logon Desktop for Console Users
    • Logon Desktop for Terminal Services users
  • Preview
    Hier kann man sich eine Vorschau anzeigen lassen, bevor man die Config-Datei speichert

Über den Menüpunkt „Edit > Insert Image“ kann man noch ein Bild (Format muss BMP, JPG, GIF sein) einfügen.

Mit dem Button <Apply> kann man die aktuelle Konfig auch schon direkt anwenden.

Download der Dateien

Hier können die Dateien heruntergeladen werden (sind in einem ZIP-Ordner zusammengefasst):

Inhalte der Dateien

Const HARD_DISK = 3
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")
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.VolumeName & ")"
Next
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colOses =  objWMIService.ExecQuery("SELECT LastBootUpTime From Win32_OperatingSystem")

For Each objOs In colOses
	diffMin = DateDiff("n", WMIDateToString(objOs.LastBootUpTime), Now)
    diffDays = Fix(diffMin / (60 * 24))
    diffMin = diffMin - diffDays * 24 * 60
    If diffDays >= 1 Then
        uptimeStr = uptimeStr & CStr(diffDays) & " day"
		If diffDays = 1 Then
			uptimeStr = uptimeStr & ", "
		Else
			uptimeStr = uptimeStr & "s, "
		End If
    End If
    diffHours = Fix(diffMin / 60)
    diffMin = diffMin - diffHours * 60
    If diffHours >= 1 Then
        uptimeStr = uptimeStr & CStr(diffHours) & " hour"
		If diffHours = 1 Then
			uptimeStr = uptimeStr & ", "
		Else
			uptimeStr = uptimeStr & "s, "
		End If
    End If
	If diffMin = 1 Then
		uptimeStr = uptimeStr & CStr(diffMin) & " minute "
	Else 
		uptimeStr = uptimeStr & CStr(diffMin) & " minutes "
	End If
    
    echo uptimeStr
Next

Function WMIDateToString(ByVal dtmDate)
  'Version 1.3 2008-04-28
  Dim objSWbemDateTime
 
  If IsNull(dtmDate) or IsEmpty(dtmDate) or dtmDate="" Then
    WMIDateToString = Empty
  Else
    On Error Resume Next
    Set objSWbemDateTime = CreateObject("WbemScripting.SWbemDateTime")
    If Err.Number <> 0 Then
      'An error occured creating the SWbemDateTime object. 
      'Probably a Win2000 computer.
      On Error GoTo 0
      'Use the older text manipulation method, with no local time zone
      'adjustment.
      WMIDateToString = CDate(Mid(dtmDate, 5, 2) & "/" & _
                      Mid(dtmDate, 7, 2) & "/" & _
                      Left(dtmDate, 4) & " " & _
                      Mid(dtmDate, 9, 2) & ":" & _
                      Mid(dtmDate, 11, 2) & ":" & _
                      Mid(dtmDate, 13, 2))
    Else
      On Error GoTo 0
      objSWbemDateTime.Value = dtmDate
      WMIDateToString = objSWbemDateTime.GetVarDate(True)
      Set objSWbemDateTime = Nothing    
    End If 'Err.Number <> 0
   
  End If 'Not IsNull(dtmDate)
End Function 'WMIDateToString
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Author>https://ronny-boettcher.de/?p=4928</Author>
    <Description>Runs bginfo // For more details check out: https://ronny-boettcher.de/?p=4928</Description>
    <URI>\_GPO_bginfo</URI>
  </RegistrationInfo>
  <Triggers>
    <BootTrigger>
      <Enabled>true</Enabled>
    </BootTrigger>
    <LogonTrigger>
      <Enabled>true</Enabled>
    </LogonTrigger>
    <IdleTrigger>
      <Enabled>true</Enabled>
    </IdleTrigger>
    <SessionStateChangeTrigger>
      <Enabled>true</Enabled>
      <StateChange>RemoteConnect</StateChange>
    </SessionStateChangeTrigger>
    <SessionStateChangeTrigger>
      <Enabled>true</Enabled>
      <StateChange>ConsoleConnect</StateChange>
    </SessionStateChangeTrigger>
    <SessionStateChangeTrigger>
      <Enabled>true</Enabled>
      <StateChange>SessionUnlock</StateChange>
    </SessionStateChangeTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <GroupId>S-1-5-32-545</GroupId>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>Queue</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <Duration>PT5M</Duration>
      <WaitTimeout>PT1H</WaitTimeout>
      <StopOnIdleEnd>false</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\bginfo\Bginfo.exe</Command>
      <Arguments>"C:\bginfo\bginfo.bgi" /SILENT /TIMER:0 /NOLICPROMPT</Arguments>
    </Exec>
  </Actions>
</Task>

Ronny Böttcher

Microsoft-Systemadministrator seit 2007 und seit 2021 als IT-Consultant bei Bechtle in Deutschland am Standort Mannheim; alle bisherigen Stationen siehe bei "Über mich". In seiner Freizeit bei der Feuerwehr und Modellbahner, zudem gerne am Kochen/Grillen - oder am Essen 😁

5 Antworten

  1. nigelmacandie sagt:

    You really make it seem so easy with your presentation but
    I find this matter to be actually something that I think I would never
    understand. It seems too complicated and extremely broad for me.
    I’m looking forward for your next post, I will try to get the hang of it!

  2. Haba.Gugg sagt:

    Danke für diese geniale Anleitung. Normalerweise bekommt man nur komplett überladene Anleitungen die nicht Zielführend sind.
    Einen Punkt hätte ich noch gefunden der Möglichkeiten zur Optimierung bietet: Thema Netzwerkkarten. Da gibt es oft Virtuelle Netzwerkkarten, oder nicht verbundene die allesamt als (none) dargestellt werden. wenn man sowas noch rausbekommen könnte, oder noch die SSID vom WLAN anzeigen könnte wäre genial und das Tüpfelchen auf dem „i“ :o))

  3. Strovobrurr sagt:

    Vielen Dank für die ausführliche Anleitung. Leider habe ich das Problem das auf der Shell der Befehl:
    C:\bginfo\Bginfo.exe „C:\bginfo\bginfo.bgi“ /SILENT /TIMER:0 /NOLICPROMPT funktioniert.
    Nur mit der Aufgabeplanung klappt es nicht bekomme immer im Verlauf der Aufgabenplanung:
    Aktion „C:\bginfo\bginfo.exe“ mit Rückgabecode 2147942401 erfolgreich abgeschlossen. Es wird aber nichts auf dem Desktop aktualisert. Erst wieder wenn ich den obrigen Befehl manuell ausführe. Gibt es dazu eine Lösung alles was ich bis jetzt gegooglet habe hat zu keinem Erfolg geführt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

DSGVO Cookie Consent mit Real Cookie Banner