badger
Goto Top

Outlook 2013: Message Preview - Einstellungen verteilen

Hallo Leute,

seit dem letztem Outlook Update KB3085579 ist (wieder) eine Funktion verfügbar, um die Schriftart/Farbe der Nachrichtenvorschau zu ändern (Info z.B. hier).

Das Problem ist, das Outlook nach dem Update standardmäßig die Farbe auf blau ändert.
Nachdem ich mittlerweile viele Beschwerden der User über dieses blau erhalten habe, möchte ich die Farbe wieder auf das "alte" Grau umstellen.

Mein Problem ist aber:
  • In den Office 2013 Administrative Template ist diese Einstellung noch nicht verfügbar (ADMX hat die Version 15.0.4727.1000 - nach Installation des KB3085579 hat man die Version 15.0.4763.1000)
  • Diese Einstellung wird auch nicht in der registry gespeichert. Zumindest findet regshot keine Änderungen in der registry (wenn ich die Schriftfarbe ändere).

Weiß wer, wo diese Einstellung gespeichert wird?
Ich habe nämlich wenig Lust, die Farbe jetzt bei jedem User einzeln umzustellen.

Beste Grüße
Patrick

Content-ID: 285744

Url: https://administrator.de/contentid/285744

Printed on: October 11, 2024 at 15:10 o'clock

colinardo
colinardo Oct 16, 2015, updated at Jan 18, 2016 at 08:06:06 (UTC)
Goto Top
Hallo Patrick
Weiß wer, wo diese Einstellung gespeichert wird?
Die wird in Outlook in den Ansichten gespeichert. Und das ganze im PST-File oder in der Mailbox auf dem Exchange.

Das sieht man wenn man eine Mailbox mit MFCMapi öffnet

e37d9c918d3af8496278c3e1b7391225

Hier sieht man ein Beispiel solch einer Ansicht und deren XML-Config

241ed830e423f0db7f37cd6b66f118da

http://www.msoutlook.info/question/51
http://www.outlook-tips.net/how-to/copy-outlook-custom-views/

Da haben die bestimmt den Color-Index geändert. Könnte man vielleicht über ein Makro lösen.

Grüße Uwe

- * Nachtrag -

Per VBS ließe sich das bspw. so lösen (Natürlich kann man das auch mit andern Programmiersprachen umsetzen (Powershell / AutoIT) das wäre kein Problem)
On Error Resume Next
Set objOL = CreateObject("Outlook.Application")  
Set xml = CreateObject("Msxml2.DOMDocument.6.0")  

Set v = objOL.GetNamespace("MAPI").GetDefaultFolder(6).CurrentView  
xml.LoadXML (v.xml)
Set node = xml.SelectSingleNode("/view/previewstyle")  
If Not node Is Nothing Then
	node.Text = "color:gray"  
Else
	Set el = xml.createElement("previewstyle")  
	el.text = "color:gray"  
	xml.documentElement.appendChild(el)
End If
v.xml = xml.xml
v.Save
MsgBox "Farbe der Nachrichtenvorschau in der Ansicht welche im Posteingang eingestellt ist auf Grau geändert",vbInformation  

Set xml = Nothing
Set objOL = Nothing
Badger
Badger Oct 19, 2015 at 07:38:20 (UTC)
Goto Top
Hallo Uwe,

herzlichen Dank für deine sehr ausführliche Info!

Das Programm MFCMapi war mir neu - sowie auch, dass Outlook dies direkt in der Mailbox speichert.

Beste Grüße
Patrick
Badger
Badger Oct 19, 2015 updated at 08:20:11 (UTC)
Goto Top
Falls das noch wer braucht:
Ich setze mir EINMALIG (per GPO) einen Registrierungswert in HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce mit dem Link zum Script.
Dies wird dann beim Anmelden des Users einmal angewendet und alles läuft perfekt face-smile
Badger
Badger Oct 20, 2015 at 06:45:20 (UTC)
Goto Top
@colinardo:
Gibt es eigentlich auch eine Möglichkeit zu überprüfen, ob der User überhaupt ein Postfach hat, bevor das Script ausgeführt wird?
Hätte jetzt schon einiges probiert. Habe aber leider noch nichts passendes gefunden.
Denn so liefert mir z.b. eine Abfrage von
objOL.GetNamespace("MAPI")  
sofort einen Fehler (sofern kein Postfach vorhanden ist).
Badger
Badger Oct 21, 2015 at 07:10:16 (UTC)
Goto Top
Hab das Ganze jetzt so gelöst:

On Error Resume Next

Dim fso    
Set fso = CreateObject("Scripting.FileSystemObject")  
set WshShell = WScript.CreateObject("WScript.Shell")  
strAppData = WshShell.ExpandEnvironmentStrings("%AppData%")  

If fso.FileExists(strAppData+"\Microsoft\Outlook\Outlook.xml") Then  
	Set objOL = CreateObject("Outlook.Application")  
	Set xml = CreateObject("Msxml2.DOMDocument.6.0")  

	Set v = objOL.GetNamespace("MAPI").GetDefaultFolder(6).CurrentView  
	xml.LoadXML (v.xml)
	Set node = xml.SelectSingleNode("/view/previewstyle")  
	If Not node Is Nothing Then
		node.Text = "color:gray"  
	Else
		Set el = xml.createElement("previewstyle")  
		el.text = "color:gray"  
		xml.documentElement.appendChild(el)
	End If
	v.xml = xml.xml
	v.Save

	Set xml = Nothing
	Set objOL = Nothing
End If
Foertschy
Foertschy Nov 17, 2015 at 09:03:49 (UTC)
Goto Top
Hallo, ich habe bei uns das gleiche Problem, nur ist es bei mir so, dass euer Skript nur die Message Preview Farbe im Posteingang ändert
aber alle anderen Unterordner behalten das nervige blau.

Habt ihr dafür evtl. auch noch eine Lösung?
colinardo
colinardo Nov 17, 2015 updated at 11:23:49 (UTC)
Goto Top
Hallo, ich habe bei uns das gleiche Problem, nur ist es bei mir so, dass euer Skript nur die Message Preview Farbe im Posteingang ändert aber alle anderen Unterordner behalten das nervige blau.
Habt ihr dafür evtl. auch noch eine Lösung?
Hallo Foertschy,
das war so beabsichtigt, es könnte ja sein das die User Ihre eigenen Ansichten definiert haben, und die einfach alle abzuändern hätte ich halt als "Bevormundung" verstanden.


Falls das doch benötigt wird, das hier ändert bei allen anderen Ansichten die Farbe der Nachrichtenvorschau auf Grau.
On Error Resume Next
Const HKCU = &H80000001
'Check if an outlook 2013 profile exists  
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")  
objReg.EnumKey HKCU, "Software\Microsoft\Office\15.0\Outlook\Profiles", arrSubKeys  
if IsNull(arrSubKeys) then wscript.Quit	'quit if no profile exists  

'Create additional objects  
Set objOL = CreateObject("Outlook.Application")  
Set XML = CreateObject("Msxml2.DOMDocument.6.0")  
XML.async = false

'get views object  
Set ol_views = objOL.GetNamespace("MAPI").GetDefaultFolder(6).Views  
'for each view change preview-style to gray  
For Each v In ol_views
    XML.LoadXML (v.XML)
    Set Node = XML.SelectSingleNode("/view/previewstyle")  
    If Not Node Is Nothing Then
        Node.Text = "color:gray"  
    Else
        Set el = XML.createElement("previewstyle")  
        el.Text = "color:gray"  
        XML.DocumentElement.appendChild (el)
    End If
    v.XML = XML.XML
    v.Save
Next
'Cleanup  
Set XML = Nothing
Set objOL = Nothing
Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
tbw-01
tbw-01 Nov 24, 2015 at 13:56:41 (UTC)
Goto Top
Hallo Uwe,
wir haben auch das Problem, das wir 600 Usern erklären müssten, wie Sie die Farben ändern können.
Allerdings ist Deine letzte Lösung nicht auf alle Unterordner des Postfachs anzuwenden sondern auf die verschiedenen Ansichten
"Kompakt, Einzeln und Vorschau". Hättest Du auch eine Lösung für alle Ordner und Unterordner innerhalb des eigenen
Postfachs (so wie es Foertschy angefragt hatte)?

Gruß,
Olaf
colinardo
Solution colinardo Nov 24, 2015, updated at Jan 18, 2016 at 08:05:21 (UTC)
Goto Top
Hallo Olaf,
Zitat von @tbw-01:
wir haben auch das Problem, das wir 600 Usern erklären müssten, wie Sie die Farben ändern können.
Allerdings ist Deine letzte Lösung nicht auf alle Unterordner des Postfachs anzuwenden sondern auf die verschiedenen Ansichten
"Kompakt, Einzeln und Vorschau".
Genau diese Ansichten werden verändert, d.h. wenn diese in anderen Ordnern verwendet werden ist dort dann aber auch dort die Änderung ersichtlich.
Hättest Du auch eine Lösung für alle Ordner und Unterordner innerhalb des eigenen
Postfachs (so wie es Foertschy angefragt hatte)?
Wenn die User Ihre Ansichten nicht unter einem Namen speichern, hast du recht, dann kann jeder Ordner eine eigene Ansicht ohne Namen haben.
Dazu muss die Ordnerstruktur rekursiv durchlaufen werden und die aktuelle Ansicht jedes einzelnen Ordners geändert werden.
Dies kannst du mit folgendem Skript erreichen. Es nimmt den Default-Store von Outlook und durchläuft alle Ordner (nur die mit DefaultItemType = MailItem, also keine Kontakteordner etc. die die Einstellung nicht haben) rekursiv und ändert die Ansicht entsprechend.
On Error Resume Next
Const HKCU = &H80000001
Set objShell = CreateObject("Wscript.Shell")  
'Check if profile exists  
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")  
objReg.EnumKey HKCU, "Software\Microsoft\Office\15.0\Outlook\Profiles", arrSubKeys  
if IsNull(arrSubKeys) then wscript.Quit	'quit if no profile exists  

'Create additional objects  
Set objOL = CreateObject("Outlook.Application")  
Set XML = CreateObject("Msxml2.DOMDocument.6.0")  
xml.async = False

'Set Start folder to root of default store  
Set folderStart = objOL.Session.DefaultStore.GetRootFolder
'start parsing folderstructure  
parseFolder folderStart

'cleanup  
Set XML = Nothing
Set objOL = Nothing

'sub to parse folder structure recursive  
Sub parseFolder(fldr)
    If fldr.DefaultItemType = 0 Then
        Set v = fldr.CurrentView
        XML.LoadXML (v.XML)
        Set Node = XML.SelectSingleNode("/view/previewstyle")  
        If Not Node Is Nothing Then
            Node.Text = "color:gray"  
        Else
            Set el = XML.createElement("previewstyle")  
            el.Text = "color:gray"  
            XML.DocumentElement.appendChild (el)
        End If
        v.XML = XML.XML
        v.Save
    End If
    For Each subfolder In fldr.Folders
        parseFolder subfolder
    Next
End Sub
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate^^

Grüße Uwe
colinardo
colinardo Nov 24, 2015 updated at 14:44:20 (UTC)
Goto Top
@Foertschy "Danke" auch für NULL Rückmeldung ... face-sad
tbw-01
tbw-01 Nov 24, 2015 at 15:33:07 (UTC)
Goto Top
Hallo Uwe,
super Arbeit; klappt einwandfrei.
Kompliment unserer Abteilung. Ich schaue mal nach, was unsere Kuchenkasse noch übrig hat.
Wir wünschen Dir einen schönen Abend.

Gruß
Olaf