[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |