[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-clonage/sources/quitte_se3/ -> quitte_se3.au3 (source)

   1  ; Programme destiné à quitter un domaine SambaEdu3 sur des machines NT/2K/XP
   2  ; (testé uniquement sous XP (y a-t-il des modifs à apporter sur les VBS dans les cas NT/2K?))
   3  ; Les opérations effectuées sont les suivantes:
   4  ;  - Suppression du compte 'adminse3'
   5  ;  - Suppression du dossier "c:\Documents and Settings\adminse3"
   6  ;    (pour éviter lors d'une intégration future l'apparition d'un dossier "c:\Documents and Settings\adminse3.NOMDUPOSTE")
   7  ;  - Suppression des fichiers de wpkg
   8  ;  - Suppression du dossier "c:\netinst"
   9  ;  - Sortie du domaine avec NETDOM
  10  ;  - Rejoindre le groupe de travail 'TEST'
  11  ;  - Reboot.
  12  
  13  ; $Id$
  14  ; Stephane Boireau (27)
  15  ; Modification: 16/06/2010
  16  
  17  $DEFAULT_WORKGROUP = "TEST"
  18  
  19  Dim $WPKG_files[4]=["wpkg-client.vbs", "wpkg.log", "wpkg.txt", "system32\wpkg.xml"]
  20  
  21  If @OSTYPE == "WIN32_WINDOWS" Then
  22      MsgBox(0,"Information","Ce programme concerne les OS NT/2K/XP uniquement.")
  23      Exit
  24  Else
  25      If IsAdmin() Then
  26          If @UserName == "adminse3" Then
  27              MsgBox(0,"Information","Ce programme ne doit pas être exécuté" & @CRLF & "en tant que 'adminse3' puisque le script" & @CRLF & "va tenter de supprimer ce compte.")
  28              Exit
  29          Else
  30  
  31              ;=================================================================================
  32              ;$nbmax=25
  33              ; Compte des dossiers dans Documents and Settings
  34              $DOSSIER="C:\Documents and Settings"
  35              ; Recherche des dossiers dans $DOSSIER
  36              ; (remarque: "." et ".." sont renvoyés).
  37              $recherche = FileFindFirstFile($DOSSIER & "\*.*")
  38  
  39              ; Si la recherche a renvoyé des réponses:
  40              If $recherche = -1 Then
  41                  ; Cela ne peut pas se produire.
  42                  MsgBox(0, "Erreur", "Aucun fichier/dossier ne se trouve dans " & $DOSSIER)
  43              EndIf
  44  
  45              $nbmax = 1
  46              While 1
  47                  $dossier_courant = FileFindNextFile($recherche)
  48                  If @error Then ExitLoop
  49                  $nbmax = $nbmax + 1
  50              WEnd
  51              ;=================================================================================
  52  
  53              ;MsgBox(0,"INFO","$nbmax = " & $nbmax)
  54  
  55              ; Pour tenir compte de . et .. ???
  56              $nbmax = $nbmax + 2
  57  
  58              ;Tableau de $nbmax choix:
  59              ;$nbmax=100
  60              Dim $DOSSIER_TMP_HOME[$nbmax]
  61              Dim $DOSSIER_HOME[$nbmax]
  62  
  63              $DOSSIER="C:\Documents and Settings"
  64              ; Recherche des dossiers dans $DOSSIER
  65              ; (remarque: "." et ".." sont renvoyés).
  66              $recherche = FileFindFirstFile($DOSSIER & "\*.*")
  67  
  68              ; Si la recherche a renvoyé des réponses:
  69              If $recherche = -1 Then
  70                  MsgBox(0, "Erreur", "Aucun fichier/dossier ne se trouve dans " & $DOSSIER)
  71                  ;Exit
  72              EndIf
  73  
  74              $j = 1
  75              $i = 1
  76              While 1
  77                  $DOSSIER_TMP_HOME[$i] = FileFindNextFile($recherche)
  78                  If @error Then ExitLoop
  79  
  80                  ;MsgBox(0,"Info",$DOSSIER_TMP_HOME[$i])
  81                  If $DOSSIER_TMP_HOME[$i] == "." OR $DOSSIER_TMP_HOME[$i] == ".." OR $DOSSIER_TMP_HOME[$i] == @UserName OR $DOSSIER_TMP_HOME[$i] == "All Users" OR $DOSSIER_TMP_HOME[$i] == "Default User" OR $DOSSIER_TMP_HOME[$i] == "LocalService" OR $DOSSIER_TMP_HOME[$i] == "NetworkService" Then
  82                      $bidon = "On n'affiche pas."
  83                  Else
  84                      $DOSSIER_HOME[$j] = $DOSSIER_TMP_HOME[$i]
  85                      ;MsgBox(0,"Info","$DOSSIER_HOME[" & $j & "] = " & $DOSSIER_HOME[$j])
  86                      $j = $j + 1
  87                  EndIf
  88                  $i = $i + 1
  89              WEnd
  90  
  91              ; Fin de la recherche
  92              ; (Close the search handle)
  93              FileClose($recherche)
  94  
  95              $nbdossiers = $j - 1
  96  
  97  
  98  
  99  
 100              ;Include constants
 101              #include <GUIConstants.au3>
 102  
 103              ;Initialize variables
 104              Global $GUIWidth
 105              Global $GUIHeight
 106  
 107              $GUIWidth = 400
 108              ;$GUIHeight = 330
 109              $GUIHeight = 40 + $nbdossiers * 20 + 25 + 25 + 10
 110  
 111              If $GUIHeight < 170 Then
 112                  $GUIHeight = 170
 113              EndIf
 114  
 115              If $GUIHeight > @DesktopHeight Then
 116                  $GUIHeight = @DesktopHeight - 50
 117              EndIf
 118  
 119              ; Et si le nombre de dossiers est tel que la fenêtre dépasse la hauteur de l'écran?
 120              ; A FAIRE: Ajouter un test.
 121  
 122  
 123  
 124  
 125              $FENETRE="Quitte SambaEdu3"
 126              ; Création de la fenêtre
 127              GUICreate($FENETRE, $GUIWidth, $GUIHeight)
 128  
 129              ; Affichage d'un titre:
 130              ;$Label_info = GuiCtrlCreateLabel(" Choix des dossiers à supprimer dans 'C:\Documents and Settings'", 10, 10, 325, 20, $SS_SUNKEN)
 131              $Label_info = GuiCtrlCreateLabel(" Choix des dossiers à supprimer dans 'C:\Documents and Settings'", 10, 10, 325, 20)
 132  
 133  
 134              $x0=20
 135              $x1=35
 136              ;$x2=150
 137              $x2=200
 138  
 139              $y0=42
 140              $y1=40
 141  
 142              ; ========================
 143              $Check_quitte_se3 = GUICtrlCreateCheckbox("",$x2,$y1,10,10)
 144              $x3=$x2+15;
 145              $Label_quitte_se3 = GuiCtrlCreateLabel("Quitter le domaine", $x3, $y1, 130, 20)
 146              ControlCommand($FENETRE,"",$Check_quitte_se3,"Check","")
 147              ; ========================
 148  
 149              $Label_WORKGROUP = GuiCtrlCreateLabel("Nom du Workgroup à rejoindre:", $x2, $y1+20, 180, 20)
 150              $Champ_WORKGROUP = GUICtrlCreateInput($DEFAULT_WORKGROUP, $x2, $y1+40, 180, 20)
 151              $Label_WORKGROUP_INFO = GuiCtrlCreateLabel("(15 caractères maxi parmi A-Z 0-9 et -)", $x2, $y1+65, 180, 20)
 152  
 153  
 154  
 155  
 156  
 157              ;$x=($GUIWidth-2*70-35)/2
 158              $x=$x2+($GUIWidth-2*70-$x2-15)/2-10
 159  
 160              ; Création du bouton "OK"
 161              ;$OK_Btn = GUICtrlCreateButton("OK", 75, 165, 70, 25)
 162              $OK_Btn = GUICtrlCreateButton("OK", $x, $y1+85, 70, 25)
 163  
 164  
 165              $x=$x+70+15
 166  
 167              ; Création du bouton "CANCEL"
 168              ;$Cancel_Btn = GUICtrlCreateButton("Cancel", 165, 165, 70, 25)
 169              $Cancel_Btn = GUICtrlCreateButton("Cancel", $x, $y1+85, 70, 25)
 170  
 171  
 172  
 173  
 174  
 175  
 176  
 177              ;Tableau de $nbmax choix:
 178              ;$nbmax=25
 179              Dim $Check_DOSSIER[$nbmax]
 180              Dim $Label_DOSSIER[$nbmax]
 181  
 182  
 183              $i = 1
 184              For $i = 1 To $nbdossiers
 185                  $Check_DOSSIER[$i] = GUICtrlCreateCheckbox("",$x0,$y0,10,10)
 186                  ;$Label_DOSSIER[$i] = GuiCtrlCreateLabel($DOSSIER_HOME[$i], $x1, $y1, 80, 20)
 187                  $Label_DOSSIER[$i] = GuiCtrlCreateLabel($DOSSIER_HOME[$i], $x1, $y1, 130, 20)
 188                  If $DOSSIER_HOME[$i] == "adminse3" Then
 189                      ControlCommand($FENETRE,"",$Check_DOSSIER[$i],"Check","")
 190                  EndIf
 191                  ;MsgBox(0,"Info","$DOSSIER_HOME[" & $i & "] = " & $DOSSIER_HOME[$i])
 192                  $y0=$y1+20
 193                  $y1=$y0-2
 194              Next
 195  
 196  
 197              $y0=$y1+25
 198              ;MsgBox(0,"Info","$y0=" & $y0)
 199              If $y0 < 135 then
 200                  $y0 = 135
 201              EndIf
 202  
 203  
 204  
 205              ;$x=($GUIWidth-2*70-35)/2
 206  
 207              ; Création du bouton "OK"
 208              ;$OK_Btn = GUICtrlCreateButton("OK", 75, 165, 70, 25)
 209              ;$OK_Btn = GUICtrlCreateButton("OK", $x, $y0, 70, 25)
 210  
 211  
 212              ;$x=$x+70+35
 213  
 214              ; Création du bouton "CANCEL"
 215              ;$Cancel_Btn = GUICtrlCreateButton("Cancel", 165, 165, 70, 25)
 216              ;$Cancel_Btn = GUICtrlCreateButton("Cancel", $x, $y0, 70, 25)
 217  
 218  
 219  
 220  
 221              ; On rend la fenêtre visible (modification de statut)
 222              GUISetState(@SW_SHOW)
 223  
 224              ; On fait une boucle jusqu'à ce que:
 225              ; - l'utilisateur presse ESC
 226              ; - l'utilisateur presse ALT+F4
 227              ; - l'utilisateur clique sur le bouton de fermeture de la fenêtre
 228              While 1
 229                  ; Après chaque boucle, on contrôle si l'utilisateur a cliqué sur quelque chose
 230                  $msg = GUIGetMsg()
 231  
 232                  Select
 233                      ; On teste si l'utilisateur a cliqué sur le bouton de fermeture
 234                      Case $msg = $GUI_EVENT_CLOSE
 235                          ; On détruit la fenêtre et ses contrôles
 236                          GUIDelete()
 237                          ; Et on quitte le script
 238                          Exit
 239  
 240                      ; On teste si l'utilisateur a cliqué sur le bouton OK
 241                      Case $msg = $OK_Btn
 242  
 243                          $quitte_domaine=GUICtrlRead($Check_quitte_se3)
 244  
 245                          $DOSSIER_TMP = "C:\tmp"
 246                          DirCreate($DOSSIER_TMP)
 247                          $FICH = FileOpen($DOSSIER_TMP & "\quitte_se3.bat",2)
 248                          If $quitte_domaine == 1 Then
 249                              FileWriteLine($FICH,"cd " & @ScriptDir & "\outils" & @CRLF)
 250                              FileWriteLine($FICH,"call suppr_adminse3.vbs" & @CRLF)
 251                          EndIf
 252  
 253                          ;=======================================================
 254                          ; Récupération du contenu des champs de formulaire
 255  
 256                          For $i = 1 To $nbdossiers
 257                              $suppr_ou_pas = GUICtrlRead($Check_DOSSIER[$i])
 258                              If $suppr_ou_pas == 1 Then
 259                                  FileWriteLine($FICH,"rmdir ""c:\Documents and Settings\" & $DOSSIER_HOME[$i] & """ /q /s" & @CRLF)
 260                              EndIf
 261                          Next
 262  
 263                          If $quitte_domaine == 1 Then
 264                              FileWriteLine($FICH,"rmdir ""c:\netinst"" /q /s" & @CRLF)
 265  
 266                              ;FileWriteLine($FICH,"Set sCurrentName=%COMPUTERNAME%" & @CRLF)
 267                              ;FileWriteLine($FICH,"Set sDomainOld=SAMBAEDU3" & @CRLF)
 268                              ;FileWriteLine($FICH,"NETDOM.EXE REMOVE %sCurrentName% /D:%sDomainOld%" & @CRLF)
 269                          EndIf
 270  
 271                          If $quitte_domaine == 1 Then
 272                              For $i=0 To UBound($WPKG_files) - 1
 273                                  ;MsgBox(0,"Info","$WPKG_files["&$i&"]=" & $WPKG_files[$i])
 274                                  If FileExists(@WindowsDir & "\" & $WPKG_files[$i]) Then
 275                                      If FileRecycle(@WindowsDir & "\" & $WPKG_files[$i]) Then
 276                                          MsgBox(0,"Information","Suppression de " & @WindowsDir & "\" & $WPKG_files[$i] & " réussie.",1)
 277                                      Else
 278                                          MsgBox(0,"Erreur","La suppression de " & @WindowsDir & "\" & $WPKG_files[$i] & " a échoué.")
 279                                      EndIf
 280                                      ; On pourrait ajouter un test sur le fait qu'un processus utilise le fichier... ou tester la clé Running...
 281                                  EndIf
 282                              Next
 283  
 284                              $DOSSIER_A_VIRER=@WindowsDir & "\System32\GroupPolicy"
 285                              If FileExists($DOSSIER_A_VIRER) Then
 286                                  $suppr=DirRemove($DOSSIER_A_VIRER,1)
 287                                  If $suppr == 1 Then
 288                                      MsgBox(0, "Info", "Suppression de " & $DOSSIER_A_VIRER & " effectuée!", 1)
 289                                  Else
 290                                      ; Tentative de suppression recursive des fichiers
 291                                      MsgBox(0, "Erreur", "Echec de la suppression de " & $DOSSIER_A_VIRER & @CRLF & "On va tenter de supprimer les fichiers de cette arborescence...",3)
 292                                      
 293                                      ;#include(@ScriptDir & "_FileListToArrayEx.au3")
 294                                      ;#include("_FileListToArrayEx.au3")
 295                                      #include <_FileListToArrayEx.au3>
 296                                      $sPath=$DOSSIER_A_VIRER
 297                                      $sFilter = '*.*'
 298                                      $iFlag=1
 299                                      $sExclude = ''
 300                                      $iRecurse=True
 301                                      $TAB=_FileListToArrayEx($sPath, $sFilter, $iFlag, $sExclude, $iRecurse)
 302                                      ;$TAB=_FileListToArray($sPath,$sFilter,$iFlag)
 303                                      For $i = 1 To UBound($TAB) -1
 304                                          If FileRecycle($TAB[$i]) Then
 305                                              ;MsgBox(0,"Info","Suppression du fichier $TAB["&$i&"]=" & $TAB[$i])
 306                                              MsgBox(0,"Info","Suppression du fichier " & $TAB[$i] & " effectuée.",1)
 307                                          Else
 308                                              MsgBox(48,"Erreur","Echec de la suppression du fichier " & $TAB[$i],"3")
 309                                          EndIf
 310                                      Next
 311                                  EndIf
 312                              EndIf
 313                              
 314                              $LISTE_MENAGE_FICHIERS=@ScriptDir & "\outils\liste_menage.txt"
 315                              If FileExists($LISTE_MENAGE_FICHIERS) Then
 316                                  $FICH_MENAGE=FileOpen($LISTE_MENAGE_FICHIERS,0)
 317                                  If $FICH_MENAGE = -1 Then
 318                                      MsgBox(0, "Erreur", "Il n'a pas été possible d'ouvrir le fichier" & @CRLF & "'" & $LISTE_MENAGE_FICHIERS & "'!")
 319                                  Else
 320                                      While 1
 321                                          $LIGNE = FileReadLine($FICH_MENAGE)
 322                                          If @error = -1 Then ExitLoop
 323                                          If $LIGNE <> "" And FileExists($LIGNE) Then
 324                                              If FileRecycle($LIGNE) Then
 325                                                  MsgBox(0,"Information","Suppression de " & $LIGNE & " réussie.",1)
 326                                              Else
 327                                                  MsgBox(48,"Erreur","La suppression de " & $LIGNE & " a échoué.")
 328                                              EndIf
 329                                          EndIf
 330                                      WEnd
 331                                  EndIf
 332                              Else
 333                                  MsgBox(0, "Info", "Aucun fichier optionnel de ménage de fichiers " & @CRLF & "'" & $LISTE_MENAGE_FICHIERS & "' n'a été trouvé!")
 334                              EndIf
 335                          EndIf
 336                          
 337  
 338                          $NOM_WORKGROUP = GUICtrlRead($Champ_WORKGROUP)
 339                          If $NOM_WORKGROUP == "" Then
 340                              ; On ne fait rien
 341                              $bidon="oui"
 342                          Else
 343                              FileWriteLine($FICH,"cd " & @ScriptDir & "\outils" & @CRLF)
 344                              If StringIsAlNum(StringReplace(StringReplace($NOM_WORKGROUP,"-",""),"_","")) AND StringLen($NOM_WORKGROUP)<16 Then
 345                                  FileWriteLine($FICH,"call rejoin_workgrp2.vbs " & $NOM_WORKGROUP & @CRLF)
 346                              Else
 347                                  FileWriteLine($FICH,"call rejoin_workgrp2.vbs " & $DEFAULT_WORKGROUP & @CRLF)
 348                              EndIf
 349  
 350                              ; Faire rebooter l'OS:
 351                              FileWriteLine($FICH,"call reboot.vbs" & @CRLF)
 352                          EndIf
 353  
 354                          ;FileWriteLine($FICH,"" & @CRLF)
 355  
 356                          FileClose($FICH)
 357  
 358                          RunWait($DOSSIER_TMP & "\quitte_se3.bat")
 359  
 360                          ; La suppression ne fonctionne pas.
 361                          ; Le reboot est précédé d'une fermeture des applis en cours...
 362                          ;FileRecycle($DOSSIER_TMP & "\quitte_se3.bat")
 363                          ;FileRecycleEmpty()
 364  
 365                          GUIDelete()
 366                          ExitLoop
 367  
 368  
 369                      ; On teste si l'utilisateur a cliqué sur le bouton CANCEL
 370                      Case $msg = $Cancel_Btn
 371                          MsgBox(64, "Abandon!", "Vous avez souhaité abandonner l'opération.")
 372                          GUIDelete()
 373                          Exit
 374                  EndSelect
 375              WEnd
 376          EndIf
 377      Else
 378          MsgBox(48,"Information","Ce programme doit être exécuté" & @CRLF & "avec les droits administrateur.")
 379          Exit
 380      EndIf
 381  EndIf
 382  
 383  Exit


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