different minds about different platforms

a blog of Dirk Eisenberg (>)

  Home  |   Contact  |   Syndication    |   Login
  47 Posts | 4 Stories | 7 Comments | 17 Trackbacks

News

Ich hoffe das jeder Besucher in diesem Blog das ein oder andere interessante Thema findet. Als Autor der Beiträge freue ich mich besonders über Feedback in Form von Kommentaren oder auch persönlicher als E-Mail. Dankbar nehme ich Anregungen und Korrekturen von fehlerhaften Inhalten entgegen.

Article Categories

Archives

Post Categories

Image Galleries

Blogs

Links

Wednesday, August 26, 2009 #

Etwas hin und her mit meinem System und nun ist es soweit. Ich habe mich entschlossen meinen Blog auf eine WordPress-Basierende Plattform umzustellen. Jeder Leser, Kommentar und jede Kritik ist willkommen aber in Zukunft auf:

http://www.dirk-eisenberg.de/

Dank gebührt den Betreiber von geekswithblogs.net für die tolle Engine die ich kostenfrei nutzen durfte.

Sunday, August 09, 2009 #

Für verschiedene Experimente brauchte ich die Möglichkeit mit v6 einen Debian Server auszurollen. Die Anforderungen waren wie folgt:

- Es soll für die SW Installation der debian eigene Paket-Manager apt verwendet werden.
- Für das unbeaufsichtigte Ausführung der Setups soll preseed zum Einsatz kommen

Die Posts werden sich rund um diese Anforderung drehen und folgende Themen erläutern

Teil 1: Basis OS Image + Change Root environment
Teil 2: Installation von Software via apt und preseed
Teil 3: Einen Debian Server in das Active Directory aufnehmen

Teil 1:

Die Überlegung eine Basis Image eines Debian-System auszurollen und die Software Installation dann via change root (chroot) Umgebung zu realisieren liegt dem ganzen System zu grunde.

Schritt 1: Ganz zu Beginn muss neben der v6 Installation die hier nicht beschrieben werden soll, manuell ein Basis Debian System installiert werden. Hierzu startet man am besten vom Visitenkarten-Image und wählt beim TaskSel alle Rollen bis auf das Basis-System ab. In meinem Fall wird davon ausgegangen das die gesamte Netzwerk-Konfiguration via DHCP erledigt wird. Ausgenommen hiervor ist lediglich der Hostname, welcher später im Rahmen der Nachkonfiguration gesetzt wird.

Schritt 2: Ist die Installation durchgeführt, kann diese um den ein oder anderen Aspekt bereinigt werden. Hierbei ist durchaus ein Blick in das Verzeichnis /etc/udev/rules.d zu werden und auszuschließen das beim nächsten System die Netzwerkkarte nicht zu eth1 wird. Im zuge dieser Arbeiten kann auch das Root-Passwort auf einen zufälligen Wert gesetzt werden. Die ein oder andere Software darf je nach Anwendungsfall hier schon mitinstalliert werden, bei mir ist das der SSH-Server um im Fehlerfall remote das halbfertige System warten zu können.

Schritt 3: Das fertig anonymisierte System wird herunter gefahren und der Computer wenn nicht schon via AutoInsert passiert in v6 angelegt. Danach kann auf diesem PC direkt eine Policy "TrueImage Capture" erstellt werden. Hierdurch wird das Plattenimage gespeichert und kann später wieder verwendet werden.

Schritt 4: Zur proben sollte das eben erzeugt Acronis-Image einmal auf einen anderen PC zurück gespielt werden. Klappt das auch kann man direkt zum nächsten Schritt übergehen.

Schritt 5: Um jetzt Software auf das System zu bringen bleibt nur dsa BootEnvironment in Ermangelung eines aktiven Linux-Clients. Da das ganze mit dem Debian-Installer apt passieren soll, brauchen wir eine chroot-Umgebung. Hierzu wird also folgendes PreOsAction-Package erzeugt:

# Init
echo "Starting the post processing in our change root environment"

# mount the os partition
mount /dev/sda1 /mnt

# download the postprocessing file
echo "  downloading config..."
wget http://YOURMPSERVER:8080/pscript/global.sh
wget http://YOURMPSERVER:8080/pscript/%OSD.COmputerName%.sh

# move it to the right pos
mv global.sh /mnt/global.sh
mv %OSD.COmputerName%.sh /mnt/current.sh

# adjust the execution rights
chmod 700 /mnt/global.sh
chmod 700 /mnt/%OSD.COmputerName%.sh

# set the environment
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/sbin
export PATH

OSDComputerName=%OSD.COmputerName%
export OSDComputerName

# perform the chroot command
echo "  performing actions..."
chroot /mnt /global.sh

# after this we will umount everything
echo "  cleaning environment"
rm -f /global.sh
rm -f /current.sh

umount /mnt

Wie man unschwer erkennen kann, passieren 3 Dinge. Es wird eine Datei herunter geladen, die Änderungen für alle Clients durchführt, es wird eine spezifische Dateien für den Client herunter geladen um pro PC ein anderes Set von Software installieren zu können. Das ganze wird dann noch so aufbereitet das die Dateien auch in der chroot-Umgebung ausgeführt werden.

An diesem Punkt ist man in der Lage alles mit dem Debian-System zu machen worauf man Lust hat. Das komplette enteo Paket als auch die beiden Shell-Scripte findet man hier zum Download.

Bei Fragen und Anregungen einfach einen Kommentar hinterlassen.

Wednesday, June 24, 2009 #

Im Rahmen meiner verschiedenen Kundenbesuche werde ich ab und an mit einer sich wiederholenden Frage konfrontiert: Wie kann ich einen sauberen Compliance-Bar erzeugen wenn ich die Software über verschiedene Gruppen zuweisen muss?

Der scheinbar offensichtlichste Weg ober ein Policy-Objekt je Gruppe (eine Zuweisung pro Gruppe) führt hier nicht zum Ziel. Viel einfacher lässt sich das Thema via Multi-Target-Policy-Objekte erreichen. Hierbei handelt es sich um normale enteo v6 Policy-Objekte die aber nicht ein spezifisches Ziel haben (OU, Gruppe oder Computer) sondern eine Liste von Zielen. Dies kann erreich werden, in dem der Eigenschaften-Dialog einer Policy via Kontext-Menu aufgerufen wird. Hinter dem Reiter "Ziele" verbirgt sich die Liste aller Ziele.

Leider ist diese leistungsfähige Feature nicht so sehr bekannt wie es sein sollte. Als Hintergrund hierzu sollte man wissen das enteo v6 nur Multi-Target-Policy-Objekte kennt und der Sonderfall eine Policy mit nur einem Target ist. Die Policy auf nur ein Target hat eben nur ein Element in seiner Target-Liste und kenn jederzeit um weitere Elemente wie oben beschrieben erweitert werden.

Einen Pferdefuß gibt es natürlich auch hier und diese möchte ich nicht verheimlichen: Installations-Parameter können nur an Policy und Policy-Instance verändert werden und somit nicht per Target spezifisch konfiguriert werden. Kommt diese Anforderung hinzu, muss wieder der Weg über mehrere Policy-Objekte gewählt werden oder die Parameter werden an jeder einzelnen Policy-Instance spezifisch konfiguriert.

Neben den v6 Artikeln in meinem Blog habe ich mir vorgenommen ab und an in twitter kleine Status-Meldungen zu unserem Produkt abzugeben. Wer spass daran hat einfach unter http://www.twitter.com/deisenbe !

Saturday, June 20, 2009 #

Ich habe mich heute entschlossen nach und nach meine privaten v6 Pakete, die ich so gebaut habe und bauen werden frei zur Verfügung zu stellen. Jeder der also interesse an ein paar enteo scripts hat, kann diese inklusive einer Beschreibung wie die entsprechenden Original-Sources zu intergrieren sind hier abrufen:

http://www.dirk-eisenberg.de/DEI/Projects.html

Rückmeldungen zu Problemen oder Fehlern sowie andere Kritik und Anregungen sind herzlich willkommen.

Tuesday, April 21, 2009 #

Jeder der via PGP seine Mails einfach unter einem MAC signieren und verschlüssel will, sollte sich folgenden Artikel anschauen: http://blog.dirkeinecke.de/2008/01/apple-mail-und-pgp.html

Saturday, January 03, 2009 #

Wer schon immer mal eine sehr schön aufbereitete Antwort auf die Frage was ist MAC OS bekommen wollte, sollten diesem Link folgene >>hier<<. Amit Singh der Autor von MAC OS X Internals hat auf seiner Website sehr schon die historie sowie viele technische Details zu diesem Betriebssystem zusammengestellt. Viel Spass beim Lesen.

Friday, December 19, 2008 #

Mit .NET 2.0 wurde der namespace System.Security.Principal um ein paar Klassen zur Verwaltung von Accounts erweitert. Hierbei handelt es sich um die gute alte Abstraktion von LookupAccountSid und LookupAccountName. Diese Funktionen finden sich in den neuen Klassen NTAccount und SecurityIndentifier wieder. Beide Klassen basieren auf einer Basis-Klasse mit dem Namen IdentityReference. Folgendes Beispiel zeigt wie man aus einem User-Account die entsprechende SID erzeugt. Diese Vorgang ist natürlich auch umgedreht möglich:

NTAccount user = new NTAccount("Administrator");
SecurityIdentifie sid = null;
if ( user.IsValidTargetType(typeof(SecurityIdentifier)))
  sid = (SecurityIdentifier)user.Translate(typeof(SecurityIdentifier));


Saturday, November 01, 2008 #

Daheim auf dem Sofa sitzend habe ich mich eben geärgert das wegen meiner unschönen Netzwerkkonfiguration ich nach jeder OSD Installation den DNS Server auf meinen DC umbiegen muss. Das warum soll hierbei mal keine Rolle spielen. Wenn man also so einen v6 Server sein eigen nennt kann man diesen Schritt ja auch gleich automatisieren.

Folgendes wollte ich mit meinem Script erreichen:

1. Es ist überall einsetzbar und auf jede Netzwerkverbindung anwendbar
2. Tritt ein Fehler auf weil netsh.exe Probleme hat die Einstellungen zu setzen soll die Policyinstanz auf rot gehen
3. Der aufgetretene Fehler soll im LastComment-Feld der Policyinstanz sichtbar sein

Um 1. zu realisieren kommen in enteo v6 nur Installationsparameter in Frage. Daher nutze ich einen Parameter in dem der Name der entsprechenden Netzwerkverbindung steht und einen zweiten in dem die neue DNS-Server-Adresse steht. Diese beiden Installationsparameter müssen bei Zuweisung änderbar markiert werden da man sonst je jedesmal das Paket anfassen muss wenn man einen neuen Wert vergeben möchte.

Um 2. zu realisieren kommt der ab enteo v6.2 zur Verfügung gestellte Befehl ExecuteEx in Betracht. Mit diesem Kommando kann der Rückgabe-Wert eines Prozesses in eine eScript Variable geschrieben werden. Hat man mal den Rückgabewert in einer Variable kann mit Hilfe der "If" Struktur und dem ebenfalls neuen Kommando ExitProcEx die Installation als "failed" markiert werden.

Um jetzt noch 3. realisieren zu können, kann dem Kommand ExitProcEx ein Kommentar mitgegeben werden. In diesem Kommentar wird die Fehlercode-Variable aufgelöst.

HIER findet sich das exportierte Paket für alle die es mal ausprobieren wollen. Das Beispiel hat nicht den Ansprach die besten Lösung für das Wechseln von DNS-Adresse zu sein. Es soll viel mehr zeigen wie man mit den in enteo v6.2 zur  Verfügung gesellten Mitteln den Compliance-Status seiner Policyinstanz beeinflussen kann. Viele externe Installer und Tools geben über diesen Mechanismus Fehlercodes zurück die ausgewertet können.

Sunday, July 27, 2008 #

Jeder der schonmal einen Kernel-Mode-Treiber unter Windows geschrieben hat, kam auch mit dem Problem in Berührung diesen zu Debuggen. Das üblich Modell hierfür ist die Verwendung eines Null-Modem-Kabels und einem zweiten Rechner als Debugger. Zum Glück gibt es VMWare und das ganze kann in zwei virtuellen Maschinen bewerkstelligt werden. Hierfür koppelt man die beiden VMs über einen seriellen Port mit dem Type "Named Pipe". Auch auf der MAC Version ist genau dieses Möglich wie ich nach langem Suchen herausgefunden habe. Den Original-Eintrag findet man hier.

Der Trick dabei ist eigentlich nur das die Oberfläche von VMWare Fusion die benötigten Einstellungen nicht her gibt. Trägt man das ganze in die .vmx-Datei selbst ein funktioniert es. Hier nochmal die Einstellungen:

Auf der Client-Seite:

serial0.present = "TRUE"
serial0.fileType = "pipe"
serial0.pipe.endPoint = "client"
serial0.yieldOnMsrRead = "TRUE"
serial0.startConnected = "TRUE"
serial0.fileName = "/Volumes/Virtual Machines/VMware/Serial/devbox_com1"

und auf der Server-Seite:

serial0.present = "TRUE"
serial0.fileType = "pipe"
serial0.yieldOnMsrRead = "TRUE"
serial0.startConnected = "TRUE"
serial0.fileName = "/Volumes/Virtual Machines/VMware/Serial/devbox_com1"

Sunday, July 20, 2008 #

Schon ganz ungeduldig habe ich den Blog des iphone Dev Teams beobachtet und auf das Release von pwnage 2.0 gewartet. Dieses Tool soll in der Lage sein bei meinem iPhone 2G den jailbreak und unlock durchzuführen. Um die Spannung zu nehmen, es hat geklappt und für alle die keinen MAC daheim haben, gibt es einen Möglichkeit den unlock auch durchzuführen.

Ein kurz Anleitung wie der Prozess durchzuführen ist findet man hier. Im weiteren Verlauf der Kommentare finden sich auch Links zu den Bootloader. Ich wollte eigenlich nur eine Hürde beschreiben. Wie bekommt man sein iPhone in den DFU mode?

1. iPhone über USB andocken
2. iPhone über die Tastekombination Power + Home ausschalten (ca 7s)
3. Power + Home Taste ca zwei weitere Sekunden gedrückt halten
4. Danach die Power-Taste loslassen und Home gedrückt halten bis iTunes das Geräte im Recovery erkennt. Der Monitor des iPhones muss schwarz sein.

Danach befindet sich das iPhone im DFU Mode und kann beliebige Images verdauen. Um ein Image (wie das von pwnage erzeugte) einzuspielen, einfach die alt-Taste (auf MAC) oder die CTRL-Taste gedrückt halten und dann auf Restore in iTunes drücken. Jetzt kann ein beliebiges .ipsw ausgewählt werden. So können auch Windows nutzer ihr iPhone unlocken wenn sie ein passendes .ipsw haben.

 

Monday, April 21, 2008 #

Einige Abende haben mich nun die icht mehr ganz so neuen Virtual Shadow Copy Services beschäftigt. Für alle die genauso wie ich eine Shadow Copy einer Partition anlegen wolle um mit ihrer Platte irgendetwas in einem stabilien Zustand zu bewerkstelligen sollte dieser Code hilfreich sein. Das Ziel des hier abgebildeten Codes soll es sein eine Virtual Shadow Copy einer Partition zu erzeugen und mit Hilfe von Win32-Apis auf diese zuzugreifen. Der Code beinhaltet natürlich viel zu wenig Error-Handling und achtet auch nicht auf die korrekte Freigabe von Resourcen. Nun aber los:

CoInitializeEx( NULL, 0 );
Zuerst muss COM initialisiert wert, dazu muss man wohl nichts mehr sagen.

IVssBackupComponents* pBackupComponents = NULL;
if ( FAILED( CreateVssBackupComponents( &pBackupComponents
) ) )
  return
1;
Um überhaupt mit dem VSS-Api arbeiten zu können wird ein Pointer auf ads BackupComponents-Interface benötigt. Dieses Objekte stellt dann Methoden zur Verfügung um VSS zur Arbeit zu überreden. Wichtig bei allen folgenden Methoden-Aufrufen ist die Reihenfolge. Hier legt Microsoft genaue Abläufe fest die umbedingt eingehalten werden müssen. Wer sich nicht daran hält wird mit Error-Codes bestraft (ich habs probiert).

hr = pBackupComponents->InitializeForBackup( NULL );
Nachdem wir Zugriff auf das BackupComponents-Objekt erhalten haben, ist die erste Amtshandlung dem System zu sagen wir wollen ein Backup machen. Hierzu muss die Methode InitializeForBackup aufgerufen werden. Erst hierdurch können die nachfolgenden Methoden aufgerufen werden.

hr = pBackupComponents->SetContext( VSS_CTX_BACKUP );
Dem System ist im dritten Schritt zu sagen welche Art von Backup und damit welche Art von Snapshot erzeugt werden soll. Hier gibt es verschiedene Möglichkeit, grundsätzlich sind aber zwei zu Unterscheide. Eine Variante bezieht die sogenannten Writer mit ein und die andere eben nicht. Writer stellen Userland-Applikation dar die auf bestimmte Aktionen des VSS-Systems reagieren und vor einem Backup bestimmte Aktionen zu beenden. Datenbanken würden alle wichtigen Informationen noch auf die Platte schreiben damit die Datenbank auch in einem brauchbaren Zustand ist. Hat man Softare die keinen VSS-Support bietet, muss wohl der Weg über Stop-Service und Start-Service eben dieser gegangen werden. Erst danach ist es ratsam eine Shadow-Copy zu erzeugen. Wie man Writer schreibt werde ich einem anderen Eintrag versuchen darzustellen.

IVssAsync* pWriteMetaData = NULL;
hr = pBackupComponents->GatherWriterMetadata( &pWriteMetaData
);
pWriteMetaData->Wait
();
pWriteMetaData->Release
();
Da wir Writer-Aktionen in unser Backup einbeziehen, müssen auch die Meta-Daten über diese abgefragt werden. Hierdurch erlangt das System genau Informationen welche Writer wie und wann benachrichtigt werden müssen. Diese Aktion kann durchaus etwas länger dauer. Aus diesem Grund wird hierfür eine Pointer für assynchrone Operationen zurückgegeben mit dessen Hilf das Ende abgewartet werden kann.

VSS_ID snapshotSetId;
hr = pBackupComponents->StartSnapshotSet( &snapshotSetId
);
VSS sieht die Sicherung des geamten Storage-Systems zu einem Zeitpunkt vor, daher reden wir nicht von einem Snapshot eines spezifischen Volumes sondern eine SnapShot-Set der eine Liste von einzubeziehenden Volumes verwaltet. Dadurch ist es Möglich z.B. die Partition für mdf und ldf in einem Snapshot-Set zu fixieren und später einfach zu sichern.

VSS_ID SnapShotId;
hr = pBackupComponents->AddToSnapshotSet( L"F:\\", GUID_NULL, &SnapShotId
);
Haben wir den Container, das SnapShot-Set angelegt, müssen jetzt noch die einzelnen Targets hinzugefügt werden. Die einfachste Methode ist es via Laufwerksbuchstaben eine ganze Partition hinzuzufügren. Dieser Vorgang kann mehrfach für andere Volumes wiederholt werden.

hr = pBackupComponents->SetBackupState( false, false, VSS_BT_FULL );
Da auch inkrementielle Backups vorgesehen sind, ist noch die Art und Weise des Backups zu definieren. In diesem Beispiel wollen wir ein Full-Backup aller Dateien machen. Es gibt auch die Möglichkeit Dateien einzuschränken.

IVssAsync* pPrepare = NULL;
hr = pBackupComponents->PrepareForBackup( &pPrepare
);
pPrepare->Wait
();
pPrepare->Release
();
Jetzt nähern wir uns dem Punkt der Wahrheit, dem VSS-System wird mitgeteilt das sich alle Writer und Provider auf das Backup vorbereiten müssen. Kurz darauf folgt dann die eigentlich Erzeugung des Snapshots.

IVssAsync* pDoShadowCopy = NULL;
hr = pBackupComponents->DoSnapshotSet( &pDoShadowCopy
);
pDoShadowCopy->Wait
();
pDoShadowCopy->Release
();
Mit der Methode DoSnapshotSet wird dann für jede Komponente des Sets ein SnapShot erzeugt. Hierbei sorgt das Betriebssystem für die Konsistenz der Daten.

VSS_SNAPSHOT_PROP props;
hr = pBackupComponents->GetSnapshotProperties( SnapShotId, &props
);
Nun fehlt nur noch die Information für den Zugriff via Win32-Api. Hierfür stellt die abgerufene Struktur eine Device-Pfad zur Verfügung auf den vie CreateFile und anderen IO-Operation zugegriffen werden kann.

pBackupComponents->Release();
Nur noch das Interface release und fertig.

Hinweis: In diesem Beispiel wurde ein temporärer Snapshot angelegt, d.h. wenn dieser nicht mehr benötigt wird, verschwindet dieser. Auch ein Restart des VSS-Service lässt den Snapshot verschiedenen. Will man persistente Snapshots, müssen die Flags entsprechend umkonfiguriert werden.

Mit dem Tool dosdev lassen sich so erzeugte Snapshots auch mounten und einem Laufwerksbuchstaben zuordnen. Mehr Informationen hierzu gibt es auf folgenden Seiten: 

Ich werde in den nächsten Artikeln versuchen Schritt für Schritt andere Funktionen auf C++-Ebene zu beschreiben. Hierbei werden Themen wie das Schreiben von VSS-Writern und VDS-Hardware-Providern adressiert. 


Saturday, April 19, 2008 #

Ich bekommen immer mal wieder anfragen wie man von einem enteo v6 Objekt wie dem Computer Parameter auslesen kann und diese im Skript verwendet werden. Vor einiger Zeit habe ich dazu mal einen Artikel im enteo-Forum gepostet. Dieser beschreibt nicht nur wie man die Properties ausliest, sondern wie mit Hilfe eines enteo Scripts verschiedene Werte gesetzt werden können.

>> Viel Spass mit dem Artikel <<


Sunday, April 06, 2008 #

Im ersten Teil der enteo Reihe möchte ich ein Feature genau beschreiben was hier und da vielleicht in Vergessenheit geraten ist. Die Möglichkeit Befehle in der enteo Script-Sprache zu klassifizieren gibt es schon sehr lange. Ich glaube die Funktion wurde mit dem NT-Support in das Produkt aufgenommen. Wozu braucht man das aber nun und wie funktioniert es:

Wozu:

Oftmals darf der angemeldete Benutzer nicht viel am System verändern aber das Logon-Verhalten des Benutzer steuert eigentlich indirekt die Installation. Daher gibt es die Möglichkeit Aufgaben an einen Dienst zu delegieren und somit Änderungen die administrative Rechte benötigen durchzuführen.

Wie:

(Fast) Jeder Befehl lässt sich im Scrip-Editor klassifizieren. Hierfür stehen folgende Möglichkeiten zur Verfügung:

  • immer ausführen
  • maschinenbezogen
  • maschinenbezogen per Service
  • userbezigen
  • userbezigen per Service
Für die Bewertung wann welche Klassifizierung verwendet wird, ist wichtig die Trennung zwischen Benutzerteil und Maschinenteil zu verstehen. Jedes enteo Script besteht immer aus einem Benutzer und Maschinenteil, egal ob man das sieht oder nicht. Bei der Installation des Paketes muss jetzt entschieden werde, welche Befehle ausgeführt werden müssen. Es gibt die Möglichkeit das Befehle im Rahmen des Maschinenteils oder im Rahmen des Benutzerteils ausgeführt werden. Diese Entscheidung muss entweder der Service-Installer oder der Auto-Installer, wobei der Service-Installer nur die Maschinenteile installieren kann und keine Benutzerteile da es ja keinen angemeldetet Benutzer gibt. Also wann wird nun was ausgeführt:

immer ausführen:
  • wird durch den ServiceInstaller oder den AutoInstaller ausgeführt
  • wird während der Installation des Benutzerteils als auch des Maschinenteils ausgeführt
  • wird im Kontext des jeweiligen Installers ausgeführt
maschinenbezogen:
  • wird durch den ServiceInstaller oder den AutoInstaller ausgeführt
  • wird nur während der Installation des Maschineteils ausgeführt
  • wird im Kontext des jeweiligen Installers ausgeführt
maschinenbezogen per Service:
  • wird durch den ServiceInstaller oder den AutoInstaller ausgeführt
  • wird nur während der Installation des Maschinenteils ausgeführt
  • wird im Kontext des Services ausgeführt
userbezogen:
  • wird nur durch den AutoInstaller ausgeführt
  • wird nur währned der Installation des Benutzerteils ausgeführt
  • wird im Kontext des AutoInstallers ausgeführt
userbezogen per Service:
  • wird nur durch den AutoInstaller ausgeführt
  • wird nur währned der Installation des Benutzerteils ausgeführt
  • wird im Kontext des Service ausgeführt

Das folgende Beispiel soll das Verhalten verdeutlichen. Ein skript bestehend aus:

MsgBox("Immer ausführen")
MsgBox("Workstationbezogen")
MsgBox("Userbezogen")

wird wie folgt ausgeführt wenn es nocht nicht installiert ist:

Der Benutzer meldet sich an alos muss der Maschinen und der Benutzerteil installiert werden. Es ist ja noch nichts auf dem Client ausgeführt wurden. Es erscheinen also alle 3 Message-Boxen auf dem Bildschirm des Benutzers.

Nach dieser Installation würde sich Benutzer 2 anmelden:

Der Benutzer meldet sich an, wobei jetzt nur noch der Benutzerteil des neuen Benutzers installiert werden muss. Der Maschinenteil ist ja schon auf dem System. Also erscheinen 2 Message-Box auf dem Desktop des Benutzers (MsgBox("Immer ausführen") und MsgBox("Userbezogen")).

Mit diesem Wissen kann man jetzt mal die Wirkung RegLoad-Befehl erforschen, insbesondere wenn dieser auf "Immer ausführen" steht und sowohl Teile in HKEY_CURRENT_USER als auch HKEY_CURRENT_MACHINE verändert. Fragen dazu dürfen gerne als Kommentar gestellt werden.


Ich habe lange überlegt ob ich in diesem Block auch die Produkte meines Arbeitgebers einbeziehen soll und habe mich diese Woche dafür entschieden. Dabei geht es nicht um Werbung für die enteo Produktlinie sondern um interessante Funktionen die dem ein oder anderem Admin das Leben erleichtern werden. Ich werde in unregelmäßigen Abständen interessante Thema aus der enteo Produktfamilie herausgreifen und hoffentlich wertvolle Tips geben. Das ersetzt aber nicht die Schulung, den Support und das enteo Support-Forum.