Dieses Informationsfenster platziere ich freiwillig und unentgeldlich zur Unterstützung meiner Schwester bei ihrem Jobwechsel. Es wird nur für eine begrenzte Zeit angezeigt und kann ausgeblendet werden. Ich hoffe, dass die Aktion keinen meiner Leser zu sehr stört. Zum Ausblenden werden Cookies benutzt, diese müssen aktiviert und für diese Seite erlaubt werden. Werden die Cookies gelöscht oder die Seite auf einem anderen Gerät betrachtet, erscheint das Informationsfenster wieder und muss erneut geschlossen werden.

Information

Katja Schurig sucht neue berufliche Herausforderungen!

Liebe Leser, ich habe hier einen Geheimtipp für euch:
Katja Schurig
Katja Schurig, berufserfahren und kampferprobt in den Bereichen Veranstaltungsmanagement und -verkauf, Personalwesen, Sales & Marketing sowie Tourismus, will sich neuen beruflichen Herausforderungen stellen. Wer mit viel Energie umgehen kann und auf der Suche nach einer professionellen Fachkraft ist (oder jemanden kennt, der jemanden kennt), der findet ihr Profil nebst Kontaktdaten auf: Xing
Edit Comment
IT-Stuff, Tutorials, Software, Internet, Unterhaltung Willkommen auf IMA

Vorspiel

Ich habe in letzter Zeit auf Arbeit mit einigen Rechnern gekämpft, die die AD-Gruppenrichtlinien nicht mehr ausführen wollten, genau genommen gar keine AD-Verbindung mehr hatten. Die Anzahl der Geräte, die sich bei meinem Deployment-Manager gemeldet haben, sank immer weiter.
Mit den PCs schien ansonsten alles in Ordnung: Domänenmitgliedschaft, Internet, Intranet, Serververbindung mit Netzlaufwerken, alles da.

Analyse

In der Ereignisanzeige werden folgende Meldungen ausgegeben:
Event ID 5719, NETLOGON:
Der Computer konnte eine sichere Sitzung mit einem Domänencontroller in der Domäne BARKETING aufgrund der folgenden Ursache nicht einrichten:
Es sind momentan keine Anmeldeserver zum Verarbeiten der Anmeldeanforderung verfügbar.
Dies kann zu Authentifizierungsproblemen führen. Stellen Sie sicher, dass der Computer mit dem Netzwerk verbunden ist. Wenden Sie sich an den Domänenadministrator, wenn das Problem weiterhin besteht.
ZUSÄTZLICHE INFORMATIONEN
Wenn dieser Computer ein Domänencontroller der bestimmten Domäne ist, wird eine sichere Sitzung zum primären Domänencontrolleremulator in der bestimmten Domäne eingerichtet. Andernfalls richtet dieser Computer eine sichere Sitzung zu einem beliebigen Domänencontroller in der bestimmten Domäne ein.

Event ID 5719, GroupPolicy:
Fehler bei der Verarbeitung der Gruppenrichtlinie. Der Computername konnte nicht aufgelöst werden. Dies kann mindestens eine der folgenden Ursachen haben:
a) Fehler bei der Namensauflösung mit dem aktuellen Domänencontroller.
b) Active Directory-Replikationswartezeit (ein auf einem anderen Domänencontroller erstelltes Konto hat nicht auf dem aktuellen Domänencontroller repliziert).

Recht schnell konnte ich das Verhalten auf die PCs eingrenzen, die in den letzten Wochen auf WLAN umgestellt wurden.
Der Grund: WLAN braucht wesentlich mehr Zeit zum Initialisieren als LAN. Dadurch ist die Wahrscheinlichkeit hoch, dass die Verarbeitung der Gruppenrichtlinien/AD zu schnell ist – das WLAN ist noch nicht bereit und AD-Server werden nicht gefunden.

Microsoft umschreibt das Problem so:

The behavior is caused by a race condition between network initialization, locating a Domain Controller and processing Group Policy. If the network is not available, a Domain Controller will not be located, and Group Policy processing will fail.

via

Und weiterführend auch hier:

The problem occurs because link status fluctuates as the network adapter (also known as the network interface card, or NIC) driver initializes and as the network adapter hardware negotiates a link with the network infrastructure. The Group Policy application stack executes before the negotiation process is completed and can fail because of the absence of a valid link.

via
windows-active-directory-probleme-mit-wlan-clients-eventviewer

Lösungen

Es gibt viele Tipps wenn es um WLAN in einem AD-Netzwerk geht. Hier zuerst die Lösung, die bei mir letztlich das Problem beheben konnte:

„Media Sensing“ Feature deaktivieren

Microsoft benutzt ein Feature namens „Media Sensing“, um die Verfügbarkeit von Netzwerkschnittstellen zu testen. Das Feature scheint mit WLAN aber nicht immer gut klarzukommen. In diesem Artikel wird beschrieben, wie es deaktiviert werden kann:
Registry: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
Neuer DWORD Key namens DisableDHCPMediaSense mit dem Value 1.
Download der entsprechenden .reg Datei hier. Doppelklick oder skriptbasiert ausführen mit reg import.
Neustart, fertig! Mein Test-PC hat sich direkt nach diesem Neustart bei der Domäne gemeldet und alles lief wie gewünscht.

via-Kette: via –> via –> via –> via

Falls das Problem damit noch nicht behoben ist, hier noch eine Lösung – Deaktiviertes Media Sense und die folgende Konfiguration lösen das Problem wohl zu 95%, wenn es das beschriebene Problem ist:

Abhängigkeit von gpsvc anpassen

Wir definieren eine neue Abhängigkeit des GPSVC Dienstes zu einem Netzwerkdienst der per Default immer gestartet wird: IP-Hilfsdienst (iphlpsvc), alternativ wäre der „TCP/IP-NetBIOS-Hilfsdienst“ (lmhosts) auch eine Möglichkeit.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\gpsvc
DependOnService bekommt in einer neuen Zeile iphlpsvc oder lmhosts hinzugefügt.
Damit das geht, muss vorher das Besitzrecht des Keys übernommen werden:
windows-active-directory-probleme-mit-wlan-clients-regedit-gpsvc
via
Wenn die Lösung 1 (Media Sense) allein nicht ausreicht, dann hilft die Kombi bestimmt. Ich würde empfehlen, beide Einstellungen zu setzen, dann gibt es vermutlich keine Probleme mehr.

Nun noch weitere Einstellungen, die bei der Verwendung von WLAN-Clients überprüft werden sollten:

Gruppenrichtlinieneinstellungen

  • „Administrative Templates/System/Anmelden/Beim Neustart des Computers und bei der Anmeldung immer auf das Netzwerk warten“ via
  • „Administrative Templates/System/Gruppenrichtlinie/Wartezeit für Richtlinienverarbeitung beim Systemstart“ via
  • „Administrative Templates/System/Gruppenrichtlinie/Erwartet Einwählverzögerung bei der Anmeldung“ via
  • „Administrative Templates/System/Gruppenrichtlinie/Anmeldeskripts gleichzeitig ausführen“ via

WLAN: Perform immediate sign in before user logon

Diese Seite beschreibt eine WLAN-Einstellung, die die Verbindung zum WLAN optimieren soll. Funktioniert glaube ich nur bei WPA2-Enterprise WLANs oder anderen speziellen WLAN-Systemen – ich konnte die Einstellung bei unserem Netz nicht finden.

WLAN Connect im Autorun

Ein weiterer Workaround für den Notfall wäre auch dieser: Artikel. Sollte aber nicht produktiv dauerhaft verwendet werden, hat bei mir selber auch nicht funktioniert.

Verteilung

Am liebsten hätte ich hier eine Lösung gebracht, wie man die Einstellung auf alle PCs verteilt – leider habe ich selber keine Verteilung hinbekommen.
Why? An sich muss „nur“ ein Registry Wert gesetzt werden, allerdings im HKLM Bereich, wofür Adminrechte nötig sind. Diese bekommt man nur über Startscripts des Computers, die mit SYSTEM ausgeführt werden. Die Startscripts werden aber aufgrund dieses Problems nicht ausgeführt. User/Logon-Scripts dagegen schon; die können jedoch nicht in HKLM schreiben. Nun könnte man versuchen mit dem Tool CPAU ein elevated Logon-Script für diesen Zweck zu basteln, aber auch das klappt nicht. Denn Registry-Manipulation braucht nicht nur einen Nutzer mit Adminrechten (das kann CPAU) sondern muss in einer elevated CMD ausgeführt werden (das kann es nicht)! Somit gibt es auch „Fehler beim Zugriff auf die Registrierung“-Fehler wenn reg import via CPAU mit einem Adminaccount getriggert wird.
Fazit: ich musste heute tatsächlich händisch an jeden PC, der über WLAN läuft, und die Einstellungen über den Benutzerwechsel zu einem Admin händisch setzen. Ätzend. Wer da bessere Ideen hat, immer her damit.


Ich habe letztens auf Stackoverflow einen kleinen Trick gefunden, wie sich beliebige Textinformationen, beispielsweise Zugangsdaten oder Passwörter, mit Batch versteckt in Dateien speichern und von dort wieder auslesen lassen.
Das dient sicher nicht für kritische Daten – vor einfachen neugierigen Blicken in Batch-Dateien kann man aber immerhin etwas verbergen.

Mit diesem kurzen Code wird ein beliebiger Textstring in einer Datei versteckt:

echo mypassw0rd>file.bat:pwd

Hier der Code zum Auslesen der Daten:

for /F "usebackq delims=" %i in (file.bat:pwd) do echo %i

(Für die Verwendung in einem Batch-Skript müssen doppelte Prozentzeichen verwendet werden.)
passwoerter-mit-batch-in-dateien-verstecken-cmd

Der Trick ist aus mehreren Gründen cool:
1.) Die versteckte Information lässt sich an jede beliebige Datei hängen von jedem beliebigen Dateityp hängen. Die Datei funktioniert anschließend genauso wie vorher, nur ist eine Information verborgen, die extrahiert werden kann.
passwoerter-mit-batch-in-dateien-verstecken-jede-datei

2.) Die erzeugte oder manipulierte Datei wird nicht in ihrer Dateigröße verändert bzw. ist immer 0 Byte groß. Egal wie lang der Text ist, der versteckt wird. Somit lassen sich ganze Text-Dokumente verstecken, ohne, dass an der Datei etwas erkennbar wäre, außer das Änderungsdatum.

3.) Jeglicher Text kann versteckt werden – egal ob Umlaute oder kryptische Zeichen.
passwoerter-mit-batch-in-dateien-verstecken-zeichen

4.) Die versteckten Informationen sind so gut wie unsichtbar. Die Dateigrößenveränderung ist 0 Byte, alle normalen Texteditoren zeigen absolut nichts an, selbst HEX-Editoren erkennen keinen Inhalt. Also keine Ahnung wie das technisch realisiert ist, aber es ist sexy. Kenny, sollte er den Beitrag lesen, weiß dazu vermutlich mehr 😉

Fazit: Mit dieser Methode kann in jede Datei beliebig viel Information in jeglicher Art von Textform eingebaut werden, ohne, dass das irgendwie erkennbar oder die Information sichtbar ist. Wenn eine Person nicht gerade weiß, dass in Datei X Informationen versteckt wurden, ist das erst einmal safe. In einem Betriebssystem mit Hunderttausenden von Dateien könnte man somit also eine Menge verstecken – wenn man ein kleines Tool dazu schreiben würde, welches sich die bnutzten Dateien merkt und den Prozess nutzerfreundlich gestaltet.

Nachteil: Wird dieser Trick in einem Skript fest verbaut, muss letztlich natürlich irgendwann in einem Skript immer diese Information geladen werden. Dabei wird natürlich erstens der Befehl zum Auslesen der Information benutzt und zweitens muss die entsprechende Datei angegeben werden. Wer sich also gut auskennt, kann das in einem Skript erkennen und mit dem entsprechenden Befehl auch selbstständig die Information abgreifen.
Da hilft nur verrücktes obfuskieren:
passwoerter-mit-batch-in-dateien-verstecken-obfuscate
(Aber selbst dann kann einfach mit @echo on die Batch Ausgabe erzwungen werden und die geladenen Informationen sind im Endeffekt ablesbar (wenn die Ausgabe pausiert wird))

Dennoch: lustige Spielerei und besser als Klartextinformationen in Batch!


Worum geht’s?

Wir befinden uns ins Excel, versionsunabhängig: Denkbar ist dabei eine große Menge an „Detail-Sheets“ und ein „Übersichts-Sheet“, zwischen denen immer schnell hin und her navigiert werden soll. Ein kurzes Beispiel soll eine einfache Navigation zwischen Tabellenblättern (Sheets) in Excel zeigen.
excel-tabellenblatter-navigation-sheets-skizze-sketch

In diesem Beispiel zeige ich zwei Methoden: einen einfachen Button und die Navigation mittels Zellen und deren Inhalt. Beide Methoden werden über VBA-Programmierung realisiert. Das Resultat sieht so aus:
YouTube Preview Image

Download

Am einfachsten wäre vermutlich meine vorbereitete Excel-Datei. Diese enthält bereits entsprechenden Code und kann mit weniger Aufwand angepasst werden.
Download section
navigation (.xlsm, 23KB)
Die Excel-Datei enthält Makros, die ihr aktivieren müsst, damit die Navigation funktioniert. Eventuelle Sicherheits-Popups müssen bestätigt werden – anders sind Makros in Excel nunmal nicht möglich.
Sie enthält außerdem ein Tabellenblatt #Main als Übersichtsseite und eine #Vorlage als Vorlage für neue Sheets. Durch einen Klick oder die Tastennavigation auf einen Namen der #Main wird die Navigation ausgelöst. Sollte das Tabellenblatt nicht existieren, wird es erstellt und zusätzlich alle bestehenden Tabellenblätter alphabetisch sortiert. Aus diesem Grund ist vor Main und Vorlage ein Raute-Symbol – dadurch werden die Reiter der Sheets auch mit Sortierung immer am Anfang (ganz links) angezeigt.
Wenn ihr die Benennung der Sheets oder das Verhalten anpassen wollt, schaut weiter unten, dort steht wie es geht.

Code

Wer bereits größere Dokumente hat, baut sich den Code vielleicht schneller ein.
Öffnet in Excel den Code-Editor mit ALT+F11 und öffnet aus der linken Explorer-Struktur eure „Übersichtsseite“ (in Klammer stehen immer die Namen eurer Tabellenblätter). Fügt dort folgenden Code ein:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim switchSheetRange As Range, selectedCell As Range
    
    ' ######## EDIT HERE
    Set switchSheetRange = Range("A:A")
    newSheetIfNotExists = True
    useBlueprint = False
    blueprintSheetName = "#Vorlage"
    sortSheets = False
    ' ##################
    
    On Error Resume Next
    If Selection.Count = 1 Then
        If Not Intersect(Target, switchSheetRange) Is Nothing Then
            Set selectedCell = Selection
            If Not IsEmpty(selectedCell.Value) Then
                If SheetExists(selectedCell.Value) Then
                    ThisWorkbook.Sheets(selectedCell.Value).Activate
                ElseIf newSheetIfNotExists Then
                    createOrNot = MsgBox("Arbeitsblatt " & selectedCell.Value & " existiert noch nicht. Erstellen?", 1, selectedCell.Value & " erstellen?")
                    If createOrNot = 1 Then
                        If useBlueprint Then
                            Worksheets(blueprintSheetName).Copy After:=Worksheets(ActiveWorkbook.Worksheets.Count)
                            ActiveSheet.Name = selectedCell.Value
                        Else
                            Sheets.Add After:=Worksheets(ActiveWorkbook.Worksheets.Count)
                            ActiveSheet.Name = selectedCell.Value
                        End If
                        If sortSheets Then
                            Sort_Active_Book
                        End If
                        ThisWorkbook.Sheets(selectedCell.Value).Activate
                    End If
                End If
            End If
        End If
    End If
End Sub

Function SheetExists(SheetName As String, Optional wb As Excel.Workbook)
   Dim s As Excel.Worksheet
   If wb Is Nothing Then Set wb = ThisWorkbook
   On Error Resume Next
   Set s = wb.Sheets(SheetName)
   On Error GoTo 0
   SheetExists = Not s Is Nothing
End Function

Sub Sort_Active_Book()
' via: https://support.microsoft.com/de-de/kb/812386
Dim i As Integer
Dim j As Integer
Dim iAnswer As VbMsgBoxResult
For i = 1 To Sheets.Count
   For j = 1 To Sheets.Count - 1
     If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then
        Sheets(j).Move After:=Sheets(j + 1)
     End If
   Next j
Next i
End Sub

Ihr seht bereits im EDIT HERE Bereich die anzupassenden Variablen:
Set switchSheetRange = Range("A:A") gibt den Bereich an, der eure klickbaren Zellen enthält. Wie bekannt sind Spalten mich Buchstaben und Zeilen mit Zahlen benannt. Mögliche Angaben wären: Range("B:B"), Range("C1:C20"), Range("1:2").
newSheetIfNotExists = [True/False] – Soll ein neues Tabellenblatt erstellt werden, wenn eins mit dem Namen des geklickten Zelleninhalts noch nicht existiert?
useBlueprint = [True/False] – Soll beim Erstellen eine Vorlage genutzt werden? Wenn ja,
blueprintSheetName = [True/False] – Der Sheet-Name eures Vorlagensheets
sortSheets = [True/False] – Sollen die Sheets nach dem Neuerstellen eines Sheets alphabetisch sortiert werden?

Damit steht die Zellennavigation von der Übersichtsseite zu den Detailseiten. Rückzu wollte ich eine andere Lösung benutzen (die auch einfacher zu machen ist):
excel-tabellenblatter-navigation-sheets-buttonErstellt über die Excel-Entwicklertools (müssen ggf. über „Optionen -> Menüband anpassen“ eingeblendet werden) eine neue Schaltfläche auf der Vorlagenseite – das geht über Entwicklertools -> Einfügen. Daraufhin öffnet sich ein Makrofenster; klickt hier einfach auf „Neu“ und der Code-Editor öffnet sich automatisch und zeigt euch den Code des Buttons an. Fügt hier zwischen den bestehenden zwei Zeilen folgendes ein:

ThisWorkbook.Sheets("#Main").Activate

Wobei natürlich das „#Main“ zum Namen eurer Übersichtsseite umbenannt werden muss.

That’s it! Es müsste nun so funktionieren wie in meinem Video oben gezeigt. Sehr basic, aber u.U. nützlich!


GMail Nutzungsstatistik mit GMail Meter

Manchmal können gewissen Mailingstatistiken ganz hilfreich sein: Wie ist meine durchschnittliche Antwortzeit, wann (Tag und Uhrzeit) kriege und sende ich die meisten Mails, welche Personen kann ich zu welchen Uhrzeiten am besten erreichen?
GMail Meter ist ein Online-Service, die genau das in wenigen Sekunden für euch erstellt. Sie brauch dafür nur ein paar Berechtigungen eures Google Kontos und schon werden ein paar hübsche Grafiken und Tabellen generiert:
gmail-meter-gmail-statistics-messages-per
gmail-meter-gmail-statistics-response-time
gmail-meter-gmail-statistics-top-interactions
Und noch mehr 😉

Anschließend könnt ihr, wenn ihr keine weiteren Berichte braucht, die Berechtigungen von GMail Meter in den Google-Einstellungen wieder entfernen.


Plötzlich wieder Werbebanner/Ads?

Vielen wird es aufgefallen sein: In den vergangenen Monaten hat die Menge an Werbeanzeigen trotz Adblocker (Erweiterungen, die Werbung im Internet entfernen) wieder zugenommen. Das liegt daran, dass die Adblocker-Vereine Werbung, die gewissen Kriterien (Platzierung, Unterscheidung, Größe) entsprechen, neuerdings als „Nicht aufdringliche Werbung“ oder „Nützliche Werbung“ eingestuft wird. Diese Werbung wird in den Standardeinstellungen der meisten Adblocker angezeigt.

Das Resultat ist in meinen Augen weder nützlich noch nicht aufdringlich – trotz aktiviertem Adblocker werden mir „Schocks der Abnehm-Industrie“, Spar- und Börsentipps, Diät-Wunder, 17€ iPhones und Single-Partnerbörsen-Müll angezeigt:
adblock-nicht-aufdringliche-werbung-4
adblock-nicht-aufdringliche-werbung-2
adblock-nicht-aufdringliche-werbung-0
adblock-nicht-aufdringliche-werbung-1

Werbung loswerden

Die folgenden zwei Schritte befreien euch von fast jeder der „nützlichen/nicht aufdringlichen Werbung“ a.k.a. „gute Werbung“:

Diese Anzeige der „guten Werbung“ deaktivieren – in den Einstellungen eures Adblockers. Ich glaube fast jeder Adblocker bietet die Funktion der Deaktivierung an, da diese vorgeschrieben ist.
adblock-nicht-aufdringliche-werbung-deaktivieren
adblock-nuetzliche-nicht-aufdringliche-werbung-adguard-settings

2. Einen zweiten Adblocker installieren. Doppelt hält besser. Ich habe uBlock Original und Adguard Adblocker installiert, beide mit deaktivierter „guter Werbung“ Option.

Aber: Werbung hilft!

Trotzdem sollte man nicht vergessen: Mit Werbung finanzieren die meisten Webseiten teilweise ihre Kosten – ohne Werbung könnten viele Webseitenbetreiber nicht ausreichend Einnahmen für einen Fortbetrieb der Seite zusammenbringen. Daher solltet ihr euch gut überlegen, ob ihr Werbung immer und überall ausnahmslos entfernen wollt oder den Betreibern diese Einnahmequelle gönnt. Ich deaktiviere meine Adblocker auf allen Seiten, die in meinen Augen für mich guten und wichtigen Content liefern – News-Seiten, Blogs, Seiten die ich oft benutze. Aktiviert sind die Adblocker ausnahmslos nur, wenn ich über mein Smartphone-Hotspot ins Internet gehe und Datenvolumen sparen muss.


Kommenden Sonntag, 18.09.2016, sind Wahlen in Berlin.

Wahl-O-Mat – Das Tool

Der Wahl-O-Mat ist ein beliebtes Tool für eine erste Einschätzung, welche Parteien den eigenen Ansichten am ehesten entsprechen. Dazu werden, in diesem Fall sind es 38, Thesen durch den Nutzer beantwortet (mit Zustimmung, Neutral, Gegenstimmung, Enthaltung per Überspringen), anschließend Gewichtungen festgelegt, bis zu 8 Parteien ausgewählt und letztenendes berechnet der Wahl-O-Mat anhand der eigenen und der Partei-Antworten auf diese 38 Thesen den Prozentsatz der Übereinstimmung.

Besonders hilfreich für alle, die sich etwas mehr informieren wollen, sind eigentlich die Stellungnahme der Parteien zu jeder These. Dadurch lassen sich die Parteien am detailliertesten einschätzen, gleich nach dem offiziellen Wahlprogramm zumindest. Allerdings erhält man nicht den Zugriff zu diesen Partei-Antworten ohne den Wahl-O-Mat durchzuklicken – unnötig, wenn man das Statement einer Partei zu einem Punkt nur noch einmal schnell lesen möchte.

Wahl-O-Mat Partei-Antworten zu den Thesen

Ich habe die Antworten der größten Parteien – alphabetisch sortiert AfD, CDU, DIE LINKE, FDP, GRÜNE, NPD, PIRATEN, SPD – herausextrahiert und angepasst, sodass diese online/offline und ohne vorherige Bewertung eingesehen werden können.

Verfügbar unter:
(online) Mein Server: Sofort starten (www.wahl-o-mat-antworten.hannes-schurig.de/bln092016/)
(offline) Als .zip: Download
(offline) Als .7z: Download

wahl-o-mat-partei-antworten-stellungen-offline-download-ansicht


Intro

Das Deployment von Adobe Reader DC im Windows Netzwerk via GPO Batch-Startscript ähnelt der Verteilung des alten Adobe Readers sehr – dennoch fasse ich die wichtigsten Steps hier zusammen.

Vorbereitung

Ihr braucht für die Verteilung immer die DC-Basisversion (als .msi) und das aktuellste, gewünschte Update (als .msp).
Außerdem, um die Reader Installation vor dem Deployment anzupassen, den installierten Reader DC Customization Wizard.

Step-by-Step

  1. Lokale AIP-Installation (z.B. C:\adc1516\) der Basisversion mit:
    msiexec /a AcroRdrDC1500720033_de_DE.msi

    Das Bild zeigt den Reader DC Installationsdialog, der durch die AIP gestartet wurde

  2. Aktuellsten Patch in die lokale AIP-Installation Slipstreamen (lokalen .msi Pfad beachten):
    msiexec /a "C:\adc1516\AcroRdrDC1500720033_de_DE.msi" /p AcroRdrDCUpd1501720053.msp

    Das Bild zeigt den CMD Befehl um das aktuelle Reader DC Update in die lokale AIP Installation zu slipstreamen

  3. Im lokalen AIP Ordner C:\adc1516 eine leere setup.ini Datei erzeugen und die AcroRdrDC1500720033_de_DE.msi in AcroRead.msi umbenennen (Letzteres ist nur eine kosmetische Anpassung).
  4. Mit dem Adobe Reader DC Customization Wizard die C:\adc1516\AcroRead.msi öffnen und beliebig anpassen. Änderungen wie vorgegeben als AcroRead.mst speichern.
    Das Bild zeigt den Adobe Reader DC Customization Wizard
  5. (Es müssten jetzt 3 Dateien und 4 Ordner in C:\adc1516\ existieren.) Den lokalen AIP-Ordner auf euer Deployment-Laufwerk verschieben.
    Das Bild zeigt die fertige Reader DC Deployment Installation im Deployment Share
  6. Deployen mit der .msi und .mst:
    start /w msiexec /i "%wd%\deploy\%version%\AcroRead.msi" /qn TRANSFORMS="%wd%\deploy\%version%\AcroRead.mst"

infos, infos, infos, via

Skript und Deploy

Das Deployment habe ich seit Reader 11 etwas verändert. Statt „complete-Ordner“ setze ich nun auf eine Versionsüberprüfung der Programm-exe. Das ist dynamischer und lässt sich differenzierter behandeln. Im Falle von Reader DC ist die Versionierung jedoch etwas seltsam. Beispielsweise lautet das aktuellste Update „AcroRdrDCUpd1501720053.msp“, nach der Installation wird die Dateiversion der .exe jedoch mit 15.17.20050 angegeben. Möglicherweise haben hier die Entwickler geschlampt.

Jedenfalls ist für die Verteilung mit Versionsüberprüfung noch ein Zwischenschritt notwendig:
Schaut im gerade erstellten lokalen AIP-Ordner, bzw. den schon aufs Deployment-Laufwerk kopierten Ordner die Eigenschaften Datei AcroRd32.exe an (liegt unter .\program files\Adobe\Acrobat Reader DC\Reader\) – im Tab Details steht die Versionsnummer, die ihr ins Skript und somit auch als Ordnernamen im Deployment-Laufwerk angeben müsst:
Das Bild zeigt die Dateieigenschaften von AcroRd32.exe und die Verweise auf das Skript und das Deploymentlaufwerk
Außerdem wird die VersionCompare.exe benötigt.

Hier nun das Script:
Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

@echo off & Color 9f & setlocal
set wd=\\server\Deployment\Software\Reader
set log=%wd%\reader-log.txt
set readerEL=999
set retry=0
set forcecleanup=yes
set deactivateToolsSidebar=yes
REM:: ******************
set version=15.17.53
REM:: ******************

REM:: Clientfilter: nur die Computer aus der allowedPCs.txt dürfen installieren
::for /f %%f in (%wd%\allowedPCs.txt) do if "%computername%"=="%%f" goto start
::goto end

REM:: Clientfilter: die Computer aus der deniedPCs.txt dürfen nicht installieren
for /f %%f in (%wd%\deniedPCs.txt) do if "%computername%"=="%%f" goto end

:start
if not exist %wd%\deploy\%version%\complete md %wd%\deploy\%version%\complete
if not exist %wd%\deploy\%version%\complete\%computername% goto beforeinstall

if "%deactivateToolsSidebar%"=="yes" goto restoreToolbar

:beforeinstall
if "%forcecleanup%"=="yes" goto cleanup
goto install

:cleanup
echo %date% %time:~0,8% - %computername% deinstalliert alle Reader Versionen... >> %log%
REM:: uninstall all reader versions
taskkill /im acrord32.exe /t /f
taskkill /im acrord64.exe /t /f
start /w %wd%\cleaner\reader-cleaner-9.exe /silent /product=1
start /w %wd%\cleaner\reader-cleaner-10.exe /silent /product=1
start /w %wd%\cleaner\reader-cleaner-dc.exe /silent /product=1
echo %date% %time:~0,8% - %computername% hat alle Reader Versionen deinstalliert... >> %log%
goto install

:install
echo %date% %time:~0,8% - %computername% startet die Installation... >> %log%
start /w msiexec /i "%wd%\deploy\%version%\AcroRead.msi" /qn TRANSFORMS="%wd%\deploy\%version%\AcroRead.mst"
set readerEL=%errorlevel%

if %readerEL%==1618 goto retry REM:: msiexec process in use, installation already in progress
if %readerEL%==1602 goto retry REM:: user canceled installation
if %readerEL%==1603 goto retry REM:: fatal error, some use it for "already installed" (eg. java)
echo %date% %time:~0,8% - %computername% hat die Installation abgeschlossen, Errorlevel: %readerEL%... >> %log%
if %readerEL%==0 md %wd%\deploy\%version%\complete\%computername%
if "%deactivateToolsSidebar%"=="yes" goto restoreToolbar
goto end

:restoreToolbar
if exist "c:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroApp\" set instpath=c:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroApp
move "%instpath%\ENU\disabled\AppCenter_R.aapp" "%instpath%\ENU"
move "%instpath%\ENU\disabled\Home.aapp" "%instpath%\ENU"
move "%instpath%\ENU\disabled\Viewer.aapp" "%instpath%\ENU"
move "%instpath%\DEU\disabled\AppCenter_R.aapp" "%instpath%\DEU"
move "%instpath%\DEU\disabled\Home.aapp" "%instpath%\DEU"
move "%instpath%\DEU\disabled\Viewer.aapp" "%instpath%\DEU"
rd "%instpath%\ENU\disabled"
rd "%instpath%\DEU\disabled"
echo %date% %time:~0,8% - %computername% hat die Installation optimiert >> %log%
goto end

:retry
if %retry%==1 goto retryfailed
echo %date% %time:~0,8% - %computername% hat die Installation abgeschlossen, Errorlevel: %readerEL%, retry in 5min... >> %log%
set retry=1
ping localhost -n 300 > nul
goto cleanup

:retryfailed
echo %date% %time:~0,8% - %computername% hat die Installation abgeschlossen, Errorlevel: %readerEL%, retry failed, end >> %log%
goto end

:end
endlocal
exit

Alternatives Deployment

Auf der Seite 404techsupport.com habe ich einen noch einfacheren Deployment-Guide gesehen. Dort wird nur anhand des aktuellsten Installers gearbeitet – leider hatte ich noch nicht die Zeit dieses Deployment zu testen. Das hole ich sicher noch nach und Update dann hier.
Einzige Einschränkung: Das Deployment funktioniert nur über .exe, ist also nicht für das normale GPO Softwaredeployment via .msi geeignet.
Hier die Zusammenfassung, die der Autor mir per Mail zukommen ließ:

I download the latest executable from Adobe’s FTP site for Adobe Reader DC and deploy that with a script.
ftp://ftp.adobe.com/pub/adobe/reader/win/AcrobatDC/1501620039/

I created a transform using the Adobe Customization Wizard and the .msi version of the installer.
My script then installs the executable and uses the transform as a parameter.

\\server.fqdn\share\AdobeReader\LatestReaderDC.exe /sPB /rs /msi TRANSFORMS=\\server.fqdn\share\AdobeReader\ReaderDC.mst

(The script runs at startup assigned by Group Policy. It checks a network location for a „receipt“ for that computer to see if it has run before, and if not, executes the above command. I empty the „receipts“ folder after I download the new installer to the share so that the script executes on their next startup.)

If that works for your deployment options, it’s pretty straight-forward and avoids the annoying .msp patching (security patch or quarterly patch?). If you need an .msi to deploy, you are probably stuck with your steps of creating the admin install.




Admin

Sie möchten hier werben oder Sponsor auf längere Zeit werden? Ich garantiere Ihnen unschlagbare Preise bei meinen Besucherzahlen. Egal ob Banner, Textlinks oder andere Werbeformen. Informieren Sie sich bei mir unter werbung@hannes-schurig.de