Edit Comment
IT-Stuff, Tutorials, Software, Internet, Unterhaltung Willkommen auf IMA

Archive for the ‘Programmierung’ Category

Die Offlinedateien von Windows 7 werden ebenso selten genutzt wie sie das Netzwerk belasten können, wenn sie aktiviert sind.

Manuell kann man die Funktion folgendermaßen deaktivieren:
Start -> “Offlinedateien verwalten” suchen -> Offlinedateien deaktivieren
oder
Start -> Systemsteuerung -> Synchronisierungscenter -> Offlinedateien verwalten (links im Menü unten) -> deaktivieren

disable windows 7 offlinefiles sync offlinedateien 460x245 Windows Offline Dateien deaktivieren per Skript im AD

Im Unternehmen kann es durchaus sinnvoll sein, die Offlinedateien per Gruppenrichtlinie oder per Skript zu deaktivieren.
Und für die Verteilung im Windows AD Netzwerk habe ich natürlich wieder ein Skript vorbereitet:

@echo off & Color 9f & setlocal

set log=\\server\pfad\disable-offline-files.log
set preconfig=99

sc stop CscService
sc config CscService start= DISABLED

:check
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\CSC" /v Start^|findstr "Start"') do set preconfig=%%c
echo %date% %time:~0,8% - %computername% Offline-Files: %preconfig% >> %log%
if "%preconfig%"=="0x1" goto disable
goto end

:disable
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\CSC" /v Start /t REG_DWORD /d 4 /f
echo %date% %time:~0,8% - %computername% Offline-Files deaktiviert, errorlevel %errorlevel% >> %log%

:end
endlocal
pause

Auszug aus der Logdatei:
disable windows 7 offlinefiles sync offlinedateien log 460x109 Windows Offline Dateien deaktivieren per Skript im AD


tech struktur2 140x135 Mongoose Verbindung zur MongoDB Datenbank mit auth ParameterIn einem aktuellen Webprojekt verwende ich MongoDB als Datenbank und die Node Erweiterung mongoose als Aufsatz. mongoose ist für alle Entwickler, die bisher pur auf der MongoDB arbeiten, definitiv einen Blick wert.
Anfangs wurde lokal auf dem PC programmiert, mittlerweile beginnen wir den Umstieg auf einen Webhoster. Dabei ergab sich ein Problem, dass ich kurz erläutern möchte.

Die Mongoose Verbindung zur Datenbank erfolgt anhand eines Connection Strings, der bei einer Standardinstallation aller Komponenten sehr einfach aussehen kann:

var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/proorg-test");

Dieser String verwendet localhost als Server, den Standardport von MongoDB 27017, die Datenbank “proorg-test” und keine Authentifizierung. Das reicht für den Anfang und funktioniert gut.

Nach dem Umstieg auf einen (shared) Webserver trifft man jedoch meistens eine andere MongoDB Installation an. Oftmals wird diese mit dem Parameter –auth eine Authentifizierung erfordern, einen anderen Port nutzen und vielleicht auch einen anderen Server verwenden.
Neben den zusätzlichen Angaben für Server, Port und User muss man Mongoose jetzt auch befehlen, sich explizit an der “Admin Tabelle” zu authentifizieren. Dies ist meisten die admin Tabelle, in der auch ein Admin Nutzer, dessen Daten im Connection String stehen, enthalten sein sollte.

var mongoose = require("mongoose");
mongoose.connect("mongodb://mongodb_admin:r0OtP4s$w0rd@localhost:20718/proganizer", {auth:{authdb:"admin"}});

Dieser String enthält jetzt den wichtigen Teil {auth:{authdb:”admin”}}, damit Mongoose sich mit dem mongodb_admin an der admin Tabelle authentifiziert.

Mehr dazu auch in den MongoDB Security Tutorials.

logo trans 2012 140x78 Mongoose Verbindung zur MongoDB Datenbank mit auth ParameterAn dieser Stelle auch big shoutouts an uberspace.de, der sympathische deutsche Webhoster mit “Preis-selber-wählen” Prinzip und einem riesigen Arsenal an vorinstallierten, vorkonfigurierten und bestens dokumentierten Server- und Entwickler-Tools. Ein kleiner Einblick: “SSH. Perl. PHP. Python. Ruby. node.js. Erlang. Lua. Compiler. FastCGI. MySQL. CouchDB. MongoDB. Cronjobs. HTTPS. IMAP. SMTP. Webmail. qmail. vmailmgr. maildrop. Spam­Assassin. ezmlm-idx. DSPAM. ~/service. runwhen. Eigene Logs. Backups. 10 GB Plattenplatz. Und das ist nur der Anfang.”

Mögliche Fehlermeldungen:
Dieser Fehler würde auftreten, wenn trotz –auth Parameter bei MongoDB der Standard Connection String benutzt würde:
assertion 16550 not authorized for query on proganizer.users ns:proganizer.users query:{ username: “SchurigH” }
Wenn man nur Benutzername und Passwort eingibt, ohne den auth Parameter von Mongoose einzustellen, also

mongoose.connect("mongodb://schurigh_mongoadmin:r0OtP4s$w0rd@localhost:20718/proganizer");

, dann kommt:
auth: couldn’t find user schurigh_mongoadmin@proganizer, proganizer.system.users
Und selbst wenn man jetzt in proganizer.system.users einen neuen Admin User erstellt – das ginge mit db.addUser({user:”proganizer_admin”, pwd: “*****”, roles: [ "readWrite", "dbAdmin" ]}); – würde das nicht funktionieren. Ohne {auth:{authdb:”admin”}} geht es nicht.


Registry Werte aus der Registry auslesen ist ein alter Hut, no problem. Auch ganze Pfade aus der Registry lesen stellt grundsätzlich kein Problem dar. Schwierig wird es jedoch, wenn der auszulesende Pfad Leerzeichen enthält. Und seit Windows Vista enthalten ja fast alle Pfade ein Leerzeichen: C:\Program Files\…

Dieser Post dient der Zusammenfassung der wichtigsten Batch Registry Abfragen.

Einfache Werte und Pfade ohne Leerzeichen

@echo on & Color 9f & setlocal
REM einfache Werte
set ff=0
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox" /v "CurrentVersion"^|findstr "CurrentVersion"') do set ff=%%c
echo %ff%

REM einfache Pfade
set spath=0
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Ghisler\Total Commander" /v "IniFileName"^|findstr "IniFileName"') do set spath=%%c
echo %spath%

Also eine festgelegte Anzahl an Tokens, Leerzeichen als Delimiter, der dritte Token ist der Registry Wert. Token 1 und 2 sind der Name des Registry Werts und der Wert-Typ.

Werte oder Pfade mit Leerzeichen

REM Werte mit Leerzeichen
set value=0
for /f "usebackq skip=2 tokens=1,2*" %%a in (`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\FileZilla Client" /v "Startmenu"`) do set value=%%c
echo %value%

REM Pfade mit mehreren Leerzeichen
set path1=0
set path2=0
REM Möglichkeit 1: mit Option usebackq, /ve (liest den (Standard) Wert aus)
for /f "usebackq skip=2 tokens=1,2*" %%a in (`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\FileZilla Client" /ve`) do set path1=%%c
echo %path1%
REM Möglichkeit 2: ohne Option usebackq
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\FileZilla Client" /ve') do set path2=%%b
echo %path2%

Für Werte oder Pfade mit Leerzeichen müssen 3 Dinge beachtet werden:
1. Die Delimiter entfallen.
2. Tokens empfangen mit * mehrere durch Leerzeichen getrennte Werte und packen sie in den letzten Token zusammen; den wir dann abfragen.
3. Bei der Methode 1 mit usebackq müsst ihr unbedingt auf die Anführungszeichen achten! Der komplette Inhalt in den Klammern wird mit einem “backquote”, also `, eingeschlossen. Das ` ist kein ” und kein ‘ und kein ´ usw, achtet darauf! Alle anderen Angaben kommen wie gewohnt in doppelte Anführungszeichen. Bei der Methode ohne usebackq kommt der Klammerinhalt in normale einfache Anführungszeichen ‘.

Das Ergebnis aller obrigen Code-Schnipsel:
registry werte mit batch auslesen mit leerzeichen usebackq Batch   Registry Werte mit und ohne Leerzeichen auslesen


Im Windows Netzwerk Schriftarten zu verteilen war komplexer als gedacht. Daher möchte ich mal oberflächlich die möglichen Verteilungsmethoden erläutern und meine Empfehlung geben.
Ziel ist die Verteilung (also Installation zur Verwendung) von Schriftarten in Windows Netzwerken über Gruppenrichtlinien.

Dafür gibt es verschiedene Methoden: Batch, GPO, VBS.

Batch

REM alle Schriftarten aus dem fonts Unterordner in den Fonts Systemordner kopieren
xcopy fonts\*.* "%windir%\Fonts\" /v /c /l /y /i
REM jede Schriftart einzeln in der Registry anmelden
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "OpenSans-Bold (True Type)" /t REG_SZ /d "OpenSans-Bold.ttf" /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "OpenSans-BoldItalic (True Type)" /t REG_SZ /d "OpenSans-BoldItalic.ttf" /f
...

Der Registry Befehl muss für jede gewünschte Schriftart ausgeführt werden.

GPO

Wie schon GPO Meister Heitbrink erklärt hat:
In der Gruppenrichtlinie unter Computerkonfiguration\Einstellungen\Windows-Einstellungen\Dateien folgende Einstellung für jede Schriftart erstellen:
schriftarten über das netzwerk verteilen mit batch gpo vbs register font file gpo Schriftarten im Netzwerk verteilen mit Batch, GPO, VBS
In der Quelle bitte den korrekten \\server\pfad\ angeben. Dadurch werden die Schriften in den Windows Ordner kopiert.

Nun noch in Computerkonfiguration\Einstellungen\Windows-Einstellungen\Registry folgende Einstellungen, ebenfalls einmal pro Schriftart:
schriftarten über das netzwerk verteilen mit batch gpo vbs copy font file gpo Schriftarten im Netzwerk verteilen mit Batch, GPO, VBS
Den Registry Pfad so übernehmen wie auf dem Bild, “Name” enthält den Anzeigenamen innerhalb von Programmen, bei der Fontdatei kein Pfad mehr davor packen, nur der Dateiname.

Nachteil

Beide Lösungen sind nicht sehr aufwändig, 2 Batch Befehle bzw. 2 GPO Einstellungen, simpel. Viel eher hat es den Nachteil, dass man bei einer größeren Menge an Schriftarten dann doch recht viel zu tun hat. 20 Schriftarten? Das bedeutet viel rumgetippe.
Besser ist in diesem Fall folgende Lösung:

VBS

Dieses VBS installiert alle Fontdateien, die sich im selben Ordner befinden.

' gebastelt mit Hilfe von:
' http://superuser.com/questions/201896/how-do-i-install-a-font-from-the-windows-command-prompt
' http://forum.chip.de/c-visual-basic-net/vbs-if-file-exists-then-starts-program-1550358.html

Set ofso = CreateObject("Scripting.FileSystemObject")
Set shell = CreateObject("WScript.Shell")
SourceFolder = ofso.GetParentFolderName(Wscript.ScriptFullName)

Const FONTS = &H14&

Set objShell  = CreateObject("Shell.Application")
Set oSource   = objShell.Namespace(SourceFolder)
Set oWinFonts = objShell.Namespace(FONTS)
sFontFolder   = shell.ExpandEnvironmentStrings("%windir%") & "\Fonts\"

' Lame VBscript needs 4 f*ing lines instead of "if (/\.ttf$/i) " ...
Set rxTTF = New RegExp
rxTTF.IgnoreCase = True
rxTTF.Pattern = "\.ttf$"

FOR EACH FontFile IN oSource.Items()
    IF rxTTF.Test(FontFile.Path) THEN
		IF NOT ofso.FileExists(sFontFolder & FontFile) THEN
			oWinFonts.CopyHere FontFile.Path
		END IF
    END IF
NEXT

Die Einbindung in das Netzwerk könnte direkt als Startscript erfolgen. Wenn man jedoch einen leichten Überblick haben möchte, welche Computer die Schriften schon installiert haben, empfiehlt sich dieses Script:

@echo on & color 9f & setlocal
set wd=\\server\Deployment\Sonstiges\fonts
set log=%wd%\fonts.log

echo %date% %time:~0,8% - %computername% startet die Fontinstallation >> %log%

start /wait "" cmd /c cscript //nologo "%wd%\fonts\install-all-fonts.vbs"

REM eine Schriftart als Test überprüfen
if exist "%windir%\fonts\OpenSans-SemiboldItalic.ttf" echo %date% %time:~0,8% - %computername% hat die Schriften installiert >> %log%

:end
endlocal

Das Script loggt Start und Ende der Schriftinstallation und prüft die erfolgreiche Installation mit 1 beliebigen Schriftart.

Ein Neustart muss aber auch bei dieser Methode sein.


Dieser Artikel soll nochmal als eine Kurzfassung meines kürzlich veröffentlichten Reader Deployment Guides, inklusive einer Anleitung für das Update der Verteilung auf Version 11.0.05, die kürzlich veröffentlicht wurde.

Die Schritte bleiben sehr ähnlich:

Schritt 1: Installer laden

Beachtet, dass das Update 11.0.04 als Grundlage braucht. Also holt euch 11.0.0, 11.0.04 und 11.0.05.
you know how…

Schritt 2: AIP lokal erstellen

msiexec /a AcroRead.msi
und einen lokalen Pfad angeben (z.B. “C:\Reader11.0.0mui”)

Schritt 3: Patchen

Erst 11.0.04 integrieren, dann 11.0.05:

X:\Software\Reader\installer>cd 11.0.04.63-mui
X:\Software\Reader\installer\11.0.04.63-mui>msiexec /a "C:\Reader11.0.0mui\AcroRead.msi" /p "AdbeRdrUpd11004_MUI.msp"
X:\Software\Reader\installer\11.0.04.63-mui>cd..
X:\Software\Reader\installer>cd 11.0.05-all
X:\Software\Reader\installer\11.0.05-all>msiexec /a "C:\Reader11.0.0mui\AcroRead.msi" /p "AdbeRdrSecUpd11005.msp"

adobe reader 11 0 05 update deployment install 460x163 Adobe Reader Deployment aktualisieren   Update (11.0.05) verteilen

Schritt 4: Customization Wizard

Mit dem Customization Wizard die .msi bearbeiten und speichern. Wenn dabei ein setup.ini Fehler kommt, einfach eine leere setup.ini im selben Ordner wie die Installation erstellen, der Wizard füllt die dann.
adobe reader 11 0 05 update deployment customization wizard 460x219 Adobe Reader Deployment aktualisieren   Update (11.0.05) verteilen

Schritt 5: MST Eigenschaften überprüfen

Wie schon im letzten Artikel erwähnt, kann es sein, dass trotz Customization Wizard Anpassung einige Einstellungen der MST nicht ganz stimmen und dadurch z.B. die Sprache nicht korrekt auf Deutsch gestellt wird.
Öffnet also die Installationsdatei .msi und ladet die angepasste .mst Datei mit Orca über Transform -> “Apply Transform” ein.
Überprüft in der Property Tabelle folgende Wertepaare:

Property alter Wert neuer Wert
ProductLanguage 1033 1031
ISLANGFLAG ENU DEU
ProductCode {AC76BA86-7AD7-FFFF-7B44-AB0000000001} {AC76BA86-7AD7-1031-7B44-AB0000000001}
AgreeToLicense No Yes
ENABLE_CACHE_FILES Yes No
EULA_ACCEPT No Yes
RebootYesNo Yes No

Schritt 6: Deployment

Nun könnt ihr dieses fertig geschnürte Paket in den deploy/[version] Ordner ablegen und das Verteilungsscript (siehe Deployment Artikel) anpassen, damit die neue Version verteilt wird. Dazu reicht es, die neue Version (muss dem Ordnernamen im deploy Ordner entsprechen) in Zeile 11 einzutragen.

Fertig!
Dieser Prozess, inklusive Tests auf einigen Rechnern, dauerte bei mir weniger als 30 Minuten. Ein Update ist also relativ schnell eingespielt.


Zufälliger Post des Tages

Translator

Categories

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