whatsapp-notizen-notebook-mysteries-vorbereitungen-banner
Frage: Whatsapp Notizen??
Antwort: Auf jeden Fall! Für viele ist Whatsapp zu einem sehr zentralen Bestandteil des Alltags/Lebens geworden, warum also keine Notizen schnell dort reinschmeißen. Ich nutze Whatsapp gerne als persönlichen kleinen Notizzettel – Texte, Links, Bilder. Inhalte zu Whatsapp teilen geht immer schnell und einfach und ist praktisch überall verfügbar. Ich möchte aber natürlich keine Whatsapp-Kontakte mit meinen Notizen nerven.

Frage: Wie mache ich das?
Antwort: Ich habe einen extra Kontakt bzw. eine Gruppe namens „Notizen“. Im Falle einer Gruppe bin ich das einzige Gruppenmitglied, wodurch niemand belästigt wird.

Frage: Wie erstellt man das?
Antwort: Den Kontakt erstelle ich einfach direkt bei Whatsapp – ein neuer Telefonkontakt mit dem Namen „Notizen“ und meiner eigenen Telefonnummer. Dadurch erhalte ich einen leeren Chat mit mir selbst.
Zum Erstellen einer Gruppe wird immer ein weiterer Kontakt benötigt, das lässt sich leider nicht umgehen. Hier kann ich also eine Gruppe namens „Notizen“ mit einem beliebigen Kontakt neu erstellen und diesen Kontakt direkt wieder aus der Gruppe werfen. Tadaa, nun habe ich eine Gruppe nur mit mir selbst als Teilnehmer.

whatsapp-notizen-notebook-mysteries-vorbereitungen_komplettwhatsapp-notizen-notebook-mysteries-chat

adobe-reader-dc-2018-deployment-ad-windows-guide-banner-thomas-kvistholt-191153Nachdem ich Ende 2016 noch das Deployment von Adobe Reader DC mit der alten AIP-Methode beschrieben hatte, gibt es jetzt ein Update, eine neue Deployment-Methode, die super schnell und einfach ist und viel weniger Schritte benötigt. Statt wie bisher das gewünschte Adobe Update direkt in die primäre Installation zu slipstreamen (einzubinden), wird der Patch jetzt per Befehl an die msiexec Installation übergeben und mitinstalliert. Damit entfällt die komplette AIP-Erstellung, was Zeit und CMD-Getippe spart.

Download & Vorbereitung

Ihr benötigt natürlich immernoch die aktuellste Reader DC Version als .exe Download von der Adobe Download Seite.
Die .exe Datei dann einfach in einen Ordner entpacken und ihr erhaltet die typischen MSI-Deployment Daten.

Anpassung

Wenn ihr zusätzlich die Sprache der Verteilung festlegen wollt, öffnet die setup.ini und ergänzt dort einige Zeilen:

[Startup]
RequireMSI=3.0
CmdLine=/sl"1031" /sall /rs

[Product]
PATCH=AcroRdrDCUpd1800920044.msp
msi=AcroRead.msi
CmdLine=TRANSFORMS="[yourmstfile].mst"
Languages=1031
1031=German

[MSI Updater]
Path=http://ardownload.adobe.com/pub/adobe/reader/win/8.x/8.0/misc/WindowsInstaller-KB893803-v2-x86.exe

Anschließend benutzt ihr den Adobe Customization Wizard, wie gewohnt, um eine .mst Transform-Datei zu erstellen, die eure Einstellungen enthält.
adobe-reader-dc-2018-deployment-ad-windows-guide-update-customization-wizard

Das war’s auch schon.

Deployment

Beim Deployment ändert sich der Aufruf der Installation:

msiexec /i "%wd%\deploy\%version%\AcroRead.msi" PATCH="%wd%\deploy\%version%\AcroRdrDCUpd1800920044.msp" TRANSFORMS="LEAP.mst" /qb

Ändert hier und in der setup.msi den Namen der .mst in eure .mst Datei und passt auch wieder die Pfade am Anfang des Deployment-Skripts an. Für das Cleanup braucht ihr auch ein paar zusätzliche Cleanup-Tools von Adobe, die ihr ggf. noch herunterladen und im Ordner ablegen müsst.

@echo on & Color 9f & setlocal
set wd=\\server\Deployment\Software\Reader
set log=%wd%\reader-log.txt
set tools=\\server\Deployment\Sonstiges\tools
set readerEL=999
set retry=0
set forcecleanup=yes
:: set deactivateToolsSidebar=yes
set exepath=none
set instversion=0.0
REM:: ******************
set version=18.009
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 exist "c:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" set exepath="c:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
if exist "c:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" set exepath="c:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
if %exepath%==none goto install
goto checkversion

:checkversion
for /f "tokens=1-3" %%i in ('%tools%\sigcheck %exepath%') do ( if "%%i %%j"=="File version:" set instversion=%%k )
%tools%\VersionCompare.exe %instversion% %version%
set versionEL=%errorlevel%
if "%versionEL%"=="-1" goto beforeinstall
if "%versionEL%"=="0" echo %date% %time:~0,8% - %computername% hat bereits %instversion% installiert >> %log%
if "%versionEL%"=="1" echo %date% %time:~0,8% - %computername% hat bereits %instversion% (neuer) installiert >> %log%
goto end

: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
ping localhost -n 3
::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% (%instversion%) startet die Installation... >> %log%
::start /w "" "%wd%\deploy\%version%\setup.exe"
msiexec /i "%wd%\deploy\%version%\AcroRead.msi" PATCH="%wd%\deploy\%version%\AcroRdrDCUpd1800920044.msp" TRANSFORMS="LEAP.mst" /qb
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%
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 beforeinstall

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

:end
endlocal
exit

Gruppenrichtlinien-Filterung

windows-ad-gpo-wmi-filter-intro-bannerDie Anweundung von Active Directory Gruppenrichtlinien lässt eine Filterung und Steuerung über verschiedene Techniken zu:

  • Verknüpfung mit OUs (die Voraussetzung ist gewissermaßen die erste Filterebene), Verknüpfungen aktivieren/deaktivieren
  • Sicherheitsfilterung mit Gruppen und Rechten
  • WMI-Filterung


Die ersten beiden sind gewissermaßen schon die Voraussetzung für das Erstellen und Anwenden einer Gruppenrichtlinie. Mit einer guten OU- und Gruppenstrukturen lassen sich bereits viele „Filter“ realisieren. Allerdings sind Rechte, Gruppen und OUs oftmals auch aufwändig in der Pflege.

Negativbeispiel: Mit einer „Windows10Clients“-Gruppe kann eine Filterung auf Sicherheitsebene vollzogen werden. Dazu muss die „Windows10Clients“-Gruppe jedoch händisch von den Admins gepflegt werden – neue Clients rein, alte Clients raus. Ebenso eine „SalesPCs“-Gruppe. In größeren Strukturen ist das nicht umsetzbar und geht auch einfacher.

Erweiterte Gruppenrichtlinienfilterung mit WMI

Hier kommen WMI-Filter ins Spiel. WMI, Windows Management Instrumentation, ist praktisch eine Schnittstelle zum Windows System, welches über Abfragen in einer Art SQL (WQL genannt) bedient wird und Informationen über das abgefragte System liefert. Solche Abfragen können ebenfalls für die Filterung von GPOs verwendet werden.

Beispiel: Wenn eine GPO nun also nur für Windows 10 Clients oder nur für Clients älter als Windows 10 übernommen werden soll, lassen sich die Clients super easy über WMI herausfiltern. Keine OU, keine Gruppen, nur 1 WMI-Objekt, im Endeffekt nur eine Zeile Code.

Mit Google oder Tools wie dem WMI Code Creator von Microsoft lassen sich somit schnell die benötigten Abfragen erstellen:
windows-ad-gpo-wmi-filter-code-creator-classes-processor-executewindows-ad-gpo-wmi-filter-code-creator-classes

Codebeispiele

Die Möglichkeiten sind vielseitig, hier ein paar Beispiele:

/* 32bit / 64bit */
SELECT * FROM Win32_OperatingSystem WHERE OSArchitecture = '32-Bit'
SELECT * FROM Win32_OperatingSystem WHERE OSArchitecture = '64-Bit'
/* Computername beginnt mit "vpc-" */
SELECT * FROM Win32_ComputerSystem WHERE Name LIKE 'vpc-%'
/* Sprache des Betriebssystems ist Deutsch */
SELECT * FROM Win32_OperatingSystem WHERE CountryCode = '49'
/* Internetexplorer ist in Version 8 installiert */
SELECT * FROM CIM_DataFile WHERE Filename = 'iexplore' AND version > '8.0' AND (path = '\\programme\\Internet Explorer\\' OR path = '\\program files\\Internet Explorer\\' )

via

Betriebssystemversion

Zum Erkennen des Betriebssystems eignen sich einige Variablen; von BuildNumber über Caption bis zu Version. Letztere ist einfach zu benutzen, da Microsoft für jede Betriebssystemversion plus dazu passende Servervariante die gleiche Version benutzt, weitere Infos dazu auf dieser Microsoft Seite.

/* Wählt alle Clients mit Windows Vista/7/8/8.1 (Nicht-Windows-10) */
SELECT * FROM Win32_OperatingSystem where Version like '6.%' and ProductType='1'
/* Windows 10 Clients only */
SELECT * FROM Win32_OperatingSystem where Version like '10.%' and ProductType='1'

Vorsicht: BuildNumber

Etwas nerviger ist die Abfrage der Windows Version anhand der BuildNumber, da diese nicht als Zahl sondern als String im System steht und somit einfache BuildNumber >= X Abfragen nicht funktionieren. Microsoft thematisiert das hier und wählt den Regex-ähnlichen Ansatz über die Anzahl der Ziffern in Kombination mit der BuildNumber. Auch Marc von gruppenrichtlinien.de verwendet WHERE BuildNumber > '5000' – das alles lief bei mir nicht zuverlässig. BuildNumber scheint mir ein schlechtes Werkzeug zu sein und ich gehe daher über die Betriebssystem Caption, die sehr standardisiert ist:

/* Windows 10 Clients */
SELECT * FROM Win32_OperatingSystem WHERE Caption LIKE '%10%' AND BuildNumber LIKE '[123456789][0123456789][0123456789][0123456789][0123456789]'
/* Alle Clients vor Windows 10 */
SELECT * FROM Win32_OperatingSystem WHERE NOT Caption LIKE '%10%' AND BuildNumber LIKE '[123456789][0123456789][0123456789][0123456789]'

Das hat bei Win7 und Win10 funktioniert wie erwünscht.
windows-ad-gpo-wmi-filter-in-use-os-version-buildnumber

Was? Warum?

Ich hatte letztens das Problem an einem Windows 10 Client, das nach einem Feature Update (auf 1709 glaube ich) plötzlich die Sprache des Betriebssystems auf Englisch war. Jedoch nur die Anzeigesprache, Tastaturlayout, Datum & Uhrzeit sowie Regionale Einstellungen waren alle noch auf Deutsch. Deutsch war als primäre Sprache noch eingestellt, aber ein zugehöriges Sprachpaket für die Anzeigensprache war nicht mehr verfügbar:
windows-10-anzeigesprache-manuell-installieren-language-pack-display-settings1windows-10-anzeigesprache-manuell-installieren-language-pack-display-settings2

Und obwohl auf etlichen Microsoft Seiten steht, dass man über diese Einstellungsdialoge einfach Sprachen mitsam Anzeigepaket herunterladen kann, funktioniert das in diesem Zustand nicht mehr. Auch das Löschen und erneute Einstellen der Deutschen Sprache bringt die Anzeigesprache nicht zurück.

Anzeigesprache mit .cab Sprachpaket installieren

So seltsam der Fehler auch ist, so selten wird er vermutlich sein. Aber dennoch, hier die Lösung:
Im Internet findet man nach einer kurzen Suche Sprachpakete als .cab Downloads, zum Beispiel bei Tobias Hartmann. Diese .cab Dateien könnt ihr dann manuell installieren in: Start -> Ausführen -> lpksetup – der Vorgang wird einige Minuten brauchen:
windows-10-anzeigesprache-manuell-installieren-language-pack-display-install1windows-10-anzeigesprache-manuell-installieren-language-pack-display-install2

Anschließend müsste bei der installierten Sprache auch wieder die Anzeigesprache in den Regionaleinstellungen angezeigt werden und nach einem kurzen Relogin ist das Betriebssystem auch schon auf die neue Sprache eingestellt.
windows-10-anzeigesprache-manuell-installieren-language-pack-display-install-complete

Microsoft, das geht doch bestimmt auch einfacher.

In manchen Fällen kann es hilfreich sein, die Audiowiedergabe bestimmter Tabs oder Domains zu manuell oder auch automatisch zu blocken. Automatisch startende Werbung, unerwünschte Soundeffects oder Ähnliches. 3 Möglichkeiten möchte ich euch hier zeigen:

Manuell: Kontextmenüeintrag

chrome-audiowiedergabe-blocken-tab-kontexteintragDas ist kein Geheimnis: Chrome hat im Rechtsklick-Kontextmenü der Tabs die Möglichkeit, diese stummzuschalten:
Per Klick auf den Menüpunkt lässt sich zwischen Stummschalten und Audiowiedergabe wechseln.

Besser wäre es natürlich, wenn man dafür nicht zwei Klicks (Rechtsklick und Linksklick) sondern nur einen Klick bräuchte:

Manuell: One-Click Lösung

chrome-audiowiedergabe-blocken-tab-single-click-resultWenn Chrome in einem Tab Audio wiedergibt, wird dies durch ein kleines Lautsprechericon im Tab angezeigt:
Es ist auch möglich, per einfachen Linksklick auf dieses Icon den Tab stummzuschalten.
Dazu muss vorher allerdings eine Chrome-Einstellung aktiviert werden, die ihr über folgende „URL“ erhaltet:
chrome-audiowiedergabe-blocken-tab-single-clickchrome://flags/#enable-tab-audio-muting
(Ihr müsst die URL kopieren und selbstständig in eure Adressleiste einfügen)

Nun möchte man vielleicht nicht nur einen Tab muten, oder es nicht immer manuell per Klick machen, sondern eine ganze Domain generell und automatisch stummschalten.

Automatisch: Alle Tabs einer Domain stummschalten

chrome-audiowiedergabe-blocken-domain-settingGanz neu, mit Chrome Version 62, kommt eine Einstellung namens „Sound content setting“, welche die Steuerung von Audiowiedergabe auf Domainebene ermöglicht. Nach dem Aktivieren der Funktion und einem Chrome Neustart, könnt ihr im Protokoll-Infobutton (links von der Adresszeile) nun „Ton“ aktivieren oder deaktivieren.
Einmal z.B. auf Youtube eingestellt, sind alle Tabs, auch zukünftige, stummgeschaltet.
Folgende Einstellung muss dafür aktiviert werden:
chrome://flags/#sound-content-setting
Bitte den Text in die Adresszeile kopieren. Wenn dann die Einstellung nicht direkt hervorgehoben wird, prüft bitte, ob ihr Chrome 62 installiert habt.

Offtopic: Chrome leise, restlicher Sound laut

Hängt nicht direkt mit Stummschalten zusammen aber ich höre öfter, dass manche diese System-Funktion noch nicht kennen:
Windows ermöglicht über einen Lautstärkemixer, die Lautstärke einzelner Programme getrennt voneinander zu verstellen:
chrome-audiowiedergabe-blocken-windows-mixer
Ihr findet diesen z.B. bei Windows 10 über das Kontextmenü eures System-Lautstärke-Icons -> „Lautstärkemixer öffnen“. Hier könnt ihr zum Beispiel Chrome insgesamt etwas leiser schrauben, Systemsounds runter, das Softphone aber auf Maximum. Das kann in manchen Situationen sehr hilfreich sein.

Skript als Admin via Kontextmenü

Powershell Skripte haben in der Handhabung einen kleinen Nachteil gegenüber Batch-Skripten: Sie lassen sich nicht einfach über das (Rechtsklick-)Kontextmenü als Administrator starten.
powershell-skripte-run-as-admin-standard-before

Kontextmenüeintrag für ein bestimmtes Skript

Erstellt von der Skriptdatei eine Verknüpfung via Rechtsklick -> Senden an -> Desktop und öffnet die Eigenschaften dieser Verknüpfung. Unter Ziel wird der Pfad zur .ps1 Datei angegeben. Verändert das Ziel folgendermaßen:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -NoExit "[Pfad]"

Optional kann über „Anderes Symbol…“ -> C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -> das Powershell-Icon mit UAC-Icon eingestellt werden. Somit ist die Verknüpfung visuell als eine Admin-fähige Verküpfung gekennzeichnet:
powershell-skripte-run-as-admin-shortcut-after-context-menu

Kontextmenüeintrag für jedes Skript

Noch besser: Der Kontextmenü-Eintrag „Als Administrator ausführen“ bei jeder Powershell-Datei, ohne Verknüpfung. Hierzu müssen in der Registry Änderungen gemacht werden, die sich am einfachsten über Batch Skripte ausführen lassen:

Kontextmenüeintrag hinzufügen:

:: Add value for UAC shield icon:
REG ADD "HKCR\Microsoft.PowerShellScript.1\Shell\runas" /v HasLUAShield /t REG_SZ /d "" /f
:: Add value to create context menu item:
REG ADD "HKCR\Microsoft.PowerShellScript.1\Shell\runas\command" /ve /t REG_EXPAND_SZ /d "\"%%SYSTEMROOT%%\System32\WindowsPowerShell\v1.0\powershell.exe\" -executionpolicy bypass -nologo -file \"%%1\"" /f

(Hinweise: Der Code MUSS mit Adminrechten in der CMD ausgeführt werden – entweder von Hand oder in einem .bat Skript zwischenlagern.)
powershell-skripte-run-as-admin-regedit-batch-commands
powershell-skripte-run-as-admin-regedit-after-context-menu

Kontextmenüeintrag wieder entfernen:

REG DELETE "HKCR\Microsoft.PowerShellScript.1\Shell\runas" /f

via

Cerberus auf Xiaomi Geräten

Cerberus (Play Store) ist seit jeher mein Favorit unter den Anti-Diebstahl-Apps! Damals war es noch ein Einmalkauf der App, mittlerweile kostet die App leider einen jährlichen Abo-Preis, der aber für den Nutzen und den Funktionsumfang mehr als gerecht ist.

Cerberus Anti-Diebstahl
Cerberus Anti-Diebstahl
Entwickler: LSDroid
Preis: Kostenlos+

Durch den Smartphone-Herstellerwechsel vom HTC zum fernöstlichen Xiaomi, musste der optimale Betriebszustand von Cerberus durch verschiedenste Systemeinstellungen erst wiederhergestellt werden.
Diese Einstellungen unter Xiaomi based Android 6 + MIUI Global/Stable 8.2 möchte ich hier kurz zusammenfassen:

Xiaomi Einstellungen für Cerberus optimieren

Einstellungen -> [Sektion System & Gerät] Benachrichtigungen & Statusleiste -> App Benachrichtigungen -> Cerberus -> Priorität „aktivieren“
Einstellungen -> [Sektion System & Gerät] Akku & Leistung -> Energie -> App-Energiesparmodus -> Cerberus -> Keine Beschränkungen und dann weiter unten Ortungsdienste Zulassen
Einstellungen -> [App-Einstellungen] Zugriffssteuerung -> Autostart -> Cerberus „aktivieren“
Einstellungen -> [App-Einstellungen] Zugriffssteuerung -> Weitere Berechtigungen -> Cerberus -> Alles aktivieren

Systemweite Einstellungen optimieren

Diese Einstellungen betreffen nicht nur Cerberus, sondern wirken sich systemweit aus. Ich rate dazu, diese Einstellungen erst zu ändern, wenn die anderen Einstellungen nicht den gewünschten Effekt erzielt haben.
Einstellungen -> [Sektion System & Gerät] Akku & Leistung -> Akkuverbrauch verwalten -> [Energiesparmodus] Aus
Einstellungen -> [Sektion System & Gerät] Zusätzliche Einstellungen -> Entwickleroptionen -> (weit unten) Speicheroptimierung -> Aus

Nach einem Neustart sollte Cerberus nun ausreichend im System verankert sein. Prüft noch einmal die Cerberus In-App-Einstellungen und dann sollte das Gerät jederzeit über das Webinterface erreichbar sein:
cerberus-xiaomi-redmi-note-webinterface-online-connected

Noch einen Hinweis zu SMS-Commands, falls das gestohlene Smartphone ohne Internet, aber mit Mobilfunk läuft. Die Formatierung des Textes hat mich anfangs gut verwirrt. Das Format ist:
[SMS-Code (in der App eingestellt)] [Dein Cerberus-Accountpasswort] [Befehl] [Optionen]
Beispiel:
inappcerberus mycerbpassword alarm Testalarm

Ebenso wie die Websteuerung werden dann auch die SMS-Commands auf dem Xiaomi erfolgreich ausgeführt.