Prime Computer

prime-computers-mini-4-test-luefterlos-klein-stark-extern-3Auf meinem Tisch steht heute ein ganz besonderer PC!
Groß und schwer? Keinesfalls!
Lüfter und laut? Im Gegenteil!
Denn ich teste heute den PrimeMini4 – ein lüfterloser, nachhaltiger und superrobuster Mini PC mit Style.
Prime Computer ist der Hersteller dieses kleinen Technikmeisterwerks. Das 2013 gegründete Schweizer Unternehmen hat sich auf nachhaltige IT-Technik spezialisiert und bietet mittlerweile drei unterschiedliche Produkte an. Diese sind: Mini PCs in unterschiedlichen Versionen, einen Mini Server und einen Amplifier. Bis auf den Amp sind alle Produkte komplett anpassbar, was die interne Hardware angeht und somit sehr flexibel auf die benötigte Leistung anpassbar. Das Konzept klingt stimmig und passend in die aktuelle Zeit.

Weiterlesen

Linus Sebastian ist ein – und er freut sich bestimmt über dieses Lob – Vorzeige-Nerd der Extraklasse! In mehreren Youtube Kanälen vermittelt er technische Themen unterschiedlicher Art.

In Techquickie werden kurze IT-Erklärbär-Videos über Grundlagen-Wissen/-Begriffe oder Vergleiche von Technologien und Technik gepostet:

Mit Linus Tech Tips deckt er mit seiner Crew der Linus Media Group eine große Bandbreite verschiedenster technischer Themen ab, da findet jeder Nerd was zu Gucken:

Weiterlesen

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

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.
Wie kommt’s?

Weiterlesen