Montag, 20. Mai 2019

Adobe Reader DC hinterlässt falschen Fensterfokus nach dem Schließen

Bei Adobe Reader DC springt der Fensterfokus nicht wieder zum dahinterliegenden Programm/Dokument zurück, sobald man Reader beendet. Z. B. öffnet man ein Notepad-Fenster und anschließend ein PDF mit Adobe Reader DC, liegt das das PDF-Fenster direkt eine Ebene über dem Notepad. Schließt man Adobe Reader nun, sollte der Fensterfokus wieder zum Notepad zurückspringen und man sollte dort direkt weitertippen können, jedoch funktioniert das nicht. Es war für mich nicht auszumachen, wo der Fokus landet, auf jeden Fall nicht im Notepad.
Testet man dagegen dieses Vorgehen z. B. mit Excel statt Reader, funktioniert alles wie erwartet.

Nachdem ich im Netz nichts dazu finden konnte, habe ich eine Einstellung ausprobiert und diese war es am Ende auch, die mir die gewünschte Funktion zurückbrachte:

Im Adobe Reader DC (wir verwenden gerade 2019.012.20034) mit Strg + K in die Einstellungen > Sicherheit (erweitert) > Haken entfernen bei "In AppContainer ausführen". Die folgende Meldung wegklicken und Adobe Reader neustarten. Das hat hier das Problem behoben. 

Mehr zum AppContainer findet man bei Adobe hier und auch wie man die Einstellung unternehmensweit An, Aus und Sperren kann. Da AppContainer von Adobe als Sicherheitsfeature an den Mann gebracht wird, sei bitte der Leser gewarnt, dass er mit dem Deaktivieren des AppContainers vermutlich seinen Adobe Reader etwas anfälliger macht.


##############################
English short version:
There seems to be a problem regarding Adobe Reader DC (we ar using 2019.012.20034) which prevents the program in the focus-layer behind an open PDF to get the focus again after Reader is closed.

To test this try to close every other program and open only notepad. Then open a PDF with Adobe Reader DC. Reader is now in front of notepad and by closing Reader the focus should return to notepad. Without any clicking I should be able to type within notepad. But the focus is anywhere else but not on the notepad window.

I wasn't able to find anybody with the same problem on the net so I decided to try it by myself. Luckily the first option was the right one.

To resolve the problem go to Reader setting (Ctrl + K) and choose "Security (extended)" on the right side. Uncheck the AppContainer-checkbox and save your settings. Restart Adobe Reader and your problem should be solved.

Please find more information about "AppContainer" here and remember that this feature is here to make your reader safer and by disabling it your application could be more "vulnerable".

Montag, 18. März 2019

Windows 10 UAC Verzögerung (nVidia 3D-Vision)

Auf manchen Rechnern in meiner Firma fiel mir auf, dass die UAC, also das Aufforderungsfenster der Benutzerkontensteuerung bis zu 30 Sekunden brauchte, bis es erschien. Der Bildschirm war bis dahin nicht nutzbar, war also verschleiert. Auf anderen Rechnern dagegen erscheint die UAC-Meldung sofort. Ein bisschen Recherche brachte mich darauf, mit Sysinternals processmon auf die consent.exe zu gehen. Dabei fiel mir auf, dass auf dem betroffenen Rechner sehr viele Nvidia Hardwareeinträge geprüft wurden und teilweise nicht darauf zugegriffen werden durfte, was in einem Timeout endete.
Ein Entfernen der Nvidia 3D Vision Treiber und der Nvidia 3D Vision Controller Treiber führten für mich zum Erfolg. In Firmen dürfte man kaum darauf angewiesen sein, am heimischen PC könnte das allerdings unangenehm sein. Auffällig ist auch, dass das Problem nicht bei allen PCs mit besagten 3D-Vision-Treibern auftritt. Die aktuellen Quadro-Treiber-Installationen sind allerdings allesamt betroffen.
Eine Silent-Deinstallation konnte ich auf die Schnelle nicht ausmachen. Der offizielle Uninstall string lautet z. B. für 3D-Vision:
"C:\WINDOWS\SysWOW64\RunDll32.EXE" "C:\Program Files\NVIDIA Corporation\Installer2\InstallerCore\NVI2.DLL",UninstallPackage Display.3DVision
Anschließend wird allerdings ein Fenster gezeigt, in welchem man die Deinstallation bestätigen muss. Ein hausweites Entfernen ohne Userinteraktion ist mir aktuell also leider nicht bekannt.


##############################
English short version:
I noticed on some machines that UAC prompt (User Account Control) has a delay sometimes more than 30 seconds. Some research and analysing with the help of Sysinternals processmon targeting on the consent.exe showed up a lot of problematic read-actions on hardware components from nVidia. Finally I was able to solve the problem by removing nVidia 3D Vision/3D Vision Controller Driver from the PC and voila, UAC is running fast as normal. Not every machine with nVidia drivers installed was affected but the ones with nVidia Quadro drivers released in the last weeks.
I wasn't able to find out a adequat way to remove the 3D-Vision-parts silently. The official uninstall string:
"C:\WINDOWS\SysWOW64\RunDll32.EXE" "C:\Program Files\NVIDIA Corporation\Installer2\InstallerCore\NVI2.DLL",UninstallPackage Display.3DVision
shows a windows to confirm the removal.

Freitag, 5. Oktober 2018

Alle Onlinedienste von Adobe Reader DC deaktivieren (Disable all Adobe Reader DC onlineservices)

Um alle Online-Dienste von Adobe Reader zu deaktivieren, kann man das entweder über den Adobe Reader DC Customization Wizard machen, oder aber per Registry eintragen. Entweder man pflegt die Keys händisch ein oder führt eine *.reg-Datei mit folgendem Inhalt aus.
---
To disable all adobe reader DC online services you have the choice to use Reader DC Customization Wizard for a MSI installation or you can enter the regkeys manually. Alternatively you can run a *.reg-file with the following content:


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Adobe\Acrobat Reader\DC\FeatureLockDown]
"bAcroSuppressUpsell"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Adobe\Acrobat Reader\DC\FeatureLockDown\cCloud]
"bAdobeSendPluginToggle"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Adobe\Acrobat Reader\DC\FeatureLockDown\cServices]
"bToggleAdobeDocumentServices"=dword:00000001
"bToggleAdobeSign"=dword:00000001
"bTogglePrefsSync"=dword:00000001
"bToggleSendAndTrack"=dword:00000001
"bToggleWebConnectors"=dword:00000001
"bDisableSharePointFeatures"=dword:00000001

Die Reg-Datei kannst auch hier herunterladen, dafür benötigst man allerdings Admin-Rechte. Sollten Dienste deaktiviert werden, die du nicht deaktivieren wolltest, kannst du die Reg-Keys aus dem Eintrag hier auch einfach wieder löschen. Mehr Infos zu den Registry-Einträgen gibts auf der zugehörigen Adobe-Seite: https://www.adobe.com/devnet-docs/acrobatetk/tools/Wizard/WizardDC/online.html
---
You can download the Reg-File here, you'll need adminrights for do this. If you're running into problems with this keys, feel free to delete the keys obove.
Find more informations on the adobe site: https://www.adobe.com/devnet-docs/acrobatetk/tools/Wizard/WizardDC/online.html

Freitag, 17. November 2017

Pocket-Erweiterung in Firefox 57 deaktivieren (auch per Gruppenrichtlinie)

Firefox wird bereits seit längerem mit einer Art Erweiterung namens "Pocket" ausgeliefert. Seit Firefox 57 wird dies jedoch noch intensiviert und die "New-Tab"-Seite wird damit vollgepflastert. Wer Firefox im Unternehmen einsetzt, möchte sich dieser Erweiterung evtl. entledigen, hier gibt es die Anleitung, wie das geht.

Grundsätzlich

Wie kann man Pocket in Firefox überhaupt nutzen?
Wie kann ich Pocket in Firefox deaktivieren? (in dem Link gehts nur um das Symbol)

Pocket per Hand über about:config deaktivieren

Folgende Einstellungen in about:config vornehmen:

extensions.pocket.enabled > false
browser.toolbarbuttons.introduced.pocket-button > false
browser.library.activity-stream.enabled > false
browser.newtabpage.activity-stream.feeds.section.topstories > false
browser.newtabpage.activity-stream.feeds.section.highlights > false


Diese Einstellungen deaktivieren, soweit ich das gesehen habe, alle Pocketfunktionen innerhalb von Firefox, also sowohl die Symbole bei der Adressleiste, als auch die Highlights (aka Wichtigste Seiten) und Vorschläge auf der "New-Tab"-Seite.

Pocket via Gruppenrichtlinie und mozilla.cfg deaktivieren

Hier hatte ich bereits beschrieben, wie man grundsätzlich Einstellungen für den Firefox via GPO verteilen kann. Dieses Wissen ist sozusagen die Basis für das folgende Vorgehen.

In der zentralen mozilla.cfg trägt man zum Deaktivieren sämtlicher Pocketfunktionen folgende Zeilen ein:

// Pocket deaktivieren
lockPref("extensions.pocket.enabled", false);
lockPref("browser.toolbarbuttons.introduced.pocket-button", false);

// "New-Tab"-Seite definieren
lockPref("browser.library.activity-stream.enabled", false);
lockPref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
lockPref("browser.newtabpage.activity-stream.feeds.section.highlights", false);


Weitere Anpassungen

Man kann es aber noch etwas weiter treiben, das hier habe ich in ein paar Kommentarspalten zusammengetragen:

# Firefox-Logo auf New-Tab-Seite oben links deaktivieren
browser.onboarding.enabled : false

# Anzahl an Top-Sites auf der New-Tab-Seite
browser.newtabpage.activity-stream.topSitesCount : 18

# Anzahl der Reihen auf der New-Tab-Seite
browser.newtabpage.rows : 3

# New-Tab-Seite im Old-School-Look darstellen
browser.tabs.insertRelatedAfterCurrent : true

# Firefox nicht beenden, wenn letzter Tab geschlossen wird
browser.tabs.closeWindowWithLastTab
 

# Immer die volle URL anzeigen
browser.urlbar.trimURLs

Firefox Einstellungen per Gruppenrichtline steuern

Kurzes Vorwort:

Hier eine kurze Übersicht, wie ich in unserem Unternehmen den Firefox per GPO steuer. Eine ADMX-Datei gibt es vielleicht irgendwo, aber die haben oft das Problem, nicht aktuell genug zu sein. Deswegen steuer ich das Ganze über eine CFG-Datei, welche ich im Programmverzeichnis von Firefox platziere. Diese definiert die Einstellungen in Form der Parameter, die man unter about:config auch hinterlegen kann und legt auch fest, ob diese Richtlinie nun erzwungen wird, oder ob sie vom Benutzer verändert werden darf. Bestes Beispiel: als Admin möchte man das Auto-Update ggf. deaktivieren, da man Firefox selbst verteilen möchte.

Meine Informationen zu diesem Thema habe ich über andere Blogs und Internetseiten zusammengetragen. Sehr aufschlussreich dabei war diese Seite von Mozilla selbst: https://developer.mozilla.org/de/Firefox/Nutzung_in_Unternehmen

Die folgenden Konfigurationsschritte beschreiben eine Installation von Firefox x64 auf einem 64 Bit System. Wer die x86 Version auf einem 64 Bit System verwendet, muss statt "C:\Program Files" eben "C:\Program Files (x86)" verwenden. Für die Bearbeitung der Textdateien empfehle ich Notepad++.

Aktivierung der Konfiguration über eine CFG-Datei:

Um eine "Remotekonfiguration" von Firefox über die Konfig-Datei zu aktivieren, muss zunächst eine "autoconfig.js" im Ordner "C:\Program Files\Mozilla Firefox\defaults\pref" abgelegt werden. Diese sieht bei mir wie folgt aus:

pref("general.config.filename", "mozilla.cfg");
pref("general.config.obscure_value", 0);


Der hier in der ersten Zeile angegebene Dateiname muss später auch verwendet werden, darf laut Mozilla aber auch abweichen. Standard ist aber mozilla.cfg.

Konfiguration festlegen mithilfe der "mozilla.cfg"

Die Einstellungen selbst definieren wir in der mozilla.cfg, welche im Root-Installationsordner von Firefox liegt, also "C:\Program Files\Mozilla Firefox". Hier ein Beispiel, wie der Inhalt dieser Datei aussehen könnte. Hinweis: Zeilen mit // am Anfang kommentieren den Inhalt aus und dienen hier der Dokumentation. Jede Zeile muss mit Semikolon abgeschlossen werden!


// Deaktiviert den Updater
lockPref("app.update.enabled", false);
lockPref("app.update.auto", false);
lockPref("app.update.mode", 0);
lockPref("app.update.service.enabled", false);
lockPref("app.update.autoUpdateEnabled", false);


Wer also das Auto-Update definitiv deaktivieren möchte, der solte diese Einstellungen setzen. Nach einem Neustart wird im Fenster "Über Mozilla Firefox" anstelle der normalen Updateanzeige der Text "Updates von Ihrem System-Administrator deaktiviert" angezeigt (kann je nach Firefox-Version abweichen).




Erklärung zum Pref-Präfix seitens Mozilla:
pref
nimmt eine Einstellung vor, als hätte der Benutzer sie eingestellt, jedes Mal wenn der Browser gestartet wird. Nutzer können zwar Änderungen an den Einstellungen vornehmen, jedoch werden diese beim nächsten Start überschrieben. Wenn Sie auf diese Weise Einstellungen vornehmen, wird die Einstellung in about:config als "vom Benutzer eingestellt" angezeigt.

defaultPref
wird gebraucht um die Standardeinstellung zu ändern, jedoch kann jeder Nutzer die Einstellungen ändern. Die Einstellungen werden zwischen Sitzungen gespeichert. Sollten alle Werte auf ihren Ursprung zurückgesetzt werden, werden die so geänderten Einstellungen auf den von Ihnen gesetzten Wert geändert. Taucht in about:config als "standard" auf.

lockPref
wird genutzt um Einstellungen zu blockieren, sodass sie nicht mehr vom Nutzer umgestellt werden können, weder über die Einstellungen, noch über about:config. Das Fenster mit den Einstellungen wird sich ändern um dies zu reflektieren, indem es nicht verstellbare Optionen weglässt oder grau färbt.Taucht in about:config auf als "blockiert". Manche Einstellungen benötigen lockPref um geändert zu werden, wie beispielsweise app.update.enabled. Es funktioniert nicht, wenn es nur mit pref geändert wird.

clearPref
kann benutzt werden um einige Einstellungen auszublenden. Dies kann nützlich sein, um einige Funktionen zu deaktivieren, die darauf basieren Versionsnummern zu vergleichen.

Also: pref nimmt man eher selten, der User könnte zwar etwas ändern, aber beim nächsten Browserstart wäre die Einstellung wieder hinfällig. Deswegen verwende ich meist lockPref, damit wird dem User gleich die Möglichkeit zum Ändern genommen. defaultPref eignet sich z. B. gut für Dinge wie die Standard-Startseite, die man zwar vorgeben kann, aber der User kann sie ändern, wenn er möchte.

Verteilen per GPO

Um die Dateien nun noch an ihren richtigen Platz zu kopieren und dort auch immer wieder anwenden zu lassen, kopiere ich die Dateien zum einen über das Installationskript vom Server in ihre Verzeichnisse. Ich habe zudem in meiner Installations-GPO noch festgelegt, dass die Dateien per GPO ebenfalls kopiert werden, das geht unter "Computerkonfiguration > Einstellungen > Windows-Einstellungen > Dateien". Die Kopieraktion binde ich an den "Zielgruppenadressierungseditor" (Zielgruppenadressierung auf Elementebene) und gebe als Bedinung das Vorhandensein des Ordners von Mozillla Firefox an oder von der firefox.exe. Die autoconfig.js kopiere ich mit der Aktion "Aktualisieren" und die mozilla.cfg mit der Aktion "Ersetzen". So ist sichergestellt, dass bei jedem GPO Polling die Datei wieder in dem Zustand ist, in welchem ich sie gerne hätte. Wünscht man verschiedene Konfigratuionen für verschiedene AD-Gruppen oder OUs bzw. Abteilung, kann man das natürlich noch beliebig variieren.



Eigene Einstellungen erzwingen

Möchte man nun noch andere Einstellungen verteilen, empfiehlt es sich, die korrekten Einstellungen in about:config herauszufinden und dann in die zentrale mozilla.cfg einzupflegen, die man regelmäßig auf die Clients kopiert. Beim nächsten GPO Poll ist die Einstellung dann am Client hinterlegt. Google hilft im Zweifelsfall dabei, die richtige Einstellung aus einem Menü auch in about:config zuzuordnen.

Hier geht es zu einem weiteren Beitrag, bei dem es darum geht, sämtliche Pocket-Funktionen aus Firefox 57 (und höher) zu entfernen.

Donnerstag, 17. August 2017

Mozilla Firefox - Installation, Migration und Update über Batch-Skript (x86 auf x64 und x64 auf x86)

Ich weiß, es gibt noch einige wenige tapfere Admins da draußen, die sich keine große Verteilungssoftware leisten können oder wollen und Software-Installationen und Updates per GPO verteilen. Windows macht es einem mit MSI-Paketen da sehr einfach. Möchte man EXE-Setups per GPO verteilen bleibt einem jedoch nur das Schreiben eines Skripts und das anschließende Einbinden in die Computerrichtlinie des Computerstartups.

Hier findet ihr ein Skript welches ich bereits länger zur Installation von Firefox verwende und nun erweitert habe, um auch eine Art "Migration" durchzuführen, ob man jetzt von einer x86-Installation von Firefox auf die x64 wechseln möchte (was wohl meistens der Fall sein dürfte) oder eben umgekehrt. Das Skript ist in Deutsch kommentiert, ich geh in diesem Artikel auf die einzelnen Punkte ein, falls jemand Bedarf hat, das Skript auch zu verstehen und nicht nur einzusetzen.


Was macht dieses Skript alles?
Es installiert sowohl die x86 als auch die x64-Variante des Browser ohne Userinteraktion (silent) und schafft es dabei auch, von einer Version zur anderen zu migrieren, ohne dass man am Ende beide Versionen installiert hat. Userdaten bleiben dabei bestehen, Altlasten werden deinstalliert und entfernt. Zudem werden alle nötigen Dateien erzeugt/kopiert, die nötig sind, um Firefox mit vordefinierten Einstellungen zu versorgen (das was man für Windows und Office mit Gruppenrichtlinien macht). Da wir Admin sind und unsere User in der Regel nicht, wollen wir selbst die Updates auslösen, das Skript unterbindet an mehreren Stellen das Auto-Update und entfernt den sog. Maintenance Service.

Was kann das Skript (noch?) nicht?
Das Skript deckt aktuell meine eigenen Bedürfnisse ab, jedoch gibt es natürlich mehrere Szenarien, die es in anderen Umgebungen abzufangen gilt. Geplant ist z. B. bei Fehlen der der helper.exe (wird zwingend benötigt um Firefox zu deinstallieren) einen Versuch über WMIC zu starten. Auch habe ich geplant einen Switch für das Erzwingen der Deinstallation einzubauen, damit bei jedem Update vorher deinstalliert wird. Ggf. könnte man ebenfalls noch einen Schalter einbauen, der zu setzen ist, wenn man auch die Userdaten zurückgesetzt haben möchte, aber so etwas kann auch schnell nach hinten losgehen und dann ist das Geschrei groß ;-)

Wofür ist das Skript gedacht?
Das Skript richtet sich in erster Linie an Admins, die per GPO-Startup-Skript Firefox auf Clients installieren möchten und dabei auch gewisse Konfigurationen im Voraus vornehmen möchten. Das Skript läuft dann als Startup-Skript, also das was der Computer macht, wenn er dem Benutzer anzeigt "Bitte warten", bevor dieser sich an Windows anmelden kann. Es ist keine Usereingabe nötig.


Hier der Stand meines Skripts vom 17.08.2017

:: Installationsskript für Mozilla Firefox CV (Current Version) als EXE
:: Inkl. Migration von FFx86 > FFx64 oder FFx64 > FFx86
:: Inkl. Migration von FF-MSI-Installation > FF-EXE-Installation
:: Firefox EXE-Download: https://www.mozilla.org/de/firefox/all/?q=German
:: (C) by Snaker @ https://snakerl.blogspot.de/


:: ============================================================================
:: Definiere Variablen (müssen/dürfen an eigene Umgebung angepasst werden)
:: ============================================================================

:: Pfad für Installationsdatei (Clients brauchen Leserechte)
set FirefoxDir=\\deinserver.dom.local\share$\firefox

:: Dateiname des Firefox-Setups
set SetupFF=FirefoxSetup_x64.exe

:: Definiere ob die Setup.exe Firefox x86 oder Firefox x64 beinhaltet
set SetupEnv=x64


:: ============================================================================
:: Definiere statische Variablen (sollten nicht geändert/umbenannt werden)
:: ============================================================================

:: Textdatei welche die aktuelle Firefox-Version beinhaltet
set CurVer=CurrentVersion.txt

:: Ini-Datei welche man als Antwortdatei für das Firefox-Setup hinterlegt
:: Ini MUSS vorhanden sein, wenn keine Parameter gewünscht, dann Inhalt auskommentieren
set INI=firefoxinstall.ini

:: Die Datei autoconfig.js legt fest, welche Konfigdatei für die FF-Benutzereinstellungen verwendet werden sollen
set ACJS=autoconfig.js

:: Die Datei mozilla.cfg behinhaltet die FF-Benutzereinstellungen
set CFG=mozilla.cfg


:: ============================================================================
:: Beginne Prüfroutine
:: ============================================================================

:: Prüfe ob Netzwerkverbindung erreichbar ist, wenn nicht, breche ab
if not exist "%FirefoxDir%" goto Ausgang

:: Wenn Setup x64 ist und Firefox.exe x86 beende das Skript
if %SetupEnv%==x64 if %PROCESSOR_ARCHITECTURE%==x86 goto Ausgang

:: Lese aktuelle Version aus TXT
for /f "usebackq delims=" %%i in (%FirefoxDir%\%CurVer%) do @set "CurrentfirefoxVersion=%%i"

:: Definiere Variable ProgFiles
if %SetupEnv%==x86 set ProgFiles=%ProgramFiles(x86)%
if %SetupEnv%==x64 set ProgFiles=%ProgramFiles%

:: Manchmal gibt es bei einer Migration Überreste (Mozilla Ordner, CurrentVersion.txt) die man evtl. bereinigen muss
if not exist "%ProgramFiles(x86)%\Mozilla Firefox\firefox.exe" if exist "%ProgramFiles(x86)%\Mozilla Firefox\%CurVer%" del /F /Q /S "%ProgramFiles(x86)%\Mozilla Firefox\%CurVer%"
if not exist "%ProgramFiles%\Mozilla Firefox\firefox.exe" if exist "%ProgramFiles%\Mozilla Firefox\%CurVer%" del /F /Q /S "%ProgramFiles%\Mozilla Firefox\%CurVer%"

:: Prüfe ob Programmordner vorhanden ist: wenn ja, lese Versionsdatei aus, wenn nicht, installiere
if not exist "%ProgFiles%\Mozilla Firefox" (
    goto Uninstall) else (
    for /f "usebackq delims=" %%i in ("%ProgFiles%\Mozilla Firefox\%CurVer%") do @set "InstalledfirefoxVersion=%%i"
    )

:: Vergleiche verfügbare mit installierter Version, wenn beide gleich, dann beende Skript
if "%InstalledfirefoxVersion%"=="%CurrentfirefoxVersion%" goto Ausgang


:: ==============================================================
:: Versuche System von alten Installationen zu bereinigen
:: ==============================================================

:Uninstall

:: Aktiv laufendes Programm beenden
:: TASKKILL /IM firefox.exe /F

:: MSI-Uninstall
:: Wird nur benötigt, falls Firefox mal per MSI installiert wurde (Userdaten bleiben bestehen)
:: WMIC /interactive:off product where "name like '%%Firefox%%'" call uninstall /nointeractive

:: EXE-Uninstall
:: Wenn %SetupEnv%=x86 dann deinstalliere Firefox x64 bzw. bei x64 deinstalliere Firefox x86 (Userdaten bleiben bestehen)
if %SetupEnv%==x86 if exist "%ProgramFiles%\Mozilla Firefox\uninstall\helper.exe" "%ProgramFiles%\Mozilla Firefox\uninstall\helper.exe" -ms
if %SetupEnv%==x86 if exist "%ProgramFiles%\Mozilla Firefox" Timeout 10
if %SetupEnv%==x86 if exist "%ProgramFiles%\Mozilla Firefox" rd /S /Q "%ProgramFiles%\Mozilla Firefox"

if %SetupEnv%==x64 if exist "%ProgramFiles(x86)%\Mozilla Firefox\uninstall\helper.exe" "%ProgramFiles(x86)%\Mozilla Firefox\uninstall\helper.exe" -ms
if %SetupEnv%==x64 if exist "%ProgramFiles(x86)%\Mozilla Firefox" Timeout 10
if %SetupEnv%==x64 if exist "%ProgramFiles(x86)%\Mozilla Firefox" rd /S /Q "%ProgramFiles(x86)%\Mozilla Firefox"

:: Updatedienst "Maintenance Service" in bestehender Firefox-Installation deinstallieren falls vorhanden
If exist "%ProgFiles%\Mozilla Maintenance Service\Uninstall.exe" "%ProgFiles%\Mozilla Maintenance Service\Uninstall.exe" /S
Timeout 2


:: ==============================================================
:: Installieren
:: ==============================================================

:: Silent Installation des Setups
:Install
"%FirefoxDir%\%SetupFF%" /INI="%FirefoxDir%\%INI%"
if errorlevel 0 if exist "%ProgFiles%\Mozilla Firefox" copy /Y "%FirefoxDir%\%CurVer%" "%ProgFiles%\Mozilla Firefox\%CurVer%"

:: Konfiguration verteilen
if exist "%ProgFiles%\Mozilla Firefox" copy /Y "%FirefoxDir%\%CFG%" "%ProgFiles%\Mozilla Firefox\%CFG%"
if exist "%ProgFiles%\Mozilla Firefox\defaults\pref" copy /Y "%FirefoxDir%\%ACJS%" "%ProgFiles%\Mozilla Firefox\defaults\pref\%ACJS%"

:: Sofern der Updaterdienst "Maintenance Service" mit installiert wurde, wieder entfernen
If exist "%ProgramFiles(x86)%\Mozilla Maintenance Service\Uninstall.exe" "%ProgramFiles(x86)%\Mozilla Maintenance Service\Uninstall.exe" /S
If exist "%ProgramFiles%\Mozilla Maintenance Service\Uninstall.exe" "%ProgramFiles%\Mozilla Maintenance Service\Uninstall.exe" /S

:Ausgang
exit



Ich habe eine ZIP bereitgestellt, die alle Konfigurationsdateien enthält. Die Datei kann hier heruntergeladen werden:

DOWNLOAD

 Der Link führt zu einer Google-Drive Seite, dort befindet sich die ZIP-Datei.

In dieser ZIP findet man Folgendes:
  • Ein Ordner namens "Verknüpfungen zu den Konfigdateien"
  • autoconfig.js > verweist auf eine mozilla.cfg
  • CurrentVersion.txt > Wichtig, das ist ein wichtiger Teil dieses Automatismuses. Hier muss die aktuell verteilte Version von Firefox händisch gepflegt werden. Es reicht (leider) nicht, nur die Setup.exe auszutauschen, sondern es muss auch diese Text-Datei angepasst werden. In der Praxis hat sich das bei mir in der Firma bewährt.
  • firefoxinstall.ini > wird als Antwortdatei für die Setup.exe von Firefox verwendet, ich habe darin nur eingestellt, dass der Maintenance-Dienst nicht mit installiert wird
  • InstallFirefox-x64.bat > das eigentliche Skript, welches ich aber auch hier oben in Klartext bereitgestellt habe
  • mozilla.cfg > hier werden die Einstellungen definiert, mit denen Firefox später starten soll, z. B. das Deaktivieren des autom. Updates. Die Einstellungen können erzwungen werden oder man überlässt dem User, ob er sie später selbst ändert. Mozilla erklärt den Inhalt seiner Konfigdatei hier. Diese Datei sollte jeder für sich durchlesen um zu entscheiden, ob er sie so verteilen möchte oder ggf. Einstellungen entfernen bzw. eigene hinzufügen möchte. 
 Das Skript kopiert die autoconfig.js und die mozilla.cfg automatisch an ihren Ort, man kann in der GPO ein zusätzliches Kopieren hinterlegen, um sicherzugehen, dass die Einstellungen auch wirklich greifen.

Ich erkläre kurz die Bereiche in der Batch, für diejenigen, die das interessiert:

"Definiere Variablen"
Hier könnt ihr als Admins euren Servershare hinterlegen, den Namen der Setup.exe und ob euer Firefox in x64 oder x86 installiert werden soll.

"Definiere statische Variablen"
Hier werden die Namen der Dateien definiert, nicht ändern!

"Beginne Prüfroutine"
 Das Skript überprüft ob bereits Firefox installiert ist, ob es die Version auslesen kann (anhand der CurrentVersion.txt, siehe oben). Sollte das Skript x64-Firefox installieren wollen, das System ist aber x86 wird abgebrochen. Wenn festgestellt wird, dass die aktuelle Firefoxversion bereits installiert ist, wird Skript ebenfalls beendet.

"Versuche System von alten Installationen zu bereinigen"
Sofern x64 installiert wird, wird geschaut, ob x86 installiert ist und dann deinstalliert und andersherum, denn wir wollen ja eine saubere Migration und nur eine Version auf dem Rechner.

"Installieren"
Unbeaufsichtigte Installation findet statt, die Konfigurationsdateien werden in ihre Ordner kopiert und am Ende wird geschaut, ob der Maintenance-Dienst auch wirklich nicht mit ins System gekommen ist, wenn doch wird er deinstalliert.


Zu guter Letzt: Was brauche ich damit das Skript als GPO im Unternehmen läuft?
Einen Testclient der einer AD-Gruppe zugeordnet ist, nennen wir die Gruppe "FirefoxTest-Installation". Im AD suchen wir die OU, in der sich der Testclient befindet und erstellenund verknüpfen gleichzeitig eine neue GPO, Namen eindeutig vergeben: Firefox-Testinstallation. GPO anklicken und im Tab Bereich unten bei der Sicherheitsfilterung die Authentifizierten Benutzer rausschmeißen, über hinzufügen unsere FirefoxTest-Installation-AD-Gruppe einfügen. Im Tab "Delegierung" rechts unten auf Erweitert > Authentifizierte Benutzer hinzufgen mit Lese-Rechten und mit OK abschließen.
Nun die GPO bearbeiten: Computerkonfiguration > Richtlinien > Windows-Einstellungen > Skripts > Starten > Doppeklick. Hier im Fenster auf "Dateien anzeigen". In das nun erscheinende Explorer-Fenster kopiert hier eure Batch-Datei rein und macht den Explrer zu. Im Fenster "Eigenschaften von Starten" wählt ihr Hinzufügen und wählt das nun dort erscheinende Skript aus und bestätigt alle Fenster mit OK.
Wer möchte, der kann auch noch unter "Computerkonfiguration> Einstellungen > Dateien" die Dateien autoconfig.js nach C:\Program Files\Mozilla Firefox\defaults\pref\ und die mozilla.cfg nach C:\Program Files\Mozilla Firefox\ (bzw. ProgramFiles(x86) bei der 32bit Installation von Firefox) kopieren lassen. Da empfehle ich noch die Zielgruppenadressierung auf Elementenebene: Dateiübereinstimmung, die Dateien also erst kopieren, wenn die Ordner dafür auch bestehen.

Ich hoffe das hilft dem Einen oder Anderen.

Beste Grüße

Snaker

Mittwoch, 25. Mai 2016

Verteilen von Microsoft Office 2016 MAK über Gruppenrichtlinien

Bevor es losgeht

Nicht jeder hat eine professionelle Softwareverteilung im Einsatz, manche müssen sich noch auf altem Wege behelfen und Software über Gruppenrichtlinien verteilen. Auch wenn ich schon lange nichts mehr gepostet habe, habe ich mir doch gedacht, dass ich das Stück Arbeit und meine Erkenntnisse doch mal wieder teilen könnte. Was ich so gesehen habe, gibt es noch nicht allzuviele Dokumentationen, die sich mit dem Thema befassen, Office 2016 per GPO-Script zu installieren.

Dabei gibt es doch einige Stolpersteine, die man erkennen muss, damit Office korrekt installiert. Um diese Stolpersteine für mich auszumachen, musste ich einige Testläufe durchgehen. Hier nun das Ergebnis. Sammeln wir ersteinmal eine Bestandliste, was haben wir und was brauchen wir?



Was natürlich ebenfalls vorhanden sein muss, ist eine Windows-Domäne, in der die erfolgreich Gruppenrichtlinien verarbeitet werden und eine Netzwerkfreigabe, in der das Setup abgelegt wird und somit vom Computerkonto erreichbar sein muss. Ein paar Fähigkeiten im Schreiben oder wenigstens im Verstehen von Batch-Scripten wäre hilfreich um ggf. Anpassungen vorzunehmen.



Setup vorbereiten

Wir legen das 32-Bit-Setup für Office 2016 in unserem Share ab, z. B.
\\Server\Share$\Office2016\32bit

Darin enthalten  sein sollte die "Setup.exe", viele Ordner die im deutschen z. B. "outlook.de-de" und "word.de-de" heißen und zudem ein anderer wichtiger Ordner namens "admin".

Anschließend entpacken wir die x86-EXE vom OCT (s. oben) in einen temporären Ordner. Darin enthalten sind die aktuellsten ADMX-Dateien (meine haben das Bearbeitungsdatum 12.05.2016, also wirklich relativ aktuell), die man auf dem DC platzieren kann, um später in den GPOs Office 2016 zu konfigurieren. Zudem befindest sich wieder ein Ordner namens "admin" darin.
Diesen Ordner "admin" kopieren wir und ersetzen den Ordner \\Server\Share$\Office2016\32bit\admin und dessen Inhalte".


Somit haben wir die neueste Version des Office-Anpassungstools (OCT) hinterlegt.
Dieses rufen wir nun auch auf, um eine .MSP-Datei zu erzeugen, die die jeweiligen Einstellungen, Keys usw. im Setup mit einpflegt. Das geht so:

Wir starten ein CMD mit erweiterten Adminrechten. Im Explorerfenster unter \\Server\Share$\Office2016\32bit klicken wir "Shift + Rechte Maustaste" auf die "Setup.exe" und wählen im Kontextmenü "als Pfad kopieren" und fügen diesen in der Admin-CMD ein. Wir erweitern den Pfad um den Schalter "/admin", so dass es in der CMD in etwa so aussieht:

"\\Server\Share$\Office2016\32bit\setup.exe" /admin
 Mit Enter Bestätigen und es sollte das OCT aufgehen und man kann eine neue "Setupanpassungsdatei" erstellen.


Die meisten Seiten sind selbsterklärend. Ich gehe die wichtigen Optionenim Schnelldurchgang durch:
  • Standarddateitypen > Würde ich auf Office Open XML-Formate stellen, dieses Setting kann man im Nachhinein nicht per GPO verteilen/ändern, soweit ich das weiß, d. h. jeder User würde beim ersten Start gefragt werden, was er da möchte
  • Name der Organisation und Programmpfade erklären sich von selbst.
  • Nächste interessante Seite ist die Lizenzierung. Hier geben wir unseren MAK ein, stimmen den Lizenzbedingungen zu und stellen die Anzeigeebene auf "Keine".
  • Frühere Installationen entfernen  > das will man als Admin in der Regel eigentlich. Im Netz habe ich gelesen, man sollte hier nicht das "Standardinstallationsverhalten" auswählen, sondern manuell jedes Programm einzeln auf Entfernen setzen. Ich warne hier bereits vor, dass jedoch auch diese Routine nicht sehr zuverlässig arbeitet!
  • In den Setup-Eigenschaften fügen wir folgende Werte hinzu "HIDEUPDATEUI" mit dem Wert "True" und "SETUP_REBOOT" mit dem Wert "NEVER". Wir steuern den Reboot später selber
  • Den Rest könnt Ihr machen wie ihr wollt, speichert nach Abschluss die MSP im Hauptverzeichnis der Installation unter dem Namen "setup32bit.MSP", also da wo auch die Setup.exe liegt ab.




Hinweis, wer später die Antwortdatei ändern möchte, kann das Setup wieder mit "/admin" starten und danach einfach die vorhandene MSP-Datei auswählen und die Einstellungen verändern.

Damit könnten wir theoretisch schon das Setup "silent" durchlaufen lassen, d. h. ohne Userinteraktion. Leider gibt es wie erwähnt Stolperstellen:
  • Früher konnte man mit der MSP auch die Aktivierung der Office Installation durchführen. Das klappt in Office 2016 leider nicht mehr. Viele andere Wege führen aber zum selben Ergebnis, ich habe mich nach mehreren Fehlversuchen dazu entschieden, es manuell im Installationsscript zu starten. Das funktioniert garantiert und zwar durch den Aufruf der Datei "OSPP.VBS", die Microsoft von Hause aus mit ausliefert. In der Theorie sollte man dieses Script auch innerhalb der MSP aufrufen können, hat aber bei mir ebenfalls nicht funktionieren wollen. Deswegen der händische Aufruf und den kann ich nur jedem ans Herz legen!
  • Die Deinstallation alter Office-Versionen hat in meinen Tests nicht zuverlässig geklappt, manchmal blieben Dateileichen übrig, ich wollte aber eine saubere Bereinigung, ohne dabei die Einstellungen der User zu verlieren

Deinstallation alter Versionen vorbereiten

Bei mir ist der interne Entfernungsautomatismus für alte Office-Versionen einige Male auf die Nase gefallen, deswegen habe ich ihn manuell im Script angestoßen. Dafür gibt es, wie oben bereits angesprochen diese Seite von Microsoft:
https://support.office.com/en-us/article/Uninstall-Office-2016-Office-2013-or-Office-365-from-a-PC-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=en-US&rs=en-US&ad=US&fromAR=1

Dazu muss man aber abschätzen können: von welchem Betriebssystem möchte ich welche Version von Office deinstallieren. Je nachdem unterscheiden sich die Scripte. Bei uns gab es im Haus bislang nur die Office 2010 Home and Business Versionen (ein Key pro Computer), sowie die Home and Business von Office 2013, welche sich aber extrem von ihrem Vorgänger unterscheidet.

Ab 2013 liefen diese Installationen nämlich als sog. "Click-to-Run"-Setups. Man hatte als Admin keine Möglichkeit die Updates für diese Versionen zu steuern, das machte das System im Hintergrund automatisch per "Stream". Für kleine Unternehmen ganz toll, für mich als Admin nicht. Das war einer von vielen Gründen zu den teueren Volumenlizenzen zu welchseln.

Diese beiden Versionen muss ich nun also bei meiner Deinstallationsroutine beachten. Für Office 2010 kann man die Deinstallationsroutine hier beziehen bzw. hier der Direktlink: http://go.microsoft.com/?linkid=9824112. Für Office 2013 bitte das "Easy fix tool" beziehen, sollte auch direkt hier gehen: http://aka.ms/diag_officeuninstall. In beiden Fällen sollte dabei eine sog. .Diagcab herauskommen. Diese Diagcab kann man entweder doppelklicken oder mit einem Zip-Programm entpacken. Dann sieht man auch, dass das eigentlich eine Art Scriptsammlung ist, die man wiederum hervorragend in einem Installations/Deinstallationsscript einbinden kann.


Wir erzeugen im Hauptordner mit der Setup.exe einen neuen Ordner namens "remove-auto" und packen den Inhalt dort hinein. Für Office 2013 in der Click-to-run-Ausführung ist das das Script "OffScrubc2r.vbs" zuständig, für die "normale" MSI-Installation ist es "OffScrub_O15msi.vbs".

Welche Version ihr habt, seht ihr daran, dass Click-to-run z. B. seine EXE-Dateien unter "C:\Program Files\Microsoft Office 15\root\office15\" (bzw. im Program Files (x86)) liegen hat, während eine normale Installation den Pfad "C:\Program Files\Microsoft Office\Office15\" (bzw. Program Files (x86)) nutzt.


Wer Office 2010 auch entfernen will, sollte sich im Ordner "remove-auto" einen Unterordner erzeugen, bei mir heißt er einfach "2010". Dort kommen die Scripte aus der entzippten Diagcab von 2010 (s. Link oben) rein. Das verwendete Script lautet hier "OffScrub10.vbs". Dieses Script auf dem PC nach ggf. vorhandenen Verknüpfungen zum alten Office 2010 zu suchen und diese zu entfernen. Das dauert aber ewig und ich habe deswegen folgende Zeilen entfernt:
Zeile 1571 (If NOT fSkipSD Then) bis inkl.
Zeile 1615 (Err.Clear).  Ihr findet das überarbeitete Script im Download unter "remove-auto".


Verteilung über das Installationsscript (Erklärung)

Das Script seht ihr hier, ihr könnt es natürlich auch downloaden. Kopiert es in eine leere Text-Datei, speichert diese als "InstallOffice2016silent.bat" ab und öffnet sie am besten mit Notepad++, damit ihr eine Syntax-Hilfe habt. Ich gehe die Punkte Schritt für Schritt durch und halte mich an die Zeilennummerierung.

1:  :: Installationsscript für Microsoft Office 2016 32Bit inkl. Aktivierung  
2:  :: (C) by Snakerl (https://snakerl.blogspot.com)  
3:    
4:  :: ==============================================================  
5:  :: Folgende Variablen müssen in der Regel NICHT verändert werden  
6:  :: ==============================================================  
7:  :: Pfad zum Setup  
8:  set OfficeDir=\\Server\Share$\Office2016\32bit  
9:    
10:  :: Setup für x86 oder x64 (entscheidet auch, welches Programmverzeichnis verwendet wird)  
11:  set SetupEnv=x86  
12:    
13:  :: ==============================================================  
14:  :: Beginne Prüfroutine  
15:  :: ==============================================================  
16:    
17:  :: Prüfe ob Netzwerkverbindung erreichbar ist, wenn nicht, breche ab  
18:  if not exist "%OfficeDir%" goto Ausgang  
19:    
20:  :: Wenn Setup x64 ist, soll es auf Nicht-64bit-Rechnern nicht angestoßen werden  
21:  if %SetupEnv%==x64 if %PROCESSOR_ARCHITECTURE%==x86 goto Ausgang  
22:    
23:  :: Finde heraus, welches Verzeichnis relevant ist ("Programme" oder "Programme (x86)")  
24:  if %PROCESSOR_ARCHITECTURE%==x86 if %SetupEnv%==x86 (set "ProgFiles=%ProgramFiles%")  
25:  if %PROCESSOR_ARCHITECTURE% NEQ x86 if %SetupEnv%==x86 (set "ProgFiles=%ProgramFiles(x86)%")  
26:  if %PROCESSOR_ARCHITECTURE% NEQ x86 if %SetupEnv%==x64 (set "ProgFiles=%ProgramFiles%")  
27:    
28:  :: Skippe das Script, sofern bereits Office aktiviert ist  
29:  if exist "%ProgFiles%\Microsoft Office\Office16\Lizenzstatus.txt" goto Ausgang  
30:    
31:  :: Prüfe ob Microsoft Office 2016 bereits installiert ist (Word, Excel, Powerpoint ODER Outlook)  
32:  :Precheck  
33:  if exist "%ProgFiles%\Microsoft Office\Office16\WINWORD.EXE" goto Aktivierung  
34:  if exist "%ProgFiles%\Microsoft Office\Office16\EXCEL.EXE" goto Aktivierung  
35:  if exist "%ProgFiles%\Microsoft Office\Office16\POWERPNT.EXE" goto Aktivierung  
36:  if exist "%ProgFiles%\Microsoft Office\Office16\OUTLOOK.EXE" goto Aktivierung  
37:    
38:  :: Entferne Office 2013 Click-to-run silent  
39:  if exist "%ProgramFiles%\Microsoft Office 15\root\office15\WINWORD.EXE" ("%SystemRoot%\System32\cscript.exe" "%OfficeDir%\remove-auto\OffScrubc2r.vbs" ALL)  
40:  if exist "%ProgramFiles(x86)%\Microsoft Office 15\root\office15\WINWORD.EXE" ("%SystemRoot%\System32\cscript.exe" "%OfficeDir%\remove-auto\OffScrubc2r.vbs" ALL)  
41:    
42:  :: Entferne Office 2010 MSI silent  
43:  if exist "%ProgFiles%\Microsoft Office\Office14" ("%SystemRoot%\System32\cscript.exe" "%OfficeDir%\remove-auto\2010\OffScrub10.vbs" ALL)  
44:    
45:  :Install  
46:  "%OfficeDir%\setup.exe" /adminfile "%OfficeDir%\setup32bit.MSP"  
47:  Timeout 5  
48:  shutdown /r /t 10 /c "Neustart zum Abschluss der Installation von Microsoft Office 2016 (32 Bit)" /d P:4:2  
49:  timeout 60  
50:    
51:  :Aktivierung  
52:  :: Prüfen ob Aktivierungs-Datei vorhanden ist  
53:  if exist "%ProgFiles%\Microsoft Office\Office16\Lizenzstatus.txt" goto Ausgang  
54:  if not exist "%ProgFiles%\Microsoft Office\Office16" goto Ausgang  
55:    
56:  :: Aktivierung über VBS  
57:  "%SystemRoot%\System32\cscript.exe" "%ProgFiles%\Microsoft Office\Office16\OSPP.VBS" /ACT  
58:  timeout 5  
59:    
60:  :: Lese Lizenzstatus aus und schreibe in Temp die lic.txt  
61:  "%SystemRoot%\System32\cscript.exe" "%ProgFiles%\Microsoft Office\Office16\OSPP.VBS" /dstatus > "%temp%\lic.txt"  
62:  for /f "tokens=3" %%f in ('find "---LICENSED---" "%temp%\lic.txt"') do set lic=%%f  
63:  if %lic%==---LICENSED--- echo AKTIVIERT > "%ProgFiles%\Microsoft Office\Office16\Lizenzstatus.txt"  
64:  DEL /F /Q "%temp%\lic.txt"  
65:    
66:  :Ausgang  
67:  exit  



Zeile 8: Hier wird die Variable für den Setuppfad gesetzt, gebt hier den Pfad zur Setup.exe an, ohne abschließendes "\".

Zeile 11: definiert ob es eine 32-Bit-Installation oder eine "x64" also 64-Bit-Installation von Office ist.

Zeile 17 - 26: das Setup versucht herauszufinden, welche Pfade die jeweilige Installation und das aktuelle Betriebssystem das Richtige ist. Da gibt es viel zu beachten, ich habe aber hoffentlich den Großteil aller Varianten abgedeckt (x64 OS und 64 Bit Office, x64 OS und 32 Bit Office und x86 OS mit 32 Bit Office)

Zeile 29: Später im Script, wenn Office korrekt aktiviert wurde, wird im Programmverzeichnis eine Lizenzstatus.txt geschrieben. Das ist auch der Indikator, ob das Setupscript überhaupt weiter ausgeführt werden soll oder gleich beendet werden kann.

Zeile 33 - 36: Etwas schwammig, aber leider fällt mir im Moment keine besser Möglichkeit ein: Sofern das Setup durchgelaufen ist und seine EXE-Dateien abgelegt hat, gehe ich davon aus, dass es erfolgreich war. Nur die Aktivierung muss noch erledigt werden, also springt das Script bei Erfüllung der Kriterien zur Sprungmarke "Aktivierung".

Zeile 38 - 40: Office 2013 Click-to-run Uninstall-VBS-Script wird aufgerufen. Ich habe hier für mich diese Pfade hinterlegt, wer z. B. keine Office 2013 Click-to-run hat, muss das ggf. anpassen, z. B. bei einer normalen MSI-Installation von Office 2013 wäre das wie folgt:
"C:\Program Files\Microsoft Office\Office15\" (wenn OS und Office mit x64 oder OS und Office mit x86) und "C:\Program Files (x86)\Microsoft Office\Office15\" (wenn OS mit x64 und Office unter 32 Bit). Etwas tricky, ich weiß, ich hoffe ihr wisst was gemeint ist.

Zeile 43: Office 2010 MSI-Uninstall-VBS-Script wird aufgerufen

Zeile 45 - 49: Der Schlüsselmoment: die Installation wird gestartet, indem die Setup.exe mit dem Schalter /adminfile setup32bit.MSP aufgerufen wird. Die Installtion läuft, die Timeouts sind nur zur Sicherheit da. Anschließend kommt hier der Neustart, den ich in der MSP noch unterdrückt habe. Ein Neustart ist für die volle Funktionalität von erforderlich. Der Shutdown meldet sich korrekt im Eventviewer mit einem geplanten Neustart wegen der Installation einer Anwendung.

Zeile 51 - 58: Nach dem Neustart steigt man sofort wieder an dieser Sprungmarke "Aktivierung" bei Zeile 51 ein (s. Zeile 33 - 36). Es wird nochmal überprüft ob die benötigte "Lizenzstatus.txt" schon vorhanden ist und sicherheitshalber auch nochmal ob überhaupt das Verzeichnis für Office 2016 existiert. Anschließend wird mit cscript.exe das von Microsoft mitgelieferte Aktivierungsscript "OSPP.VBS" aufgerufen.

Zeile 60 - 64: Noch einmal rufen wir OSPP.VBS auf, diesmal mit /dstatus um zu gucken, ob Office aktiviert wurde. Dafür wird der Status in die Datei "%Temp%\lic.txt" geschrieben und anschließend darin nach "---LICENSED---" gesucht. Wenn das erfolgreich war, wird die Lizenzstatus.txt in das Office 2016 Verzeichnis kopiert.

Leider ist das ebenfalls eine sehr schwammige Geschichte. Es könnte sein, dass Altlasten wie Visio noch auf dem Rechner verbleiben müssen

Um einen erfolgreichen Durchlauf des Scripts zu überprüfen, gucke ich deswegen immer, ob die Lizenzstatus.txt vorhanden ist und alte Office-Pfade gelöscht wurden.


Einrichten der GPO


Am Ende, wenn man das Ganze erst einmal händisch getestet hat, kann man es per GPO auf seine Test-Clients loslassen. Das geht z. B. so:
  • Gruppenrichtlinienverwaltung in der MMC öffnen
  • Neues Gruppenrichtlinienobjekt erzeugen z. B. mit dem Namen "InstallMSOffice2016"
  • Die GPO bearbeiten, unter "Computerkonfiguration > Richtlinien > Windows-Einstellungen > Skripts (Start/Herunterfahren)" den "Start" auswählen, im Reiter "Skripts"auf "Hinzufügen", Skriptname auf "Durchsuchen" und im nun erscheinenden Explorerfenster "\\domain.local\SysVol\domain.local\Policies\{GPO-ID}\Machine\Scripts\Startup" das Script hinverschieben und anschließend Doppelklicken. Nun ist es als Startup-Script hinterlegt.
  • WICHTIG: Im Gegensatz zu anderen kleinen Installationen dauert die Deinstallation und Installation von Office relativ lange. Deswegen bitte unbedingt die Wartezeit für Gruppenrichtlinienskripts erweitern. Das geht unter "Computerkonfiguration > Richtlinien > Administrative Vorlagen > Maximale Wartezeit für die Gruppenrichtlinienskripts angeben". Für unsere PCs sind hier 20 Minuten ausreichend, also der Wert "1200". Ggf. muss dieser aber noch hochgesetzt werden, bitte testen!
  • GPO auf die OU mit meinen Test-Rechnern verlinken
  • Unter "Bereich" der Install-GPO würde ich eine neue AD-Gruppe hinterlegen, mit Clients, die Office 2016 installiert bekommen sollen.
  • Neue GPO für die User-Einstellungen (falls benötigt und gewünscht, die Konfiguration für die Benutzer werde ich hier aber nicht beschreiben).

Das wars auch schon, ging doch schnell oder? ;) Und hier noch das Ganze als Download: