none
Wallpaper per Domain Policy für verschiedene Bildschirmauflösungen umsetzen RRS feed

  • Frage

  • Hallo zusammen,

    ich suche nach einer Möglichkeit, das jeweils passende Hintergrundbild entsprechend dem Höhen-Seitenverhältins (4:3 / 16:9 / 16:10) des Desktops auf die Rechner mittels Domain Policy durchzusetzen. Die Standard-Policy gibt ja nur die Möglichkeit "Ein Bild für alle", und dann nur "Zentriert / Nebeneinander oder Gestreckt" Da es sich aber um eine Corporate Design Umsetzung handelt, fallen diese gegebenen Möglichkeiten aus... Hat jemand eine Idee, wie das problem gelöst werden könnte??

    Gruß
    René

    Dienstag, 29. März 2011 12:20

Alle Antworten

  • Am 29.03.2011 schrieb RN-MAG:

    ich suche nach einer Möglichkeit, das jeweils passende Hintergrundbild entsprechend dem Höhen-Seitenverhältins (4:3 / 16:9 / 16:10) des Desktops auf die Rechner mittels Domain Policy durchzusetzen. Die Standard-Policy gibt ja nur die Möglichkeit "Ein Bild für alle", und dann nur "Zentriert / Nebeneinander oder Gestreckt" Da es sich aber um eine Corporate Design Umsetzung handelt, fallen diese gegebenen Möglichkeiten aus... Hat jemand eine Idee, wie das problem gelöst werden könnte??

    Evtl. mit WMI auf die Bildschirmauflösung filtern. Dazu in der GPO die
    passenden Bilder hinterlegen.

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/
    Reg2xml:  http://www.reg2xml.com - Registry Export File Converter

    Dienstag, 29. März 2011 15:01
  • Nicht mit WMI - das wird langsam, und Du mußt jede einzelne Auflösung im Filter haben... Das mußt skripten, damit's gescheit funktioniert:

    Per GPO setzt das Hintergrundbild auf ne lokale Datei. Und per Startskript (oder wenn User dort Schreibrechte hat auch per Logonskript) ersetzt diese Datei dann bei Bedarf mit dem jeweils geeigneten Bild. Sample:

     

    Option Explicit
    
    'Variablendeklarationen
    Dim fso, oWSH, oWMI, colWMI, objWMI, oExec, strExecCommand
    Dim strHome, strImgSourceDir
    Dim intHRes, intVRes
    
    'Konstanten
    Const strImgName = "Hintergrund.jpg"
    Const strImgDefaultSourceDir = "1280x1024"
    Const strImgTargetDir = "%SYSTEMROOT%\WEB\WallPaper"
    
    'Objekte erstellen
    Set fso = CreateObject( "Scripting.FileSystemObject" )
    Set oWSH = CreateObject( "WScript.Shell" )
    Set oWMI = GetObject( "winmgmts:\\.\root\cimv2" )
    
    'Quellverzeichnis = aktuelles Skriptverzeichnis
    strHome = fso.GetParentFolderName( WScript.ScriptFullName )
    
    intHRes = 0: intVRes = 0
    
    Set colWMI = oWMI.InstancesOf( "Win32_VideoController" )
    
    For Each objWMI In colWMI
      If intHRes = 0 Then
        intHRes = objWMI.CurrentHorizontalResolution
        intVRes = objWMI.CurrentVerticalResolution
      End If
      WScript.Echo "Name      : " & objWMI.Name
      WScript.Echo "Driver     : " & objWMI.DriverVersion
      WScript.Echo "Display     : " & objWMI.CurrentHorizontalResolution & "x" & objWMI.CurrentVerticalResolution & "x" & objWMI.CurrentBitsPerPixel & "bpp@" & objWMI.CurrentRefreshRate & "Hz"
      WScript.Echo ""
    Next
    
    If fso.FileExists( strHome & "\" & intHRes & "x" & intVRes & "\" & strImgName ) Then
      WScript.Echo "Passendes Bild gefunden: " & intHRes & "x" & intVRes
      strImgSourceDir = strHome & "\" & intHRes & "x" & intVRes
    Else
      WScript.Echo "Kein passendes Bild gefunden, verwende Standard " & strImgDefaultSourceDir & "..."
      strImgSourceDir = strHome & "\" & strImgDefaultSourceDir
    End If
    
    WScript.Echo ""
    WScript.Echo "Source Image  : " & strImgSourceDir & "\" & strImgName
    WScript.Echo "Target Image  : " & strImgTargetDir & "\" & strImgName
    
    strExecCommand = "robocopy.exe """ & strImgSourceDir & """ """ & strImgTargetDir & """ """ & strImgName & """"
    Set oExec = oWSH.Exec( strExecCommand )
    With oExec
      Do While .Status = 0
        WScript.Sleep( 100 )
        Do While Not .StdOut.AtEndOfStream
          WScript.Echo .StdOut.ReadLine
        Loop
        Do While Not .Stderr.AtEndOfStream
          WScript.Echo .StdErr.ReadLine
        Loop
      Loop
    End With
    
    

     


    Kein MVP, kein MCSE. Nur ein wenig Erfahrung.
    Mittwoch, 30. März 2011 12:07
    Beantworter
  • Hi Martin,

    Am 30.03.2011 14:07, schrieb Martin Binder:

    Nicht mit WMI - das wird langsam,

    SELECT * FROM Win32_VideoController WHERE CurrentHorizontalResolution = 1680

    Braucht lt. 185 Millisekunden :-)
    PS C:\> measure-Command {Get-WmiObject -query "SELECT * FROM
    Win32_VideoController WHERE CurrentHorizontalResolution = 1680"}

    Das ist erträglich ;-)

    Tschö
    Mark

    P.S.: Danke noch mal für den Hinweis auf den Loopback!


    Mark Heitbrink - MVP Windows Server - Group Policy

    Homepage:    www.gruppenrichtlinien.de - deutsch
    GPO Tool:    www.reg2xml.com - Registry Export File Converter
    NNTP Bridge: http://communitybridge.codeplex.com/releases

    Mittwoch, 30. März 2011 15:47
  • Ja, das ist erträglich. Nur brauchsrt Du für jedes Wallpaper ja einen eigenen WMI-Filter, und die Summe macht's :-)

    Per Skript hat noch den Vorteil (wenn Startskripte async. laufen), dass die Zeit keine Rolle spielt.

    P.S: Das mit dem Loopback und den Leserechten für Computer weiß ich auch nur, weil wir da reingefallen sind :-)


    Kein MVP, kein MCSE. Nur ein wenig Erfahrung.
    Donnerstag, 31. März 2011 06:58
    Beantworter
  • Am 30.03.2011 schrieb Mark Heitbrink [MVP]:
    Hi,

    Am 30.03.2011 14:07, schrieb Martin Binder:

    Nicht mit WMI - das wird langsam,

    SELECT * FROM Win32_VideoController WHERE CurrentHorizontalResolution = 1680

    Braucht lt. 185 Millisekunden :-)
    PS C:\> measure-Command {Get-WmiObject -query "SELECT * FROM
    Win32_VideoController WHERE CurrentHorizontalResolution = 1680"}

    Das ist erträglich ;-)

    Wenns nicht zu viele verschiedene MonitorTypen sind könnte man die auch
    direkt abfragen und darauf filtern. Die Auflösung kann ja auch "falhcs" sein
    ;)

    Bye
    Norbert

    Donnerstag, 31. März 2011 07:54
    Moderator
  • Hallo Martin,

    vielen Dank für den Script. Bin erst jetzt zum Testen gekommen...
    Ich hab das so implementiert und da gibt es ein paar Fragen:
    Das passende Hintergrundbild wird entsprechend der Auflösung gefunden und auch in das entsprechende Verzeichnis kopiert. So weit - so gut.

    Jetzt ist aber die Umsetzung der Richtline mit dem Hintergrundbild (unter Benutzerkonfiguration/Administrative Vorlagen: vom lokalen Computer/Desktop/Desktop/Desktophintergrund) schneller als die Scriptabarbeitung. D.h. dass erst das auf dem lokalen PC vorhandene Bild als Hintergrundbild gesetzt wird und dann erst das "aktuell passende" Bild dort hin kopiert wird.

    Lässt sich nicht gleich die Zuweisung des Hintergundbildes mit dem Script mit erledigen?
    Oder habe ich irgend einen Einfluss auf die Reihenfolge der Abarbeitung?
    (Den Script habe ich unter Benutzerkonfiguration/Richtlinien/Windows-Einstellungen/Scripts (Anmelden/Abmelden)/Anmelden am Laufen.)

    Gruß

    René

    Donnerstag, 31. März 2011 09:55
  • Da gibts - wie fast immer ;-) - mehrere Möglichkeiten:

    - Starte das Skript nicht im Logon, sondern im Computerstart

    - Stelle die Skriptverarbeitung von Asynchron auf Synchron auf. Asynchron: Skripte werden gleichzeitig mit dem Desktop gestartet. Synchron: Skripte laufen VOR dem Desktop-Aufbau. http://www.gruppenrichtlinien.de/Grundlagen/faq.htm#36 der untere Eintrag.

    mfg Martin


    Kein MVP, kein MCSE. Nur ein wenig Erfahrung.
    Donnerstag, 31. März 2011 10:06
    Beantworter
  • Also die Scriptabarbeitung unter Computerkonfiguration/Admin. Vorlagen/System/Scripts stehen auf:

    "Anmeldescript gleichzeitig ausfühen: Aktiviert"
    "Startscripts asynchron ausführen: Deaktiviert"

    Trotzdem wird erst der Desktop aufgebaut und dann der Anmeldescript ausgeführt....

    Die Variante "Computerstart" - da meinst du sicher die Computerrichtlinie Windows-Einstellungen/Scripts (Start/Herunterfahren)/Starten...

    Dann gibt es noch ein ziemlich nerviges Problem bei Robocopy: Ich muss 32 x ein Popup-Fenster wegdrücken bis alles erledigt ist... Einen "silent"-Parameter hab ich aber nicht so richtig gefunden.
    Dann dachte ich, die Sache mit xcopy zu lösen; da geht dann aber ein cmd-Fenster auf (leer) und das hängt dann for ever...

    Gruß

    René

    Donnerstag, 31. März 2011 12:00
    • "Anmeldescript gleichzeitig ausfühen: Aktiviert"

    Ja, blöd eingedeutscht. Das muß deaktiviert werden. Aber Achtung: Wenn Du Logonskripte hast, die lange laufen (oder gar hängenbleiben), dann dauerts 10 Minuten bis zum Timeout...

    Daß Robocopy ein Popup bringen würde, hab ich noch nie gehört - was steht denn da drin? Und wieso 32x?

    Bei xcopy sind /d oder /y wohl die Lösung Deines Problems - "Nachfragen unterdrücken".


    Kein MVP, kein MCSE. Nur ein wenig Erfahrung.
    Donnerstag, 31. März 2011 12:05
    Beantworter
  • ja, super Übersetzung, und in der Erklärung:
    "Wenn Sie diese Einstellung deaktivieren oder nicht konfigurieren, werden Anmeldeskripts und Windows-Explorer nicht synchronisiert und können gleichzeitig ausgeführt werden.
    naja...

    Bei Robocopy ist es so, dass ich das Programm per UNC-Pfad aufrufe (\\adsserver\Wallpaper\robocopy.exe) In dem "Wallpaper-Verzeichnis gibt es aus den 2003er Resource-Kit auch nur diese eine Datei. Ich habe das Kit auf dem Server nicht installiert, weil es mit 2008 nicht kompatibel ist, und auf den Clients ist's auch nicht drauf.

    Beim Start von Robocopy kommen wie gesagt 32 Fenster nacheinander;
    1. Fenster: komplett leer (nur Fenstertitel immer "Windows Script Host"), 
    2. Fenster: langer Strich  ("------------------------------")
    3. Fenster: ROBOCOPY  ::  Robust File Copy for Windows   ::   Version XP010
    4. Fenster:  langer Strich  ("------------------------------")
    5. Fenster: leer
    6. Fenster: Started: Thue Mar 31 14:24:40 2011
    7. Fenster: leer
    8. Fenster: Source: \\adsserver\wallpaper\1280x1024\
    .....
    Das sieht so aus, als würden alle Ausgaben, die normalerweise im cmd-Fenster zeilenweise kommen, alle per Popup übertragen werden....

    Donnerstag, 31. März 2011 12:29
  • Hihi ;-)

    WScript.Echo - wie genau wird Dein Logonskript gestartet? Das dürfte ein VBS-Rahmenskript sein, das (vmtl. via objWSH.Exec) dann weitere Batches aufruft, oder?

    Und dieses Skript läuft nicht unter CScript, sondern unter WScript -> Popups... Aufruf ändern. cscript //b sollte Dir helfen.


    Kein MVP, kein MCSE. Nur ein wenig Erfahrung.
    Donnerstag, 31. März 2011 12:44
    Beantworter
  • ja, ich habe den Script als .vbs gespeichert und rufe ihn wie gesagt unter
    Benutzerkonfiguration/Richtlinien/Windows-Einstellungen/Scripts (Anmelden/Abmelden)/Anmelden
    am Laufen

    Wie meinst du den zweiten Teil (cscript //b)?

    xcopy hat leider ein ähnliches Problem. /Y hilft natürlich, das schwarze Fenster zu beseitigen, es kommen dann natürlich auch 2 Popups, die man ja auf der Kommandozeile mit ">nul" unterdrücken könnte. Das geht aber hier anscheinend nicht...

    Gruß René

    Donnerstag, 31. März 2011 13:09
  • Hast Du das VBS bei der Befehlszeile reingeschrieben? Dann machs stattdessen bei Parameter rein und nimm bei Befehlszeile "cscript", dann ist Ruhe im Karton.

    Oder nimm als Befehlszeile "wscript" und setz bei Parameter vor das VBS noch ein "//B" (ja, es sind zwei /).


    Kein MVP, kein MCSE. Nur ein wenig Erfahrung.

    Donnerstag, 31. März 2011 14:03
    Beantworter
  • ja, einfach aber genial die Lösung :)

    Jetzt kommt eigentlich noch das größte Problem:

    Es gibt mehrere Arbeitsplätze, die eine Dual-Monitor Lösung haben, wobei die Monitore nicht mal identisch sind. (teilweise auch im Aspect Ratio unterschiedlich)

    Lässt sich das auch lösen?

    Danke im Voraus ;)

    Gruß René

    Donnerstag, 31. März 2011 14:16
  • Nein, nicht mit Bordmitteln. Windows kann von Haus aus nur ein Hintergrundbild für alle Monitore. Zusatzsoftware kanns, z.B. DisplayFusion...

    mfg Martin


    Kein MVP, kein MCSE. Nur ein wenig Erfahrung.
    Donnerstag, 31. März 2011 14:48
    Beantworter
  • Moin,

    Am 31.03.2011 14:05, schrieb Martin Binder:

    * "Anmeldescript gleichzeitig ausfühen: Aktiviert" Ja, blöd eingedeutscht. Das muß deaktiviert werden.

    äh, warum jetzt? Ich denke ihr wollt sie vor der Explorer.exe?

    | Wenn Sie diese Einstellung aktivieren, kann der Windows-Explorer erst
    | gestartet werden, nachdem die Anmeldeskripts zu Ende ausgeführt wurden

    Sie laufen ja nicht "gleichzeitig" oder "syncron", sondern:
    "syncronisiert", zeitlich auf einander abgestimmt, wie ein
    Synchronisiertes Getriebe, wo das nächste Zahnrad erst dann in
    das andere greift, wenn das andere angehalten hat/ fertig ist.

    Tschö
    Mark


    Mark Heitbrink - MVP Windows Server - Group Policy

    Homepage:    www.gruppenrichtlinien.de - deutsch
    GPO Tool:    www.reg2xml.com - Registry Export File Converter
    NNTP Bridge: http://communitybridge.codeplex.com/releases

    Donnerstag, 31. März 2011 18:09
  • Hast ja recht :-)
    Kein MVP, kein MCSE. Nur ein wenig Erfahrung.
    Freitag, 1. April 2011 11:03
    Beantworter
  • Am 01.04.2011 13:03, schrieb Martin Binder:

    Hast ja recht :-)

    Darum ging es mir :-)
    Nee, nicht nur, ich war nur verwirrt und da ich weiss, das gerade das
    Thema "synchron" die größte Verwirrung stiftet, wollte ich nur mal
    fragen.

    Jeder hat bei "synchron" immer gleich Turmspringen, Tanzen und Trampolin
    vor Augen :-D

    Tschö
    Mark


    Mark Heitbrink - MVP Windows Server - Group Policy

    Homepage:    www.gruppenrichtlinien.de - deutsch
    GPO Tool:    www.reg2xml.com - Registry Export File Converter
    NNTP Bridge: http://communitybridge.codeplex.com/releases

    Freitag, 1. April 2011 11:53
  • Ja, hübsche Mädels in knackigen Anzügen... Aber die deutsche Übersetzung der beiden Settings für Startup und Logon ist auch echt irreführend.

    mfg Martin


    Kein MVP, kein MCSE. Nur ein wenig Erfahrung.
    Freitag, 1. April 2011 11:55
    Beantworter
  • Am 29.03.2011 schrieb Winfried Sonntag [MVP]:
    Hi,

    ich suche nach einer Möglichkeit, das jeweils passende Hintergrundbild entsprechend dem Höhen-Seitenverhältins (4:3 / 16:9 / 16:10) des Desktops auf die Rechner mittels Domain Policy durchzusetzen. Die Standard-Policy gibt ja nur die Möglichkeit "Ein Bild für alle", und dann nur "Zentriert / Nebeneinander oder Gestreckt" Da es sich aber um eine Corporate Design Umsetzung handelt, fallen diese gegebenen Möglichkeiten aus... Hat jemand eine Idee, wie das problem gelöst werden könnte??

    Evtl. mit WMI auf die Bildschirmauflösung filtern. Dazu in der GPO die
    passenden Bilder hinterlegen.

    Hmm, wenns nicht allzuviele verschiedene Monitortypen geben sollte, könnte
    man auch direkt auf die Hardware des Monitors filtern, da wohl kaum jemand
    freiwillig auf Dauer ein falsches Seitenverhältnis fährt.

    Bye
    Norbert


    Dilbert's words of wisdom #10:
    I don't have an attitude problem. You have a perception problem.

    Sonntag, 3. April 2011 12:25
    Moderator
  • Hallo nochmal,

    das Thema ist leider noch nicht so ganz abgeschlossen, da das Laufzeitverhalten noch so einige Ungereimtheiten beinhaltet:

    Ich habe einen "alten" Hintergrund "A", der auch die entsprechende "alte" Auflösung hat. Jetzt kommt ein anderer Bildschirm mit einer anderen Auflösung dran. Dann sollte ja der Script das neue Bild "B" laden und darstellen. Der Script sieht jetzt so aus:

    Option Explicit

    'Variablendeklarationen
    Dim fso, oWSH, oWMI, colWMI, objWMI, oExec, strExecCommand
    Dim strHome, strImgSourceDir
    Dim intHRes, intVRes

    'Konstanten
    Const strImgName = "Hintergrund.jpg"
    Const strImgDefaultSourceDir = "1280x1024"
    Const strImgTargetDir = "C:\WINDOWS\WEB\WallPaper"

    'Objekte erstellen
    Set fso = CreateObject( "Scripting.FileSystemObject" )
    Set oWSH = CreateObject( "WScript.Shell" )
    Set oWMI = GetObject( "winmgmts:\\.\root\cimv2" )

    'Quellverzeichnis = aktuelles Skriptverzeichnis
    strHome = fso.GetParentFolderName( WScript.ScriptFullName )

    intHRes = 0: intVRes = 0

    Set colWMI = oWMI.InstancesOf( "Win32_VideoController" )

    For Each objWMI In colWMI
      If intHRes = 0 Then
        intHRes = objWMI.CurrentHorizontalResolution
        intVRes = objWMI.CurrentVerticalResolution
      End If
    Next

    If fso.FileExists( strHome & "\" & intHRes & "x" & intVRes & "\" & strImgName ) Then
        strImgSourceDir = strHome & "\" & intHRes & "x" & intVRes
    Else
        strImgSourceDir = strHome & "\" & strImgDefaultSourceDir
    End If

    strExecCommand = "robocopy.exe """ & strImgSourceDir & """ """ & strImgTargetDir & """ """ & strImgName & """"

    Set oExec = oWSH.Exec( strExecCommand )
    With oExec
      Do While .Status = 0
        WScript.Sleep( 100 )
        Do While Not .StdOut.AtEndOfStream
          WScript.Echo .StdOut.ReadLine
        Loop
        Do While Not .Stderr.AtEndOfStream
          WScript.Echo .StdErr.ReadLine
        Loop
      Loop
    End With

    Robocopy steht dabei im Standardsuchpfad des Servers (funktioniert soweit auch). Jetzt passiert folgendes:

    Der User meldet sich an. Es wird im Anmeldeprozeß der alte Hintergrund angezeigt (selbst wenn es die Datei durch manuelles Löschen lokal gar nicht mehr gibt - wird also irgendwo aus einem Cache gelesen). Dann flackert kurz der Bildschirm und die Autostartobjekte der GPO werden ausgeführt. Die neue Date "B" steht dann auch an der richtigen Stelle, wird aber nicht als Hintergrundbild angezeigt.

    Beim Abmelden bleibt das alte Bild "A" stehen.

    Beim erneuten Anmelden wird wieder "A" angezeigt, der Bildschirm flackert kurz und es wird auf "B" umgeschaltet.

    Beim Abmelden wird im Abmeldevorgang wieder auf "A" umgeschaltet.

    Mit dem nächsten Anmelden wird in allen 3 Phasen nur noch "B" angezeigt.

    Es sind also 3 An- und Abmeldevorgänge notwendig, bis die Richtlinie vollständig umgesetzt ist! Ist das normal???

    Gruß René

    Freitag, 8. April 2011 09:02
  • Aktiviere "Anmeldeskripts gleichzeitig ausführen" (Administrative Vorlagen - System - Skripts). Dann wird das Bild kopiert, bevor der Desktop erscheint.
    Kein MVP, kein MCSE. Nur ein wenig Erfahrung.
    Freitag, 8. April 2011 10:20
    Beantworter
  • ja, ich dachte, ich hatte das schon... Muss ich wohl mal beim Testen zurückgesetzt haben.
    Aber nach dem Ändern (und Durchsetzen) passt's zumindest schon mal beim 2. Anmelden. Ansonsten gleiches Verhalten wie vorher, nur dass beim 2. Abmelden bereits "B" bleibt.

    Freitag, 8. April 2011 13:01