[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-domain/home/netlogon/domscripts/ -> rejointSE3.au3 (source)

   1  ; Script de mise au domaine manuelle
   2  ; $Id: rejointSE3.au3 6727 2012-01-01 17:58:39Z olikin $
   3  ; Stephane Boireau, d'après le script rejointSE3.cmd de Denis Bonnenfant
   4  ; N'est normalement lancé qu'en cas d'adhésion 'un nouveau poste
   5  ; ou que la mise au domaine depuis l'interface SE3 a échoué.
   6  ; Olivier Lacroix : ce script ne contient plus que les accès réseaux à \\se3\netlogon notamment.
   7  ; les autres commandes à passer en environnement privilégié sont dans rejointSE3-elevated.exe appelé en fin de ce script.
   8  ; Derniere modification: 17/12/2011
   9  
  10  ;Include constants
  11  #include <GUIConstants.au3>
  12  
  13  #include <se3_crob.lib.au3>
  14  
  15  ; Recuperation des parametres dans le même dossier
  16  $SE3_IP=IniRead(@ScriptDir & "\se3ip.ini", "ParamSE3", "se3ip", "")
  17  $SE3_NETBIOS_NAME=IniRead(@ScriptDir & "\se3ip.ini", "ParamSE3", "netbios_name", "")
  18  $DOMAINE=IniRead(@ScriptDir & "\se3ip.ini", "ParamSE3", "se3_domain", "")
  19  ;MsgBox(0,"Info","DOMAINE=" & $DOMAINE)
  20  ;Exit
  21  
  22  If $SE3_IP = "" Then
  23      MsgBox(0,"ERREUR", "La variable $SE3_IP est vide." & @CRLF & "Le fichier " & @ScriptDir & "\se3ip.ini est-il renseigné?")
  24      Exit
  25  EndIf
  26  
  27  If $SE3_NETBIOS_NAME = "" Then
  28      MsgBox(0,"ERREUR", "La variable $SE3_NETBIOS_NAME est vide." & @CRLF & "Le fichier " & @ScriptDir & "\se3ip.ini est-il renseigné?")
  29      Exit
  30  EndIf
  31  
  32  $IP=_GetIP()
  33  If $IP = "" Then
  34      MsgBox(0,"ERREUR", "L'adresse IP du poste n'a pas été trouvée.")
  35      Exit
  36  EndIf
  37  
  38  SplashTextOn("Informations SE3","Le serveur de fichiers SE3 se nomme " & $SE3_NETBIOS_NAME & @CRLF & "Son adresse IP est " & $SE3_IP & @CRLF & @CRLF & "L'adresse IP actuelle du poste Window$ est " & $IP,500,100,-1,0)
  39  Sleep(3000)
  40  
  41  $SystemDrive=_GetSystemDrive()
  42  DirCreate($SystemDrive & "\netinst")
  43  
  44  $old_way="n"
  45  If $old_way == "y" Then
  46      ;$cible_netlogon="\\" & $SE3_NETBIOS_NAME & "\netlogonzblouc" ; Pour simuler/forcer l'echec de l'acces sans lecteur
  47      $cible_netlogon="\\" & $SE3_NETBIOS_NAME & "\netlogon"
  48      $run=RunWait(@ComSpec & " /c net use " & $cible_netlogon, @SW_SHOW)
  49      ;MsgBox(0,"Info","La tentative d'accès à " & $cible_netlogon & " a retourné " & $run)
  50      ; Le test n'est pas fiable
  51      ;If $run <> 0 Then
  52      If Not FileExists($cible_netlogon & "\domscripts\se3.cmd") Then
  53  
  54          SplashTextOn("ERREUR","Il n'a pas été possible d'accéder à \\" & $SE3_NETBIOS_NAME & "\netlogon" & @CRLF & "Vous avez bien fourni le couple (admin;motdepasse) pour accéder à \\" & $SE3_NETBIOS_NAME & "\Progs\install\domscripts, n'est-ce pas ?",500,100,-1,0)
  55          Sleep(4000)
  56          SplashTextOn("Nouvelle tentative","Nouvelle tentative en montant un lecteur réseau.",500,100,-1,0)
  57          Sleep(2000)
  58  
  59          $LECTEUR=_chercher_lecteur_libre()
  60  
  61          $TEST_netlogon=_chercher_lecteur_reseau("NETLOGON")
  62          If $TEST_netlogon <> "" Then
  63              $LECTEUR=$TEST_netlogon
  64              $menage=RunWait(@Comspec & " /c net use " & $LECTEUR & ": /delete /y")
  65          EndIf
  66  
  67          ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  68          ; Il faut réclamer le nom de domaine et le mot de passe admin
  69          ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  70          If $DOMAINE == "" Then
  71              $DOMAINE=InputBox("Informations supplémentaires","Nom de domaine: ","SAMBAEDU3","",-1,70)
  72          EndIf
  73  
  74          $MDP_ADMIN_SE3=InputBox("Informations supplémentaires","Mot de passe administrateur SE3: ","","*",-1,60)
  75  
  76          ;$LECTEUR="P"
  77          ;$run_acces_se3=RunWait(@Comspec & " /c net use " & $LECTEUR & ": \\" & $SE3_NETBIOS_NAME & "\netlogon /user:" & $DOMAINE & "\admin " & $MDP_ADMIN_SE3 & " /persistent:no & pause")
  78          $run_acces_se3=RunWait(@Comspec & " /c net use " & $LECTEUR & ": \\" & $SE3_NETBIOS_NAME & "\netlogon /user:" & $DOMAINE & "\admin " & $MDP_ADMIN_SE3 & " /persistent:no")
  79          If $run_acces_se3 == 0 Or $TEST_netlogon <> "" Then
  80              $netlogon=$LECTEUR & ":"
  81          Else
  82              MsgBox(4096,"ERREUR","Il n'a pas été non plus possible de monter un lecteur " & $LECTEUR & ": pointant sur \\" & $SE3_NETBIOS_NAME & "\netlogon" & @CRLF & "ABANDON !")
  83              Exit
  84          EndIf
  85      Else
  86          $netlogon="\\" & $SE3_NETBIOS_NAME & "\netlogon"
  87      EndIf
  88  Else
  89      ;$PAUSE_DEBUG=" & pause"
  90      $PAUSE_DEBUG=""
  91      If $CmdLine[0] == 0 Then
  92          $NOTE="On ne tente pas de lire des paramètres"
  93      Else
  94          If StringInStr($CmdLine[1],"debug") Then
  95              $PAUSE_DEBUG=" & pause"
  96          EndIf
  97      EndIf
  98  
  99      $cible_netlogon="\\" & $SE3_NETBIOS_NAME & "\netlogon"
 100      ;$cible_netlogon="\\" & $SE3_NETBIOS_NAME & "\netlogonzblouc" ; Pour simuler/forcer l'echec de l'acces sans lecteur
 101      $run=RunWait(@ComSpec & " /c net use " & $cible_netlogon, @SW_SHOW)
 102      ;MsgBox(0,"Info","La tentative d'accès à " & $cible_netlogon & " a retourné " & $run)
 103      ; Le test n'est pas fiable
 104      ;If $run <> 0 Then
 105      If FileExists($cible_netlogon & "\domscripts\se3.cmd") Then
 106          $netlogon="\\" & $SE3_NETBIOS_NAME & "\netlogon"
 107      Else
 108          ;$run=RunWait(@ComSpec & " /c net use Z: " & $cible_netlogon & $PAUSE_DEBUG, @SW_SHOW)
 109          ; On force le démontage/remontage pour éviter des blagues avec plusieurs connexions au même partage ou sous plusieurs identités
 110          $run=RunWait(@ComSpec & " /c net use " & $cible_netlogon & " /DELETE /Y & net use Z: " & $cible_netlogon & $PAUSE_DEBUG, @SW_SHOW)
 111          ;MsgBox(0,"Info","La tentative d'accès à " & $cible_netlogon & " a retourné " & $run)
 112          ; Le test n'est pas fiable
 113          ;If $run <> 0 Then
 114          ;If Not FileExists($cible_netlogon & "\domscripts\se3.cmd") Then
 115          If Not FileExists("z:\domscripts\se3.cmd") Then
 116              ; Le montage a échoué
 117  
 118              ;SplashTextOn("ERREUR","Il n'a pas été possible d'accéder à \\" & $SE3_NETBIOS_NAME & "\netlogon" & @CRLF & "Vous avez bien fourni le couple (admin;motdepasse) pour accéder à \\" & $SE3_NETBIOS_NAME & "\Progs\install\domscripts, n'est-ce pas ?",500,100,-1,0)
 119              SplashTextOn("ERREUR","Il n'a pas été possible d'accéder à \\" & $SE3_NETBIOS_NAME & "\netlogon" & @CRLF & "Vous avez bien fourni le couple (adminse3;motdepasse) pour accéder à \\" & $SE3_NETBIOS_NAME & "\netlogon\domscripts, n'est-ce pas ?",500,100,-1,0)
 120              Sleep(4000)
 121              SplashTextOn("Nouvelle tentative","Nouvelle tentative en montant un lecteur réseau.",500,100,-1,0)
 122              Sleep(2000)
 123  
 124              ;$LECTEUR=_chercher_lecteur_libre()
 125              $LECTEUR="Z"
 126  
 127              ; On teste si NETLOGON est monté (cela pourrait gêner si c'était ailleurs qu'en Z:)
 128              $TEST_netlogon=_chercher_lecteur_reseau("NETLOGON")
 129              If $TEST_netlogon <> "" Then
 130                  $LECTEUR=$TEST_netlogon
 131                  $menage=RunWait(@Comspec & " /c net use " & $LECTEUR & ": /delete /y")
 132              EndIf
 133  
 134              ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 135              ; Il faut réclamer le nom de domaine et le mot de passe admin
 136              ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 137              If $DOMAINE == "" Then
 138                  $DOMAINE=InputBox("Informations supplémentaires","Nom de domaine: ","SAMBAEDU3","",-1,70)
 139              EndIf
 140  
 141              ;$MDP_ADMIN_SE3=InputBox("Informations supplémentaires","Mot de passe administrateur SE3: ","","*",-1,60)
 142              $MDP_ADMINSE3=InputBox("Informations supplémentaires","Mot de passe du compte adminse3: ","","*",-1,60)
 143  
 144              ;$LECTEUR="P"
 145              ;$run_acces_se3=RunWait(@Comspec & " /c net use " & $LECTEUR & ": \\" & $SE3_NETBIOS_NAME & "\netlogon /user:" & $DOMAINE & "\admin " & $MDP_ADMIN_SE3 & " /persistent:no")
 146              ;$run_acces_se3=RunWait(@Comspec & " /c net use " & $LECTEUR & ": \\" & $SE3_NETBIOS_NAME & "\netlogon /user:" & $DOMAINE & "\adminse3 " & $MDP_ADMINSE3 & " /persistent:no & pause")
 147              ; On force le démontage/remontage pour éviter des blagues avec plusieurs connexions au même partage ou sous plusieurs identités
 148              $run_acces_se3=RunWait(@Comspec & " /c net use \\" & $SE3_NETBIOS_NAME & "\netlogon /DELETE /Y & net use " & $LECTEUR & ": \\" & $SE3_NETBIOS_NAME & "\netlogon /user:" & $DOMAINE & "\adminse3 " & $MDP_ADMINSE3 & " /persistent:no " & $PAUSE_DEBUG)
 149              If $run_acces_se3 == 0 Or $TEST_netlogon <> "" Then
 150                  $netlogon=$LECTEUR & ":"
 151              Else
 152                  MsgBox(4096,"ERREUR","Il n'a pas été non plus possible de monter un lecteur " & $LECTEUR & ": pointant sur \\" & $SE3_NETBIOS_NAME & "\netlogon" & @CRLF & "ABANDON !")
 153                  Exit
 154              EndIf
 155          Else
 156              $netlogon="Z:"
 157          EndIf
 158      EndIf
 159  EndIf
 160  
 161  SplashTextOn("Information","Copie des fichiers " & $netlogon & "\domscripts\*.* vers " & $SystemDrive & "\netinst\",500,100,-1,0)
 162  Sleep(2000)
 163  $COPIE=FileCopy($netlogon & "\domscripts\*.*", $SystemDrive & "\netinst\", 1)
 164  If $COPIE = 0 Then
 165      MsgBox(48,"ERREUR","Echec de la copie des fichiers de " & $netlogon & "\domscripts\ vers " & $SystemDrive & "\netinst\")
 166      Exit
 167  EndIf
 168  
 169  SplashTextOn("Information","Copie de " & $netlogon & "\CPAU.exe vers " & $SystemDrive & "\netinst\",500,100,-1,0)
 170  Sleep(2000)
 171  ;copy /y \\%netbios_name%\netlogon\CPAU.exe %Systemdrive%\Netinst\
 172  $COPIE=FileCopy($netlogon & "\CPAU.exe", $SystemDrive & "\netinst\", 1)
 173  If $COPIE = 0 Then
 174      MsgBox(48,"ERREUR","Echec de la copie de " & $netlogon & "\CPAU.exe vers " & $SystemDrive & "\netinst\")
 175      Exit
 176  EndIf
 177  
 178  
 179  If FileExists($netlogon & "\machine\" & $IP & "\action.bat") Then
 180      SplashTextOn("Information","Copie de " & $netlogon & "\machine\" & $IP & "\action.bat vers " & $SystemDrive & "\netinst\",500,100,-1,0)
 181      Sleep(1000)
 182      FileCopy($netlogon & "\machine\" & $IP & "\action.bat", $SystemDrive & "\netinst\", 1)
 183  Else
 184      SplashTextOn("Information","Recherche ou saisie du nom de machine...",500,100,-1,0)
 185      Sleep(1000)
 186  
 187      ; Nom de la station
 188      $NAME=""
 189  
 190      ;for /f "delims==- tokens=2-7" %%a in ('nbtstat -a %computername% ^|find "Adresse MAC"')  do @set mac=%%a%%b%%c%%d%%e%%f
 191      $MAC=_GetMACFromIP($IP)
 192      $MAC_ELAGUEE=StringRegExpReplace($MAC,"[^A-Za-z0-9]","")
 193      ;:: recuperation du nom de la machine
 194      If FileExists($SystemDrive & "\netinst\unattend.csv") Then
 195  
 196          ;if not exist %systemdrive%\netinst\unattend.csv goto nounattend
 197          ;for /f "tokens=3 delims=," %%a in ('findstr %mac% %systemdrive%\netinst\unattend.csv') do set NAME=%%~a
 198  
 199          $FICH=FileOpen($SystemDrive & "\netinst\unattend.csv",0)
 200          If $FICH = -1 Then
 201              ; Le fichier n'existe pas ou on n'a pas pu l'ouvrir
 202              MsgBox(0,"Information", "Le fichier " & $SystemDrive & "\netinst\unattend.csv n'existe pas, ou n'a pas pu être ouvert.", 2)
 203          Else
 204              While 1
 205                  $LIGNE=FileReadLine($FICH)
 206                  If @error = -1 Then ExitLoop
 207                  If StringRight(StringLeft($LIGNE,13),12) = $MAC_ELAGUEE Then
 208                      $TEMP=StringSplit($LIGNE,"""")
 209                      $NAME=$TEMP[6]
 210                      ExitLoop
 211                  EndIf
 212              WEnd
 213              FileClose($FICH)
 214          EndIf
 215      EndIf
 216  
 217      If $NAME == "" Then
 218          SplashTextOn("Information","Aucune correspondance n'a été trouvée dans le fichier unattend.csv" & @CRLF & "Il vous est proposé d'utiliser le nom actuel de la machine: " & @ComputerName,500,100,-1,0)
 219          $nomtrouve = 0
 220          $NAME=@ComputerName
 221      Else
 222          ; le nom de la machine existe dans unattend.csv : la fenêtre demandant le nom se fermera au bout de x secondes grace au tag $nomtrouve=1.
 223          $nomtrouve = 1
 224          If StringLower($NAME) == StringLower(@ComputerName) Then
 225              SplashTextOn("Information","Le nom de machine " & $NAME & " a été trouvé dans le fichier unattend.csv" & @CRLF & "C'est aussi le nom actuel de la machine.",500,100,-1,0)
 226          Else
 227              SplashTextOn("Information","Le nom de machine " & $NAME & " a été trouvé dans le fichier unattend.csv" & @CRLF & "alors que le nom actuel de la machine est " & @ComputerName,500,100,-1,0)
 228          EndIf
 229      EndIf
 230      Sleep(3000)
 231  
 232      While 1
 233          If $nomtrouve == 1 Then
 234              ; le nom a été trouvé dans unattend.csv, on met un timeout de 60 sec à la fenêtre.
 235              $Saisie=InputBox("Nom de machine", "Veuillez saisir le nom de machine souhaité: ", $NAME, "", Default, 140, Default, Default,60)
 236              If @error == 0 Then
 237                  ; le nom proposé a été modifié et on a cliqué sur OK Alors on mémorise dans $NAME
 238                  $NAME = $Saisie
 239              EndIf
 240          Else
 241              $NAME=InputBox("Nom de machine", "Veuillez saisir le nom de machine souhaité: ", $NAME, "", Default, 140)
 242          EndIf
 243          If @error = 1 Then
 244              ; On a cliqué sur Cancel
 245              MsgBox(16,"ABANDON","Vous n'avez pas souhaité poursuivre.",1)
 246              Exit
 247          EndIf
 248          If $NAME = "" Then
 249              MsgBox(48,"ERREUR","Le nom de machine ne doit pas être vide.")
 250          Else
 251              $NAME_CORRIGE=StringRegExpReplace($NAME,"[^A-Za-z0-9_-]","")
 252              If $NAME = $NAME_CORRIGE Then
 253                  $RETOUR=MsgBox(0,"Information","La machine va être mise au domaine sous le nom " & $NAME, 2)
 254                  ; La fenêtre se referme toute seule après 2 secondes...
 255                  ; On ne peut pas tester $RETOUR == 1
 256                  ; Si rien n'a été cliqué, c'est que c'est OK.
 257                  If $RETOUR = 2 Then
 258                      ; On a cliqué sur Cancel
 259                      MsgBox(16,"ABANDON","Vous n'avez pas souhaité poursuivre.",1)
 260                      Exit
 261                  Else
 262                      ExitLoop
 263                  EndIf
 264              Else
 265                  If $NAME_CORRIGE = "" Then
 266                      ; On repart dans la boucle
 267                      MsgBox(48,"Information","Des caractères invalides ont été saisis." & @CRLF & "Veuillez-vous limiter à [A-Za-z0-9_-]",3)
 268                      ;$NAME=""
 269                  Else
 270                      $RETOUR=MsgBox(4,"Information","Des caractères invalides ont été saisis." & @CRLF & "Le nom proposé est " & $NAME_CORRIGE & @CRLF & "Acceptez-vous ce nom? (sinon préférez-vous corriger)?")
 271                      If $RETOUR = 6 Then
 272                          $NAME=$NAME_CORRIGE
 273                          ExitLoop
 274                      ;Else
 275                          ;$NAME=""
 276                          ;If $RETOUR = 2 Then
 277                          ;    MsgBox(16,"ABANDON","Vous n'avez pas souhaité poursuivre.",1)
 278                          ;    Exit
 279                          ;EndIf
 280                      EndIf
 281                  EndIf
 282              EndIf
 283          EndIf
 284          ; A FAIRE: Il faudrait aussi contrôler si le nom est déjà dans unattend.csv
 285      WEnd
 286  
 287      ; Ca ne devrait pas arriver, mais deux précautions valent mieux qu'une
 288      If $NAME = "" Then
 289          MsgBox(16,"ERREUR","Le nom de machine est vide." & @CRLF & "On ne peut pas poursuivre")
 290          Exit
 291      EndIf
 292  
 293      ;:nounattend
 294      ;If "$NAME" = "" Then
 295      ;    cls
 296      ;set /P NAME=entrez le nom de la machine :
 297  
 298      ;echo la machine va etre mise au domaine sous le nom %NAME%
 299      ;echo set ACTION=renomme> %SystemDrive%\Netinst\action.bat
 300      ;echo set NAME=%NAME%>> %SystemDrive%\Netinst\action.bat
 301      $FICH=FileOpen($SystemDrive & "\netinst\action.bat",2)
 302      If $FICH = -1 Then
 303          MsgBox(16,"ERREUR", "Il n'a pas été possible de créer le fichier " & $SystemDrive & "\netinst\action.bat")
 304          Exit
 305      EndIf
 306  
 307      FileWriteLine($FICH,"set ACTION=renomme" & @CRLF)
 308      FileWriteLine($FICH,"set NAME=" & $NAME & @CRLF)
 309      FileClose($FICH)
 310  EndIf
 311  
 312  $temoin_demander_pass_admin="y"
 313  If FileExists($netlogon & "\machine\" & $IP & "\localpw.job") Then
 314      $COPIE=FileCopy($netlogon & "\machine\" & $IP & "\localpw.job", $SystemDrive & "\netinst\", 1)
 315      If $COPIE = 0 Then
 316          MsgBox(48,"ERREUR","Echec de la copie de " & $netlogon & "\machine\" & $IP & "\localpw.job vers " & $SystemDrive & "\netinst\" & @CRLF & "Vous allez être invité à donner le mot de passe du compte administrateur local.")
 317      Else
 318          $temoin_demander_pass_admin="n"
 319      EndIf
 320  EndIf
 321  
 322  
 323  _Message("Lancement du programme rejointSE3-elevated.exe sur architecture " & @OSArch & " et sur OS " & @OSVersion & ".")
 324  
 325  If @OSArch = "X86" Then
 326      Switch @OSVersion
 327          Case "WIN_XP"
 328              RunWait($SystemDrive & "\Netinst\rejointSE3-elevated.exe " & $temoin_demander_pass_admin, $SystemDrive & "\Netinst")
 329          Case "WIN_7"
 330              _Execute_elevated($SystemDrive & "\Netinst\rejointSE3-elevated.exe " & $temoin_demander_pass_admin)
 331          Case "WIN_VISTA"
 332              _Execute_elevated($SystemDrive & "\Netinst\rejointSE3-elevated.exe " & $temoin_demander_pass_admin)
 333          ; etc
 334          Case Else
 335              MsgBox(0,"", "OS non référencé : tentative SANS élévation de privilège.")
 336              RunWait($SystemDrive & "\Netinst\rejointSE3-elevated.exe " & $temoin_demander_pass_admin, $SystemDrive & "\Netinst")
 337      EndSwitch
 338  Else  ; ( x64 )
 339      Switch @OSVersion
 340          Case "WIN_XP"
 341              RunWait($SystemDrive & "\Netinst\rejointSE3-elevated-64.exe " & $temoin_demander_pass_admin, $SystemDrive & "\Netinst")
 342          Case "WIN_7"
 343              _Execute_elevated($SystemDrive & "\Netinst\rejointSE3-elevated-64.exe " & $temoin_demander_pass_admin)
 344          Case "WIN_VISTA"
 345              _Execute_elevated($SystemDrive & "\Netinst\rejointSE3-elevated-64.exe " & $temoin_demander_pass_admin)
 346          Case Else
 347              MsgBox(0,"", "OS non référencé : tentative AVEC élévation de privilège.")
 348              _Execute_elevated($SystemDrive & "\Netinst\rejointSE3-elevated-64.exe " & $temoin_demander_pass_admin)
 349     EndSwitch
 350  EndIf
 351  
 352  ; FIN DU SCRIPT : toutes les autres commandes ont été copiées dans rejointSE3-elevated.au3 puis compilées
 353  
 354  
 355  Func _Execute_elevated($script)
 356      RunWait("cscript " & $SystemDrive & "\Netinst\execute-elevated.js " & $script , $SystemDrive & "\Netinst")
 357  EndFunc
 358  
 359  Func _Message($mess)
 360      SplashTextOn("Information", $mess ,500,100,-1,0)
 361      Sleep(1000)
 362  EndFunc
 363  


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1