Opsi Script unterbrechen - Benutzerbibliotheken verschieben

Kay96
Beiträge: 85
Registriert: 06 Dez 2018, 09:23

Opsi Script unterbrechen - Benutzerbibliotheken verschieben

Beitrag von Kay96 »

Hallo,
ich bin momentan mit einem sehr umfangreichen Script beschäftigt, dass die komplette Konfiguration unserer Windows 10 Rechner übernimmt.
Vorab muss ich dazu sagen, dass wir keine Domäne habe und deshalb sehr viele "händische" Konfigurationen vornehmen müssen.

Ich bin nun an der Stelle angekommen, dass ich die Benutzerbibliotheken verschieben möchte. Der erste Schritt passiert hierbei in der Registry, dass ich die Benutzerordner auf eine andere Partition "umleite". Nun möchte ich die Bneutzerordner unter C:\Users\BenutzerXY\ verschieben. Dies mache ich bisher über einen Powershell-Befehl.
Das Problem ist nun nur, dass sich der Ordner C:\Users\BenutzerXY\ erst anlegt, wenn der Benutzer sich min. 1 mal angemeldet hat.
Somit sind die Benutzerbibliotheken auch erst verfügbar, nachdem sich der User einmal angemeldet hat.

Ich habe dies momentan so gelöst, dass ich ein Autologin mit den entsprechenden Userdaten in der Registry hinterlegt habe und ein Restart durchführe.
Nun startet der Rechner neu und Opsi startet erneut, um die restlichen Schritte abzuarbeiten.
Dies ist aber genau das, was ich nicht möchte. Ich möchte, dass der Rechner neugestartet wird und Opsi nicht mit den Aktionen weiter macht, damit der User zuerst automatisch angemeldet wird.
Nachdem der User angemeldet wurde, wird über einen Eintrag im RunOnce ein Reboot veranlasst.
Nachdem der Rechner nun erneut neu gestartet ist, soll Opsi mit seinen Aktionen fortsetzen.

Gibt es eine solche Möglichkeit, dass Opsi seine Arbeit einmalig unterbricht?

Ich habe im Handbuch die Funktionen "ExitWindows /ImmediateReboot" und "ExitWindows /ImmediateLogout" gefunden.
Leider kam es bei mir zu einer Endlosschleife (wird im Handbuch auch vor gewarnt), aber wie kann man diese Endlosschleife verhindern?

Ich würde mich über eine Antwort sehr freuen!

Liebe Grüße
Benutzeravatar
tobias
Beiträge: 1291
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: Opsi Script unterbrechen - Benutzerbibliotheken verschieben

Beitrag von tobias »

Moin,

Also die übliche Methode um ein Script zu unterbrechen und an einer bestimmten Stelle fortzusetzen ist das Setzen eines reboot flag in der registry.

Ich hab dafür eine Funktion geschrieben:
wiki/doku.php?id=userspace:reboot-control

Gruss
Tobias
Kay96
Beiträge: 85
Registriert: 06 Dez 2018, 09:23

Re: Opsi Script unterbrechen - Benutzerbibliotheken verschieben

Beitrag von Kay96 »

@Tobias vielen Dank für die schnelle Antwort.
Kannst du mir vielleicht in ganz kurzen Worten den Sinn der reboot Flag erklären? Ich steh glaub ich etwas auf dem Schlauch.
Benutzeravatar
tobias
Beiträge: 1291
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: Opsi Script unterbrechen - Benutzerbibliotheken verschieben

Beitrag von tobias »

Der Flag wird geschrieben z.B. auf 1 gesetzt wenn ein reboot nötig ist.

Nach dem reboot wird der Flag ausgelesen und im Script kann man dann sagen if flag = 1 dann mache xyz elseif mache abc
Kay96
Beiträge: 85
Registriert: 06 Dez 2018, 09:23

Re: Opsi Script unterbrechen - Benutzerbibliotheken verschieben

Beitrag von Kay96 »

Achso vielen Dank, dann habe ich es doch richtig verstanden... Ich war mir nicht sicher, ob es hierbei eine direkte Funktionalität von Opsi gibt.
Aber ansonsten müsste es mit dem ExitWindows /ImmediateReboot in Kombination mit der ExitWindows /ImmediateLogou und der Reboot Flag funktionieren?
Benutzeravatar
tobias
Beiträge: 1291
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: Opsi Script unterbrechen - Benutzerbibliotheken verschieben

Beitrag von tobias »

Das kannst du damit machen, aber vielleicht wäre das hier eine alternative:

https://download.uib.de/opsi4.1/documen ... serprofile
Kay96
Beiträge: 85
Registriert: 06 Dez 2018, 09:23

Re: Opsi Script unterbrechen - Benutzerbibliotheken verschieben

Beitrag von Kay96 »

Ich habe es nun schon über viele Wege mit der RebootFlag versucht, aber ich bekomme immer am Anfang vom Script folgenden Fehler "could not be opened by RegOpenKeyEx, Errorno 2 "Das System kann die angegebene Datei nicht finden.<"

Ich habe es nun erstmal mit dem Codebeispiel aus dem Opsi Handbuch probiert, weil ich deine Möglichkeit nicht wirklich verstehe :D

Code: Alles auswählen

[actions]
DefVar $Flag$
DefVar $WinstRegKey$
DefVar $ProductId$

set $ProductId$ = "config-win10-bm"
Set $WinstRegKey$ = "HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\winst\$ProductId$"
Set $Flag$ = GetRegistryStringValue64("["+$WinstRegKey$+"] "+"RebootFlag")

if not ($Flag$ = "1")
  ;=========================
  ; Anweisungen vor Reboot

  Files_doSomething

  ; Reboot initialisieren ...
  Set $Flag$ = "1"
  Registry_SaveRebootFlag
  ExitWindows /ImmediateReboot

else
  ;=========================
  ; Anweisungen nach Reboot

  ; Rebootflag zurücksetzen
  Set $Flag$ = "0"
  Registry_SaveRebootFlag

  ; die eigentlichen Anweisungen

  Files_doMore

endif


[Registry_SaveRebootFlag]
openKey [$WinstRegKey$]
set "RebootFlag" = "$Flag$"

[Files_doSomething]
; eine Sektion, die vor dem Reboot ausgeführt wird

[Files_doMore]
; eine Sektion, die nach dem Reboot ausgeführt wird
Benutzeravatar
tobias
Beiträge: 1291
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: Opsi Script unterbrechen - Benutzerbibliotheken verschieben

Beitrag von tobias »

Kay96 hat geschrieben:Ich habe es nun schon über viele Wege mit der RebootFlag versucht, aber ich bekomme immer am Anfang vom Script folgenden Fehler "could not be opened by RegOpenKeyEx, Errorno 2 "Das System kann die angegebene Datei nicht finden.<"

Ich habe es nun erstmal mit dem Codebeispiel aus dem Opsi Handbuch probiert, weil ich deine Möglichkeit nicht wirklich verstehe :D
Meine Funktion macht halt das ganze quasi automatisch, dafür muss die funktion aber in deiner WINST Library auf jedem Client verfügbar sein (Siehe handbuch) und dann die Funktion im script auch geladen werden (siehe handbuch)

Dann kannst du über ein:
set $DummyVar$ = rebootcontrol(“auto”,“write”)

Ein Rebootflag in der registry setzen
(das set $dummyvar$ muss man leider mit angeben, da eine Funktion bei OPSI-Script nur so aufgerufen werden kann)
Führst du den befehl das erste mal aus, wird der rebootflag automatisch auf 1 gesetzt, jeder weitere durchfaul dieses Befehls würde den wert jeweils um 1 erhöhen.

Über den Aufruf: set $rebooted$ = rebootcontrol(“auto”,“read”)
Kannst du den Rebootflag dann im script wieder aufrufen, der aktuelle wert wird in $rebooted$ gespeichert und du kannst es mit if/else auswerten.

Über den Aufruf: set $DummyVar$ = rebootcontrol(“auto”,“delete”)
Wird der Flag wieder aus der Registry gelöscht, das auto wird dabei ignoriert aber... aber die funktion erwartet nunmal 2 parameter....

Möchtest du einen eigenen Wert als flag eintragen, kannst du bei auto auch eintragen was du willst ;)

----------------------------

bzgl. wieso das mit dem beispiel aus dem handbuch nicht funktioniert: bitte mal ein komplettes Log posten ;)
Kay96
Beiträge: 85
Registriert: 06 Dez 2018, 09:23

Re: Opsi Script unterbrechen - Benutzerbibliotheken verschieben

Beitrag von Kay96 »

Ich glaube da muss ich nochmal ein paar Stunden das Handbuch wälzen, damit ich deine Funktion nutzen kann.
Auf jeden Fall vielen Dank für deine ausführliche Erklärung. Ich habe das Prinzip jetzt auf jeden Fall verstanden.
Ich habe es jetzt mit einer RebootFlag gelöst, die ich allerdings in Currentuser (für alle Benutzer) schreibe, anstatt in LocalMaschine. Die Registry Einträge unter Currentuser kann ich ohne Fehlermeldung auslesen.
Ich habe das Skript vorhin nochmal zum Feierabend gestartet, ich bin gespannt, ob nun alles geklappt hat.
Benutzeravatar
SisterOfMercy
Beiträge: 1522
Registriert: 22 Jun 2012, 19:18

Re: Opsi Script unterbrechen - Benutzerbibliotheken verschieben

Beitrag von SisterOfMercy »

Code: Alles auswählen

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
If you change any of these entries, they take place when a user logs on again. They also work for the default user. I think a reboot is not needed, but am not sure.

However, "Benutzerbibliotheken", do you mean those libraries we have in windows 7? Because I removed that, so have no knowledge of that.

Code: Alles auswählen

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
Changing entire profile locations can be done in this key I think. Existing profiles are with a subkey, new profiles by changing ProfilesDirectory.

snippet from my windows 10 thing. It reads all subkeys, and changes a value in all subkeys. Maybe this can be used if you need to move a lot of user profiles.

Code: Alles auswählen

comment "Disable text input telemetry"
Set $result$ = getRegistryKeyListSysnative("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Input\Locales")
for $value$ in $result$ do Sub_disable_input_telemetry	

[Sub_disable_input_telemetry]
set $RegistryKey$ = "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Input\Locales\" + "$value$" + "]"
Registry_disable_input_telemetry /SysNative

[Registry_disable_input_telemetry]
openkey $RegistryKey$
set "UseFluency" = REG_DWORD:0x00000202
Bitte schreiben Sie Deutsch, when I'm responding in the German-speaking part of the forum!
Antworten