Softwareverteilung: Befehle für jeden Benutzer einmalig nach Login ausführen lassen - Aber richtig

Alle Fragen rund Antworten rund um die ACMP Client Commands und Container
Antworten
Benutzeravatar
ngottschalk
Beiträge: 293
Registriert: Mi Sep 08, 2010 12:57 pm

Wer kennt das nicht? Man möchte eine Software verteilen, was soweit auch problemlos klappt, jedoch möchte man den Benutzern auch noch weiteren Konfigurationsaufwand ersparen und direkt passende Voreinstellungen mitgeben, die aber im nutzereigenen Profil abgelegt werden.
Häufig stellt sich unseren Usern die Frage, wie solche Verteilungen mittels ACMP umgesetzt werden können. Der folgende kurze Artikel soll eine von Windows integrierte Funktion hierfür, das Active Setup, genauer beleuchten, sodass Ihnen die Umsetzung dieser Anforderung auf diesem Weg leicht fallen sollte.

Über das Active Setup
Das Active Setup ist ein windowseigener Mechanismus, der es bequem ermöglicht, Aktionen auf Clients einmal für jeden Benutzer auszuführen, der sich am Host anmeldet (Beispiel: Wenn man sich das erste Mal an einem System anmeldet, werden Einstellungen vorgenommen, wobei der Status in einem Fenster in der oberen, linken Ecke angezeigt wird; Hierbei handelt es sich bereits um das Active Setup). Dies ist in der Paketierung nötig, wenn man z.B. Dateien in Benutzerverzeichnisse kopieren muss (da sich nach der Ausführung des Commands Benutzer am System anmelden könnten, für die noch kein Profilordner erstellt wurde).

Funktionsweise
Hierfür wird beim Login des Benutzers die Registrierung des Users unter "HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components" analysiert und mit den Einträgen unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components" verglichen.
Sollten im HKLM-Zweig Einträge vorhanden sein, deren Schlüssel im HKCU-Zweig noch nicht bestehen oder deren Version höher als die des Eintrags unter HKCU ist, wird ein hinterlegter Befehl ausgeführt und eine Kopie des Schlüssels in den HKCU-Pfad übernommen, die anzeigt, dass der Befehl für diesen Benutzer in dieser Version bereits ausgeführt wurde. Möchte man also einen Active Setup Befehl erneut für Benutzer ausführen (z.B. nach einer Reparatur), kann man einfach den Eintrag unter HKCU löschen oder die Version des Eintrags unter HKLM erhöhen.

Umsetzung
Möchte man also einen solchen Mechanismus umsetzen, muss man folgendermaßen vorgehen:
Man legt einen beliebig benannten Schlüssel unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components" an (als Name bietet sich aufgrund der Einmaligkeit und leichten Zuordnung z.B. eine CC-GUID an)
Man legt unterhalb dieses Schlüssels 2 Werte an:
Version (Zeichenkette): Stellt die durch Kommata separierte Version dar, die beim Login verglichen wird (sofern ein gleicher Schlüssel unter HKCU bereits vorhanden ist)
StubPath (Zeichenkette): Gibt den Befehl an, der ausgeführt werden soll. Dieser muss sich entweder im %PATH% befinden oder mit dem kompletten Pfad angegeben werden. ACHTUNG: Bei Pfaden mit Leerzeichen immer den Befehl in Anführungszeichen setzen!
Man bearbeitet den Standardwert und hinterlegt den später bei der Durchführung anzuzeigenden (möglichst sprechenden) Namen.
Möchte man für einen ggf. gerade Angemeldeten Benutzer die Aktion direkt ausführen (damit Einstellungen o.Ä. direkt und nicht erst beim nächsten Login übernommen werden), muss der im StubPath angegebene Befehl impersoniert ausgeführt und die entsprechenden HKCU-Werte (ebenfalls impersoniert) geschrieben werden. Hierbei sollte in ACMP Client Commands die Option 'ignore error' aktiviert werden, da es zu einem Fehler kommt, sollte zur Ausführungszeit kein Benutzer angemeldet sein, da die Impersonierung scheitert.

Tipp
Werden manche Umgebungsvariablen des Systems bei der Ausführung nicht aufgelöst, sollte versucht werden, den Befehl mit einem vorangestelltem "cmd /c" aufzurufen, wodurch die gesamte Benutzerumgebung verfügbar sein sollte.
Möchte man Dateien für das Active Setup nutzen, bietet es sich an, diese im Installationsordner abzulegen oder (im Falle mehrerer Dateien) einen ganzen Unterordner für diese anzulegen.
Zudem sollten die unter viewtopic.php?f=77&t=2059 beschriebenen Unterschiede zwischen 64- und 32-Bit Umgebungen beachtet werden.

Nachbereitung
Sollte dieser Mechanismus genutzt werden, muss daran gedacht werden, dass bei einer Deinstallation der Eintrag unter HKLM wieder gelöscht werden sollte (damit keine Aktionen von Programmen ausgeführt werden, die ggf. bereits deinstalliert wurden) und die Einträge aus der Benutzerregistrierung entfernt werden sollten (damit die Aktionen nach einer erneuten Installation wieder ausgeführt werden).

Als Beispiel hängt ein kleines Client Command an, das für jeden Benutzer einmalig nach dem Login eine Commandshell mit dem Paramter "/K echo Hello, world!" aufruft (also "Hello world!" ausgibt und geöffnet bleibt), sollte ein Benutzer angemeldet sein, wird der Befehl für diesen auch direkt ausgeführt.
Dateianhänge
Active Setup Beispiel__{31BAAA0E-03F8-4EB5-99F9-B4239D7FF5A3}.sim
(7.12 KiB) 1506-mal heruntergeladen
Mit freundlichen Grüßen

Niklas Gottschalk (gottschalk@zoller-usa.com)
IT Systems Administrator
Zoller Inc.
koemi
Beiträge: 6
Registriert: Do Jul 10, 2014 4:33 pm

Hallo,

gibts dazu auch ein Beispiel für andere Client Commands? Ich würde gerne bei den Usern die Kontakte ausblenden lassen über ein Registry Wert und den User zum lokalen Admin machen. Haben sie dafür auch Beispiele?

Viele Grüße
Michael Köhler
Benutzeravatar
Falaffel
Beiträge: 158
Registriert: Do Feb 04, 2016 5:53 pm

Hallo zusammen,

ich habe auf folgender Seite unten in den Kommentaren gelesen, dass Windows 10 bei den Feature Updates ungefragt alle bestehenden Active Setup Einträge löscht. Könnt ihr das bestätigen bzw. revidieren. Wenn das stimmt, wie geht ihr damit um?

https://www.m-co.ch/registry-hexerei-pe ... er-setzen/
Mit freundlichen Grüßen

Robert-Daniel Steichele
r.steichele@gottlob-rommel.de
http://www.gottlob-rommel.de
Benutzeravatar
ngottschalk
Beiträge: 293
Registriert: Mi Sep 08, 2010 12:57 pm

Windows 10 Feature Upgrades zerschießen Software und das könnte mitunter einer der Gründe sein. In diesem Falle sehe ich einzig das Vorgehen aus dem angesprochenen Post:

- HKLM Active Setup sichern
- HKCU Active Setups sichern (damit ggf. bestehende Configs nicht überschrieben werden)
- Upgrade installieren
- Registry-Backups zurückspielen

Vielleicht schafft MS es ja beim nächsten Upgrade, die beizubehalten, falls das nicht schon mittlerweile zutrifft;)
Mit freundlichen Grüßen

Niklas Gottschalk (gottschalk@zoller-usa.com)
IT Systems Administrator
Zoller Inc.
Benutzeravatar
Falaffel
Beiträge: 158
Registriert: Do Feb 04, 2016 5:53 pm

Hallo Niklas,

das hoffe ich auch.

Konsequenter und mir lieber wäre es allerdings, wenn Aagon so etwas in ACMP integrieren würde anstatt solche Dinge an einen externen/separaten Mechanismus abzugeben, in der Hoffnung, dass der schon alles richtig machen wird.
Mit freundlichen Grüßen

Robert-Daniel Steichele
r.steichele@gottlob-rommel.de
http://www.gottlob-rommel.de
JZie
Beiträge: 11
Registriert: Do Dez 19, 2019 2:26 pm

Guten Abend,

Wir haben ein wenig mit dem ActiveSetup herum getestet - und ja, ACMP benötigt dringend eine eigene Komponente hierfür, die das Verwalten und Nachverfolgen vereinfacht.
Bei unseren Tests sind wir darauf gestoßen, dass das ActiveSetup bei einem bereits bestehenden User mit fertigem Userprofile soweit funktioniert. Meldet sich ein User ohne bestehendes Profil auf einem Computer neu an (bsp.: Neuer Mitarbeiter), dann wird das ActiveSetup nach unseren Tests ausgeführt, wenn noch nicht alle Komponenten, wie Desktop und Co, zur Verfügung stehen. Wir haben probiert hier mit „Wait“ zu arbeiten, aber dann steht der komplette Loginprozess still und Windows verarbeitet im Hintergrund nichts parallel.

Wir sind dazu übergegangen bei jedem Logon CCs auszuführen und dort intern zur prüfen, ob bereits das ein oder andere erledigt worden ist. Das ist aber wenig zufriedenstellend und gegenüber den MItbewerbern, wie Ivanti, auch Nachteil der Software.

Vielleicht hat hier jemand noch einen Tipp, wie man das Problem bei neuen Benutzern charmanter lösen kann?

Besten Dank an dieser Stelle auch für das Tutorial!

Viele Grüße
twahl
Beiträge: 366
Registriert: Mo Mär 03, 2014 11:21 am

Hallo,

einzelne Client Command Bausteine können auch maschinen- bzw benutzerbezogen ausgeführt werden. Im ersten Reiter in den Eigenschaften jedes Bausteins gibt es die Kontext Option.
Wird das CC auf den Clients bei jeder Anmeldung ausgeführt, würde durch den Kontext maschinenbezogen der Baustein nur einmal pro Computer und bei Kontext benutzerbezogen nur einmal pro Benutzer ausgeführt, bei weiteren Ausführungen wird der Baustein dann übersprungen.
Nur wenn das Level des Client Commands (in den Eigenschaften des CC) erhöht wird, würden die Bausteine noch einmal für den Kontext ausgeführt.
Mit freundlichen Grüßen,

Tobias Wahl
Aagon GmbH
Benutzeravatar
ngottschalk
Beiträge: 293
Registriert: Mi Sep 08, 2010 12:57 pm

JZie hat geschrieben: Fr Jun 05, 2020 12:21 am Guten Abend,

Wir haben ein wenig mit dem ActiveSetup herum getestet - und ja, ACMP benötigt dringend eine eigene Komponente hierfür, die das Verwalten und Nachverfolgen vereinfacht.
Bei unseren Tests sind wir darauf gestoßen, dass das ActiveSetup bei einem bereits bestehenden User mit fertigem Userprofile soweit funktioniert. Meldet sich ein User ohne bestehendes Profil auf einem Computer neu an (bsp.: Neuer Mitarbeiter), dann wird das ActiveSetup nach unseren Tests ausgeführt, wenn noch nicht alle Komponenten, wie Desktop und Co, zur Verfügung stehen. Wir haben probiert hier mit „Wait“ zu arbeiten, aber dann steht der komplette Loginprozess still und Windows verarbeitet im Hintergrund nichts parallel.

Wir sind dazu übergegangen bei jedem Logon CCs auszuführen und dort intern zur prüfen, ob bereits das ein oder andere erledigt worden ist. Das ist aber wenig zufriedenstellend und gegenüber den MItbewerbern, wie Ivanti, auch Nachteil der Software.

Vielleicht hat hier jemand noch einen Tipp, wie man das Problem bei neuen Benutzern charmanter lösen kann?

Besten Dank an dieser Stelle auch für das Tutorial!

Viele Grüße
Hallo JZie,

das koennte der von mir angesprochene Tipp vllt. beheben:
Tipp
Werden manche Umgebungsvariablen des Systems bei der Ausführung nicht aufgelöst, sollte versucht werden, den Befehl mit einem vorangestelltem "cmd /c" aufzurufen, wodurch die gesamte Benutzerumgebung verfügbar sein sollte.
Mit freundlichen Grüßen

Niklas Gottschalk (gottschalk@zoller-usa.com)
IT Systems Administrator
Zoller Inc.
Antworten