Views
WinstScripts
>>
domchange
last edited 1 year ago by doertel
This useses the 'setup with logged in user' technology.
Therefor it consist of two parts.
The Script was written for opsi 1.x/2.x
so some things may be outdatetet (e.g. Winst Path).
In the core it uses a netdom.exe to do the work
which do the job under XP.
Under win2k it have to be done by e.g. autoit.
Part 1:
domchange.ins
#######################################################################
; Copyright (c) uib umwelt informatik büro gmbh (www.uib.de)
; This sourcecode is owned by uib
; and published under the Terms of the General Public License.
; (edited 20.03.2006 by P.Ohler)
[Initial]
LogLevel=2
ExitOnError=false
ScriptErrorMessages=on
TraceMode=off
[Aktionen]
DefVar $NewHost$
DefVar $configurl$
DefVar $depoturl$
DefVar $utilsurl$
DefVar $WinsServer$
DefVar $InterfaceName$
set $NewHost$ = ""
set $WinsServer$ = ""
;-------------------------------
; hier die Daten eintragen
;-------------------------------
; hier bitte den Namen des neuen Host-Rechners angeben, an dem sich der pcpatch anmelden soll
; ist die Variable leer, wird er nicht geändert (nur für den Fall, dass zwei Domänen bereitgestellt werden,
; aber der Hostrechner gleichbleibt)
set $NewHost$ = "HOST"
set $configurl$ = "\\" + $NewHost$ + "\opt_pcbin\pcpatch"
set $depoturl$ = "\\" + $NewHost$ + "\opt_pcbin\install"
set $utilsurl$ = "\\" + $NewHost$ + "\opt_pcbin\utils"
; hier den neuen WINS-Server eintragen. Soll dieser nicht geändert werden, muss das Feld leer bleiben
; bitte nur IP des Servers eintragen!
set $WinsServer$ = "192.168.0.1"
; Sollte der Name des Netzwerk-Interface unter Windows anders lauten als "LAN-Verbindung" muss dies geändert werden
; die Angabe wird nur zur Änderung des WINS-Servers benötigt...
set $InterfaceName$ = "LAN-Verbindung"
;-------------------------------
; ab hier nicht mehr editieren!
; bitte auch die Daten in .\localsetup\local_domchange.ins ändern!
;-------------------------------
DefVar $ProductName$
Set $ProductName$ = "domchange"
DefVar $ProductSizeMB$
Set $ProductSizeMB$ = "2"
DefVar $LocalSetupScript$
Set $LocalSetupScript$ = "local_"+$ProductName$+".ins /batch"
;Variable für temporäres Verzeichnis
DefVar $Temp$
set $Temp$ = EnvVar("TEMP")
DefVar $Tmp$
set $Tmp$ = EnvVar("TMP")
;Variablen für BetriebssystemsVersion (OS)-Test
DefVar $OS$
DefVar $MinorOS$
set $OS$ = GetOS
set $MinorOS$ = GetNTVersion
DefVar $RebootFlag$
DefVar $WinstRegKey$
DefVar $RebootRegVar$
DefVar $AutoName$
DefVar $AutoPass$
DefVar $AutoDom$
DefVar $AutoLogon$
DefVar $AutoBackupKey$
DefVar $LocalFilesPath$
DefVar $LocalWinst$
DefVar $IniVar_action$
Set $WinstRegKey$ = "HKLM\SOFTWARE\opsi.org\winst"
Set $RebootFlag$ = GetRegistryStringValue("["+$WinstRegKey$+"] "+"RebootFlag")
Set $AutoBackupKey$ = $WinstRegKey$+"\AutoLogonBackup"
Set $LocalFilesPath$ = "C:\opsi_local_inst"
Set $LocalWinst$ = "c:\opsi\utils\winst32.exe"
;Set $LocalWinst$ = "c:\programme\opsi.org\utils\winst32.exe"
Set $IniVar_action$ = IniVar("action")
if ($OS$ = "Windows_NT" AND not ($MinorOS$="NT4"))
if not (($RebootFlag$ = "1") or ($RebootFlag$ = "2"))
;=========================
; Anweisungen vor Reboot
if not(HasMinimumSpace ("%SYSTEMDRIVE%", ""+$ProductSizeMB$+" MB"))
LogError "Nicht genügend Platz auf C: . "+$ProductSizeMB$+" MB auf C: für "+$ProductName$+" erforderlich."
else
; show product picture
ShowBitmap /3 "%scriptpath%\localsetup\"+$ProductName$+".bmp" "$ProductName$"
Message "Preparing "+$ProductName$+" install ..."
sub_Prepare_AutoLogon
Registry_SaveIniVar
if (($IniVar_action$ = "join") or ($IniVar_action$ = "move"))
if not($WinsServer$ = "")
dosInAnIcon_changeWinsServer
endif
endif
; steht der Rechner auf move, so wird jetzt die Host-Variable neu gesetzt und nach dem Reboot meldet
; sich der Rechner beim neuen Server an. Dort muss dann auch domchange=setup und action=move stehen!!!
; leider wird der alte Server dann im Zustand domchange=setup verlassen...
if ($IniVar_action$ = "move")
if not($NewHost$ = "")
Registry_patch_shareinfo
endif
endif
; we need to reboot now to be shure that the autologon work
; Reboot initialisieren ...
Set $RebootFlag$ = "1"
Registry_SaveRebootFlag
ExitWindows /ImmediateReboot
endif ; genuegend platz
endif ; Rebootflag = not (1 or 2)
if ($RebootFlag$ = "1")
;=========================
; Anweisungen nach Reboot
; Rebootflag weitersetzen
Set $RebootFlag$ = "2"
Registry_SaveRebootFlag
; die eigentlichen Anweisungen
Message "Preparing "+$ProductName$+" install ..."
ExitWindows /ImmediateLogout
; now let the autologon work
; it will stop with a reboot
endif ; Rebootflag = 1
if ($RebootFlag$ = "2")
;=========================
; statements after second reboot
Set $RebootFlag$ = "0"
Registry_SaveRebootFlag
; This part must be here even if nothing is done
; possibly we do some cleanup
Message "Cleanup "+$ProductName$+" install ..."
sub_Restore_AutoLogon
Registry_killIniVar
if (($IniVar_action$ = "remove") or ($IniVar_action$ = "move"))
if not($NewHost$ = "")
Registry_patch_shareinfo
endif
endif
; This is the clean end of the installation
endif ; Rebootflag = 2
endif
[sub_Prepare_AutoLogon]
; read actual Autologon values for backup
set $AutoName$ = GetRegistryStringValue ("[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] DefaultUserName")
; if AutoLogonName is our setup admin user, something bad happend
; then let us cleanup
if ($AutoName$="opsiSetupAdmin")
set $AutoName$=""
set $AutoPass$=""
set $AutoDom$=""
set $AutoLogon$="0"
else
set $AutoPass$ = GetRegistryStringValue ("[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] DefaultPassword")
set $AutoDom$ = GetRegistryStringValue ("[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] DefaultDomainName")
set $AutoLogon$ = GetRegistryStringValue ("[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] AutoAdminLogon")
endif
; backup AutoLogon values
Registry_save_autologon
; prepare the admin AutoLogon
Registry_autologon
; create our setup admin user
DosInAnIcon_makeadmin
; store our setup script as run once
Registry_runOnce
; copy the setup script and files
Files_copy_Setup_files_local
[sub_Restore_AutoLogon]
; read AutoLogon values from backup
set $AutoName$ = GetRegistryStringValue("["+$AutoBackupKey$+"] DefaultUserName")
set $AutoPass$ = GetRegistryStringValue("["+$AutoBackupKey$+"] DefaultPassword")
set $AutoDom$= GetRegistryStringValue("["+$AutoBackupKey$+"] DefaultDomainName")
set $AutoLogon$= GetRegistryStringValue("["+$AutoBackupKey$+"] AutoAdminLogon")
; restore the values
Registry_restore_autologon
; delete our setup admin user
DosInAnIcon_deleteadmin
; cleanup setup script, files and profiledir
Files_delete_Setup_files_local
; delete profiledir
DosInAnIcon_deleteprofile
;in dieser Sektion wird er Eintrag für den WINS-Server geändert, dazu wird die IP des WINS-Servers benötigt
[dosInAnIcon_changeWinsServer]
netsh inter ip delete wins "$InterfaceName$" all
netsh inter ip add wins "$InterfaceName$" $WinsServer$
[Registry_save_autologon]
openkey [$AutoBackupKey$]
set "DefaultUserName"="$AutoName$"
set "DefaultPassword"="$AutoPass$"
set "DefaultDomainName"="$AutoDom$"
set "AutoAdminLogon"="$AutoLogon$"
[Registry_restore_autologon]
openkey [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
set "DefaultUserName"="$AutoName$"
set "DefaultPassword"="$AutoPass$"
;set "DefaultDomainName"="$AutoDom$"
set "AutoAdminLogon"="$AutoLogon$"
[DosInAnIcon_deleteadmin]
NET USER opsiSetupAdmin /DELETE
[Registry_SaveRebootFlag]
openKey [$WinstRegKey$]
set "RebootFlag" = "$RebootFlag$"
[Files_copy_Setup_files_local]
copy -s %ScriptPath%\localsetup\*.* $LocalFilesPath$
[Files_delete_Setup_files_local]
delete -sf $LocalFilesPath$
; folgender Befehl funktioniert nicht vollständig, deshalb ist er zur Zeit auskommentier
; der Befehl wird durch die Sektion "DosInAnIcon_deleteprofile" ersetzt (P.Ohler)
;delete -sf "%ProfileDir%\opsiSetupAdmin"
[DosInAnIcon_deleteprofile]
rmdir /S /Q "%ProfileDir%\opsiSetupAdmin"
[DosInAnIcon_makeadmin]
NET USER opsiSetupAdmin opsiAZ9356y /ADD
NET LOCALGROUP Administratoren /ADD opsiSetupAdmin
[Registry_autologon]
openkey [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
set "DefaultUserName"="opsiSetupAdmin"
set "DefaultPassword"="opsiAZ9356y"
set "DefaultDomainName"="localhost"
set "AutoAdminLogon"="1"
[Registry_runonce]
openkey [HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce]
set "opsi_autologon_setup"="$LocalWinst$ $LocalFilesPath$\$LocalSetupScript$"
[Registry_saveIniVar]
openKey [$WinstRegKey$]
set "IniVar_action" = "$IniVar_action$"
[Registry_killIniVar]
openKey [$WinstRegKey$]
deleteVar "IniVar_action"
[Registry_patch_shareinfo]
openkey [HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\shareinfo]
set "configurl" = "$configurl$"
set "depoturl" = "$depoturl$"
set "utilsurl" = "$utilsurl$"
openkey [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
set "HOST" = "$NewHost$"
#####################################################################
Part 2
localsetup/local_domchange.ins
#####################################################################
[Initial]
Message=ändere die Domäne...
;Erstellt am 14.03.2006 von Patrick Ohler
LogLevel=2
ExitOnError=false
ScriptErrorMessages=on
TraceMode=off
[Aktionen]
DefVar $NewDomain$
DefVar $NewDomainAdmin$
DefVar $NewDomainAdminPass$
DefVar $Server$
DefVar $configurl$
DefVar $depoturl$
DefVar $utilsurl$
;-------------------------------
; hier die Daten eintragen
;-------------------------------
set $NewDomain$ = "DOMAIN"
set $NewDomainAdmin$ = "ADMIN"
set $NewDomainAdminPass$ = "PASSWORD"
;-------------------------------
; ab hier nicht mehr editieren!
;-------------------------------
;Variablen für BetriebssystemsVersion (OS)-Test
DefVar $OS$
set $OS$ = GetOS
DefVar $NTVersion$
set $NTVersion$ = GetNTVersion
DefVar $WinstRegKey$
Set $WinstRegKey$ = "HKLM\SOFTWARE\opsi.org\winst"
DefVar $IniVar_action$
set $IniVar_action$ = GetRegistryStringValue("["+$WinstRegKey$+"] IniVar_action")
if ($OS$ = "Windows_NT" OR $OS$="Windows_95")
if ($NTVersion$ = "WinXP")
Files_copy_netdom
;zur Sicherheit alle Netzwerkverbindungen trennen, kann sonst zu Problemen führen
DosInAnIcon_unmount_all
if ($IniVar_action$ = "remove")
DosInAnIcon_remove
else
if ($IniVar_action$ = "join")
DosInAnIcon_join
Registry_patch_default_domain
else
if ($IniVar_action$ = "move")
DosInAnIcon_move
Registry_patch_default_domain
endif
endif
endif
Files_delete_netdom
ExitWindows /Reboot
endif
endif
[Files_copy_netdom]
;netdom.exe muss in ein Verzeichnis im PATH kopiert werden, da es ansonsten nicht
;korrekt ausgeführt werden kann
copy %ScriptPath%\netdom.exe %System%
[DosInAnIcon_unmount_all]
net use /DELETE * /yes
[DosInAnIcon_move]
netdom move %PCName% /Domain:$NewDomain$ /UserD:$NewDomainAdmin$ /PasswordD:$NewDomainAdminPass$
[DosInAnIcon_remove]
netdom remove %PCName%
[DosInAnIcon_join]
netdom join %PCName% /Domain:$NewDomain$ /UserD:$NewDomainAdmin$ /PasswordD:$NewDomainAdminPass$
[Registry_patch_default_domain]
openkey [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
set "DefaultDomainName" = "$NewDomain$"
set "AltDefaultDomainName" = "$NewDomain$"
set "CachePrimaryDomain" = "$NewDomain$"
[Files_delete_netdom]
delete %System%\netdom.exe