Les scripts d'ouverture de session

avec Kixtart 2001 V4.10

 

Cette page explique comment utiliser Kixtart pour les scripts d'ouverture de session.

 

Pour la présentation générale concernant les scripts d'ouverture de session avec Kixtart, veuillez vous référer à la page concernant la version 3.63 de Kixtart.

Nous irons donc directement à l'exemple que j'utilise actuellement sur un parc de plus de 200 machines dont la majorité est en Windows 98SE.

 

EXPLICATIONS

Le fichier présenté est enregistré sous le nom de "MainScript.bat".

L'exemple présenté est actuellement en exploitation. Il permet :

 

MISE EN OEUVRE

Dans le cas précis de ma méthode de travail, j'ai créé 2 fichiers strictements identiques. Le premier nommé "MainScript.bat" et le second "MainScriptd.bat" ; celui-ci me servant pour le débuggage.

Concernant le paramètrage pour les utilisateurs, le script exécuté est nommé "LogCOMMON.bat" pointant sur un second, ce qui me permet de définir un groupe d'utilisateurs "test" pour débugger et valider mon code ; ceux-ci ayant alors pour script "LogCOMMONd.bat".

Pour l'architecture "réseau", les applications se trouvent sur un serveur appelé "FILER" (variable SRVInst). Une arborescence appropriée permet d'y classer les applications utilisées.

 

LogCOMMON.bat
LogCOMMONd.bat

@echo off
@rem Par Laurent - le 24 août 2001.
@rem ========================
@rem
@rem
@rem Lancement de KixTart
@%0\..\Kix32 MainScript.bat

@echo off
@rem Par Laurent - le 24 août 2001.
@rem ========================
@rem
@rem
@rem Lancement de KixTart
@%0\..\Kix32 MainScriptd.bat /d

 

La différence réside dans la ligne de commande où le scripts de débuggage invoque le second script de débuggage avec le paramètre "/d", permettant de faire fonctionner en mode "pas-à-pas".

 

Exemple de contenu de la ressource NETLOGON (ne sont pas présents les fichiers nécessaires de KixTart) :

LOGCOM~1 BAT        666    25/08/00 15:51   LogCOMMON.bat
LOGCOM~2 BAT        667    23/10/00 13:17   LogCOMMONd.bat
MAINSC~1 BAT     28 383    10/11/00 14:16   MainScript.bat
DUPONT BAT          112    01/09/00 20:05   Dupont.bat
DURANT BAT          112    01/09/00 20:05   Durant.bat
MAINSC~2 BAT     28 383    10/11/00 14:15   MainScriptd.bat

 

Fichier MainScript.bat :

;On cache la fenêtre "Command" lors du script
$RC=SetConsole ("HIDE")
;
; ======================================================
; Script d'ouverture de session : fichier MainScript.bat
; Créé le 15/10/2001
; ======================================================
;
;
; ----------------------------------------------------------
; A utiliser avec Kixtart 2001 V4.10 ou supérieur
;
; Ce script doit être dans tous les répertoire NETLOGON de chaque contrôleur de domaine.
; (racine_système\WINNT\SYSVOL\domain\scripts)
; Il en est de même pour Kixtart.
;
; MAIL2 est le Contrôleur du domaine
;
; Pour autoriser ou interdire le passage dans une section, il faut avant tout créer des groupes globaux au niveau
; du domaine. Il suffit alors de mettre les utilisateurs qui ne seront pas concernés par une section dans le groupe
; correspondant.


; Déclaration de variables générales
; ----------------------------------
$Taille_Max = 5000 ; Taille max (en KO) du fichier de Log

$EIPhone = " Pour toute question ou aide, appeler le Service Technique au 3030."
$LogPath = "\\MAIL2\log\"
$RegPath="HKLM\SOFTWARE\"
$EIRep="$EI$"

$TITLE="Message Système"

$LecteurPerso= "P:"
$LecteurAppli= "S:"
$LecteurTravail= "T:"

$TAB=Chr(9) ; Tabulation
$CR = Chr(10) ; Retour chariot

$SRVPerso="\\perso" ; Serveur des dossiers perso des utilisateurs
$SRVTime="\\MAIL2" ; Serveur de temps
$SRVInst="\\FILER" ; Serveur d'installation, de softs et de patchs
$SRVFich="\\Filer" ; Serveur de fichiers de la société

$PathFich=$SRVFich + "\Filer" ; Chemin d'accès aux dossiers de travail

$MailInfo="liste-technique" ; Service technique

$Bureau="C:\Windows\bureau"
$QuickLaunch="C:\Windows\Application Data\Microsoft\Internet explorer\Quick Launch"

; **************************************************************************************************
; *********************************** Les fonctions définies *********************************************
; **************************************************************************************************


Function SetKey9x($KeyID, $Entry, $Value, $Type)
; Positionne la valeur d'une clef de la BDR
; Uniquement pour les machines 9x
   If @INWIN=2
      $szKeyID=""
      If KeyExist($KeyID)
         If Not ExistValueBDR($KeyID,$Entry)
            WRITEVALUE ($KeyID, $Entry,$Value, $Type)
         Else
            $szKeyID = ReadValue($KeyID, $Entry)
            If @ERROR = 0 AND $szKeyID <> $Value
               WriteValue($KeyID, $Entry ,$Value ,$Type)
            EndIf
         EndIf
      EndIf
   EndIf
EndFunction


Function Replace($SourceString, $SearchString, $ReplaceString, Optional $First, Optional $CaseSensitive)
; Effectue le remplacement d'une chaine par une autre.
   Dim $String1
   Dim $String2
   Dim $Finished
   $Finished = 0
   $Counter = 0
   $String1 = $SourceString
   If $CaseSensitive
      $PreviousState = SetOption("CaseSensitivity", "On")
   EndIf
   While Not $Finished
         $String2 = $String1
         $Location = InStr($String1, $SearchString)
         If $Location > 0
            $String1 = Substr($String1, 1, $Location - 1) + $ReplaceString + Substr($String1, $Location + Len($SearchString), Len($SourceString) - $Location + Len($SearchString) + 1)
         Else
            $Finished = 1
         EndIf
         If $First
            $Finished = 1
         EndIf
         If $String1 = $String2
            $Finished = 1
         EndIf
   Loop
   $Replace = $String1
   $barul = SetOption("CaseSensitivity", $PreviousState)
EndFunction


Function Reboot($Lepatch)
; Utilise le dossier $EIRep
; Crée un fichier "Rebooted" pour informer que l'on vient de rebooter
; Informe qu'il faut rebooter et reboot.
   Dim $tmp, $Mes

   $tmp="Mise à jour : " + $Lepatch
   $Mes="ATTENTION..." + $CR + $CR + $CR
   $Mes=$Mes + "Votre machine vient d'être mise à jour." + $CR + $CR
   $Mes=$Mes + "Pour que les modifications prennent effet, il faut que l'ordinateur" + $CR
   $Mes=$Mes + "soit réinitialisé." + $CR + $CR
   $Mes=$Mes + "Si la machine reste bloquée, veuillez l'éteindre puis la rallumer." + $CR + $CR
   $Mes=$Mes + "Cliquez sur OK ou attendez 15 secondes pour que la machine redémarre."
   FLUSHKB
   $return = MessageBox($Mes,$tmp,4160,15)
   If Not Exist("@LANROOT\$EIRep\Rebooted")
      If OPEN (1, "@LANROOT\$EIRep\Rebooted", 5) = 0
         WRITELINE(1,"Cree par laurent BONNIN - http://www.autourdupc.com")
         Close (1)
      Endif
   EndIf
   shell "rundll32.exe shell32.dll,SHExitWindowsEx 6"
EndFunction


Function MAX($value1,$value2) ; ******************************************
   If $value1 > $value2
      $MAX=$value1
   Else
      $MAX=$value2
   EndIf
EndFunction

Function GetFolderSize($path) ; ******************************************
   DIM $fso, $fold
   $GetFolderSize = -3
   if exist($path) = 1
      $FSO = createobject("scripting.filesystemobject")
      $fold = $fso.getfolder($path)
      $GetFolderSize = $fold.size
      exit(0)
   Else
      exit(3)
   endif
EndFunction

Function ExistValueBDR($_Key,$_Value) ; ********************************************
; Permet de tester l'existance d'une valeur dans une clef.
; Retourne 1 si trouvée sinon 0
   Dim $_index, $_val

   $_index = 0
   :Loop1
   $_Val = ENUMVALUE($_Key, $_index)
   If @ERROR = 0
      If UCASE($_Value) = UCASE($_Val)
          $ExistValueBDR=1
          Return
      Else
          $ExistValueBDR=0
          $_index = $_index + 1
          goto Loop1
      Endif
   Else
      $ExistValueBDR=0
      Return
   Endif
EndFunction


Function SendMail($Sujet,$To,$Message) ; ********************************************
; Envoie un mail à l'aide de l'utilitaire "postie.exe"
   Dim $Corps, $Cmd
   $Corps=CHR(34) + $Message + CHR(34)
   $Sujet=CHR(34) + $Sujet + CHR(34)
   $Cmd= @LDRIVE + "\postie -host:mailer.domaine.fr "
   $Cmd=$Cmd + "-to:" + $To + "@@domaine.fr -from:system-session "
   $Cmd=$Cmd + "-s:" + $Sujet + " -msg:" + $Corps
   shell "%comspec% /e:1024 /c "+ $Cmd
EndFunction

; *********************************************************************************************
; *********************************** Début du script *********************************************
; *********************************************************************************************

;On cache la fenêtre "Command" lors du script
;$RC=SetConsole ("HIDE")

; Mise à l'heure de la machine
SETTIME $SRVTime

; On crée un repertoire ds chaque PC qui se connecte. On pourra y placer des données
If Not Exist("@LANROOT\$EIRep\*.*")
   MD "@LANROOT\$EIRep"
EndIf

; On regarde si on vient d'un reboot ou d'un démarrage standard
; Si un fichier "Rebooted" existe, l'efface
If Exist("@LANROOT\$EIRep\Rebooted")
    Del "@LANROOT\$EIRep\Rebooted"
    $IsReboot=1
Else
    $IsReboot=0
EndIf

; ----------------------------------------------------------------------
; - DEFINIR UN SERVEUR NT COMME SERVEUR DE TEMPS -
; - -------------------------------------------- -
; - Dans la base de registre, localiser la clef suivante : -
; - -
; - HKLM\SYSTEM\CurrentControlSet\Services\LanManServer\Parameters -
; - -
; - Depuis le menu Edition, sélectionner "Ajouter une valeur." -
; - -
; - Nom de la valeur : TimeSource -
; - Type de donnée : REG_DWORD -
; - Chaîne : 1 -
; - -
; - Sélectionner OK et quitter l'éditeur du registre. -
; - -
; - Redémarrer Windows NT. -
; ----------------------------------------------------------------------
;
;Rebooter une machine 9x
;-----------------------
; rundll32.exe shell32.dll,SHExitWindowsEx n
; where n is one, or a combination of, the following numbers:
; 0 - LOGOFF
; 1 - SHUTDOWN
; 2 - REBOOT
; 4 - FORCE
; 8 - POWEROFF
; These are cumulative, so 6, for example, would force a reboot.
;
;
;
; ====================================
; Traitement du fichier de log général
; ====================================
;
$SEP=$TAB
; Fichier qui peut être importé dans EXCEL avec séparateurs à $SEP et texte en mode "Windows ANSI"
; La date est au format "JJ/MM/AAAA"
; ATTENTION : on consultera toujours la copie de ce fichier qui est PublicLog.txt
;
; Gestion des fichiers de log. Un fichier est créé par mois
; Le nom du fichier est du type : Log_m_yyyy.txt avec m : mois (1..12) et yyyy : année
$FileLog=$LogPath + "Log_" + @MONTHNO + "_" + @YEAR + ".txt"
$FileLogBIS=$LogPath + "PublicLog.txt"

; Teste la présence du fichier du mois en cours.
; Si présent l'utilise, sinon c'est que le mois a changé et donc en créé un nouveau
$tmp= "Date" + $SEP + "Heure" + $SEP + "Utilisateur" + $SEP + "Machine" + $SEP + "Type machine" + $SEP
$tmp= $tmp + "OS" + $SEP + "SP Version" + $SEP + "Langue" + $SEP + "Version IE" + $SEP
$tmp= $tmp + "Mem (MO)" + $SEP + "CPU (Mhz)" + $SEP + "Adr.IP" + $SEP + "Adr.MAC" + $SEP
$tmp= $tmp + "Serveur de session" + $SEP + "Accès modem" + $SEP + "ID EI"
If Not Exist($FileLog)
    If OPEN (1, $FileLog, 5) = 0
      WriteLine (1,$tmp)
      close (1)
      DEL $FileLogBIS
   Endif
Endif

; Detection d'une connexion modem ou réseau
; -----------------------------------------
$DIALUPREG=ReadValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess", "REMOTE CONNECTION")
If $DIALUPREG = 01000000
   $DIALUP = "Oui"
Else
   $DIALUP = "Non"
EndIf

; Détection du type d'OS
; ----------------------
$Svcpack="-"
$TypePC="-"
If @inwin=1 ; Win NT et supérieur
   ; Check de la version de NT (NT, 2000, XP, .NET)
   $TypeWin=""
   if 0<>INSTR(@PRODUCTTYPE,"NT")
      $TypeWin="NT"
   EndIf
   if 0<>INSTR(@PRODUCTTYPE,"2000")
      $TypeWin="2000"
   EndIf
   if 0<>INSTR(@PRODUCTTYPE,"XP")
      $TypeWin="XP"
   EndIf
   if 0<>INSTR(@PRODUCTTYPE,".NET")
      $TypeWin=".NET"
   EndIf

   ; Check du type de PC
   If KeyExist("HKLM\SYSTEM\CurrentControlSet\Services\Pcmcia")
      $TypePCReg=ReadValue("HKLM\SYSTEM\CurrentControlSet\Services\Pcmcia", "Start")
      If $TypePCReg="4"
         $TypePC="PC de bureau"
      EndIf
      If $TypePCReg="0"
         $TypePC="Portable"
      EndIf
   EndIf

   ; Check des commentaires (numéro d'affectation EI)
   $IdEI="-" ; Pas dispo pour NT
Else ; Win9x
   ; Check du type de PC
   If KeyExist("HKLM\Enum\Pcmcia")
      $TypePC="Portable"
   Else
      $TypePC="PC de bureau"
   EndIf

   ; Check des commentaires (numéro d'affectation EI)
   If KeyExist("HKLM\System\CurrentControlSet\Services\VxD\VNETSUP")
      $IdEI=ReadValue("HKLM\System\CurrentControlSet\Services\VxD\VNETSUP", "Comment")
   EndIf
EndIf


; Détection de la langue de l'OS
; ------------------------------
$Langue = substr(@USERLANG, 5, LEN (@USERLANG))


; Détection de la quantité mémoire installée
; ------------------------------------------
$mem=MemorySize()


; Détection du type + vitesse CPU
; -------------------------------
; Pour les machines NT
$cpu=@CPU
If @inwin=1
   $cpu=$cpu + " - " + @MHZ + " Mhz"
EndIf


; Tests et corrections diverses
; -----------------------------
If @inwin=1 ; Pour NT
   ; Détermine si c'est un contrôleur de domaine ou non
   ; La variable PRODUCTTYPE contient la définition du type de PC, par exemple, "Windows XP Domain Controller"
   ; On teste donc la chaine de caractères
   If 0=INSTR(@PRODUCTTYPE, "Domain Controller")
      $IS_CONTROLLER=0
   Else
      $IS_CONTROLLER=1
   EndIf
   $Version=""
   $Svcpack=@CSD
Else ;Pour 9x
   ; Pour Windows 98SE, corrige le fait qu'il renvoie A pour le Service Pack
   If @CSD=" A "
      $Version="SE"
      $Svcpack="-"
   EndIf
EndIf


; Détection de la version d'IE
; ----------------------------
$IE="-"
$KeyID=$RegPath + "Microsoft\Internet Explorer"
If KeyExist($KeyID)
   $IE = ReadValue($KeyID, "Version") ; On attend qque chose comme "6.0.2600.0000" ou "5.00.xxxx.xx"
   $Myarray = Split($IE, ".",2)
   $IE=$Myarray[0] + "." + $Myarray[1]
EndIf


; Calcul de l'adresse IP
; ----------------------
; Détermine l'adresse IP de la machine qui se loggue.
; En fonction de son appartenance, autorise ou non le script
; dans sa totalité, afin de ne pas modifier les serveurs par exemple.
; Positionne la viriable $FlagNoSession=0 --> Pas de script
; 1 --> Exécution normale
;
; Il peut y avoir plusieurs cartes réseau, donc on regarde les 4 cartes possibles
; On repère celle qui commence par 10.64
If " 10. 64"<> SUBSTR(@IPADDRESS0,1,7)
   if " 10. 64"<> SUBSTR(@IPADDRESS1,1,7)
      if " 10. 64"<> SUBSTR(@IPADDRESS2,1,7)
         if " 10. 64"<> SUBSTR(@IPADDRESS3,1,7)
            $IP="255.255.255.255"
         else
            $IP=@IPADDRESS3
         EndIf
      else
         $IP=@IPADDRESS2
      EndIf
   else
      $IP=@IPADDRESS1
   EndIf
else
   $IP=@IPADDRESS0
EndIf

$Res=VAL(SUBSTR($IP,9,3)) ; Lecture du réseau
$FlagNoSession=0 ; Autorise le script

;En fonction du 3ième octet de l'@IP, traitement...
Select
   Case $Res=1 ; Serveurs
            $FlagNoSession=1
            $Mes="ATTENTION..." + $CR + $CR + $CR
            $Mes=$Mes + "Vous êtes loggé sur une machine serveur avec votre compte utilisateur." + $CR + $CR
            $Mes=$Mes + "Afin de ne pas modifier les paramètres du serveur" + $CR
            $Mes=$Mes + "aucun script d'ouverture de session ne sera exécuté." + $CR + $CR
            $Mes=$Mes + "Vous n'aurez donc pas de lecteurs mappés." + $CR
            $return = MessageBox($Mes,$TITLE,64)
   Case $Res=2 ; Switchs & routeurs
            $FlagNoSession=1
   Case $Res=3 ; Imprimantes
   Case $Res=4 ; N/A
   Case $Res=5 ; Staff technique
   Case $Res=6 ; N/A
   Case $Res=7 ; N/A
   Case $Res=8 ; N/A
   Case $Res=9 ; Personnel avec accès spécifiques
   Case $Res=10 ; Personnel EI
   Case 1
            $FlagNoSession=0
EndSelect

; Gestion du fichier de Log. Si on peut y écrire, c'est OK sinon, on ne le gère pas
; ---------------------------------------------------------------------------------
$i=0
:WaitLog
; Si le fichier n'est pas accessible, on attend 3 boucles de 2 secondes
; Passé ce délai, on ne gère pas le fichier de log.
If OPEN (1, $FileLog, 4) = 0
   $tmp= $CR + "@MDAYNO" + "/" + @MONTHNO + "/" + @YEAR + $SEP + @TIME + $SEP + @FULLNAME
   $tmp= $tmp + $SEP + @WKSTA + $SEP + $TypePC + $SEP + @PRODUCTTYPE + $Version + $SEP
   $tmp= $tmp + $Svcpack + $SEP + $Langue + $SEP + "IE" + $IE + $SEP + $mem + $SEP + $cpu + $SEP
   $tmp= $tmp + $IP + $SEP + @ADDRESS + $SEP + @LSERVER + $SEP + $DIALUP + $SEP + $IdEI
   WRITELINE(1,$tmp)
   Close (1)

   ; Copie le fichier de log dans un autre fichier. Seul ce second fichier doit être consulté afin de ne
   ; pas bloquer le log des machines lors de la consultation.
   COPY $FileLog $FileLogBIS

   ; Teste la taille du fichier de Log et envoie un message aux personnes concernées (Service technique)
   If INGROUP("Svce_Informatique")
      $Taille_Log = GetFileSize("$LogPath\Log.txt")
      $Taille_Log = $Taille_Log / 1024
      If $Taille_Log > $Taille_Max
         $Mes="La taille actuelle du fichier de Log (" + $Taille_Log + " KO) "
         $Mes=$Mes + "dépasse la limite de " + $Taille_Max + " KO imposée."
         $return = MESSAGEBOX($Mes,$TITLE, 48)
         ; SendMail("Taille fichier de log",$MailInfo,$Mes)
      EndIf
   Endif
Else
   $i=$i+1
   If $i > 3
      Goto PasDeLog
   Else
      Sleep 2
      goto WaitLog
   EndIf
Endif

:PasDeLog
; ==================================================================
; FIN de la gestion du fichier de log
; ==================================================================
;
if $FlagNoSession ; Quitte le script
   EXIT 1
EndIf
;
;
; Détection du plot
; -----------------
$Plot=left(@WKSTA,3)
;
;
;
; ====================================
; Suppression des fichiers temporaires
; ====================================
; Créés dans le répertoire temp de windows
; uniquement pour les machines 9x.
If @INWIN=2 ;Win9x
   If $IsReboot=1 ;Viens d'une installation, sélection des fichiers
      DEL "C:\Windows\Temp\*.tmp"
      DEL "C:\Windows\Temp\*.wbk"
      DEL "C:\Windows\Temp\~*.*"
      DEL "C:\Windows\Temp\*.htm"
   Else
      DEL "C:\Windows\Temp\*.*"
      DEL "C:\Windows\*.pwl"
      DEL "C:\*.chk"
   EndIf
EndIf

; Mise en place des lecteurs mappés
; ---------------------------------
USE $LecteurPerso $SRVPerso + "\" + @USERID + "$"
USE $LecteurTravail $PathFich
;
;
; --------------------------
; Déploiement d'applications
; --------------------------
;
; ********* LANDPARK
; ******************
$RepSrc=$SRVInst + "\IPClients$\"
SHELL "%comspec% /e:1024 /c $RepSrc\Lance.bat"

; ==================================================================
; GESTION des patchs
; ==================================================================
;
; On ne gère que les machines 9x.
; On met les Vxd manquants dans le dossier Windows\system
; On installe les patchs 1 par 1 avec reboot entre chaque installation.
; Il n'y a pas de reboot cascadés. La machine est rebootée une fois
; puis l'utilisateur peut travailler.
; C'est au démarrage prochain qu'il y aura une nouvelle installation
; si besoin.
;
If @INWIN=1 OR $IsReboot OR $Version<>"SE" OR $langue<>"French"
   Goto End_PATCH ; Machines NT ou reboot, on saute
EndIf

$cmd=""
$arg = " /Q:A /R:N" ; Installation silencieuse

; ---------------------------
; Installation de DirectX

$FixPath=$SRVInst + "\Gratuits\SP_et_patch\Win98SE\DirectX81a\"
$regKey=$RegPath + "Microsoft\DirectX\"

; Lecture de la version installée
$VerInst = ReadValue($regKey, "Version")
If @error=0
   $VerInst=VAL(Replace(SUBSTR($VerInst,3,5),".","")) ; Ver8.1a = 4.08.01.0881
Else
   $VerInst=0
EndIf

$cmd = $FixPath + "DX81frn.exe"

; Lecture de la version du package
If Exist ($cmd) AND $VerInst<>0
   $PatchVer=GetFileVersion($cmd, "FileVersion")
   $PatchVer=VAL(Replace(SUBSTR($PatchVer,3,5),".","")) ; Ver8.1a = 4.08.01.0881
   If $VerInst>=$PatchVer
      $cmd=""
   EndIf
Else
   $cmd=""
EndIf


If $cmd <> "" ; On doit effectuer une installation
   shell "%COMSPEC% /e:1024 /c " + $cmd + $arg
   ; Attend que le patch soit installé
   sleep(1)
   ; Pour que la machine n'installe pas de patch au log suivant.
   If Not Exist("@LANROOT\$EIRep\Rebooted")
      If OPEN (1, "@LANROOT\$EIRep\Rebooted", 5) = 0
         WRITELINE(1,"Cree par laurent BONNIN - http://www.autourdupc.com")
         Close (1)
      Endif
   EndIf

   $Mes="ATTENTION..." + $CR + $CR + $CR
   $Mes=$Mes + "Votre machine est en train d'être mise à jour." + $CR + $CR
   $Mes=$Mes + "Pour que les modifications prennent effet, l'ordinateur" + $CR
   $Mes=$Mes + "devra être réinitialisé." + $CR + $CR
   $Mes=$Mes + "Ne tentez pas de travailler tant que vous n'êtes pas" + $CR
   $Mes=$Mes + "invité à redémarrer."
   FLUSHKB
   $return = MessageBox($Mes,"Mise à jour : DirectX8.1a",64,15)
   EXIT 1
EndIf


; Installation des patchs systèmes
; --------------------------------
dim $FixTab[50]
$VxdPath=$SRVInst + "\Gratuits\SP_et_patch\Win98SE\Vxd manquants\"
$FixPath=$SRVInst + "\Gratuits\SP_et_patch\Win98SE\"
$regKey=$RegPath + "Microsoft\Windows\CurrentVersion\Setup\Updates\"

$VredirPath=$SRVInst + "\Gratuits\SP_et_patch\Win98SE\Vredir\"

$FixTab[0]="Win98.SE"
$FixTab[1]="UPD239887"
$FixTab[2]="4756FR8.exe" ; Shutdown supplement (Pb arrêt)
$FixTab[3]="Win98.SE"
$FixTab[4]="UPD242934"
$FixTab[5]="242934frn8.exe" ; Broadcast lors du shutdown (Pb arrêt)
$FixTab[6]="Win98.SE"
$FixTab[7]="UPD238453"
$FixTab[8]="238453fr8.exe" ; Fragmentation des paquets IGMP (PC fige)
;
$FixTab[9]="W98.SE"
$FixTab[10]="UPD243199"
$FixTab[11]="243199frn8.exe" ; Intermediate NDIS drivers (Pb arrêt)
$FixTab[12]="W98.SE"
$FixTab[13]="UPD259728"
$FixTab[14]="259728frn8.exe" ; Fragmentation des paquets IP
$FixTab[15]="W98.SE"
$FixTab[16]="UPD260067"
$FixTab[17]="260067frn8.exe" ; Lecteurs mappés (PC fige)
$FixTab[18]="W98.SE"
$FixTab[19]="UPD273017"
$FixTab[20]="273017frn8.exe" ; Cache des HDD lors de l'arrêt (scandisk au reboot)
;
$FixTab[21]="W98.SE"
$FixTab[22]="UPD259253" ; Avec antivirus, figeage lors d'un reboot
$FixTab[23]="259253frn8.exe"
$FixTab[24]="W98.SE"
$FixTab[25]="UPD263891" ; Erreur de pile lors du reboot en mode MS-DOS
$FixTab[26]="263891frn8.exe"
$FixTab[27]="W98.SE"
$FixTab[28]="UPD273991" ; Share Level Password (Vulnérabilité)
$FixTab[29]="273991frn8.exe"
;
$FixTab[30]="W98.SE"
$FixTab[31]="UPD293793" ; OE exeption (Lect mappé sur partage 2000)
$FixTab[32]="293793FRN8.EXE"
;
$arg = " /Q:A /R:N" ; Installation silencieuse

; Cherche le dernier élément du tableau
For $i=0 to UBOUND($FixTab)
   If $FixTab[$i]<>""
      $i_Max=$i
   EndIf
Next $i

; Pour tester l'installation correcte des Vxd, on teste la présence d'un seul.
If Not Exist("@LANROOT\vmouse.vxd")
   Copy $VxdPath + "*.*" @LANROOT
   Reboot("Vxd Systèmes")
   Goto End_PATCH
EndIf

; Pour tester l'existence d'un correctif, il faut vérifier la présence de
; sa clef.

; Check la BDR pour l'existence des clefs d'installation
; et aussi de l'existence du patch sur le serveur
For $i=0 to $i_Max step 3 ; Patchs à mettre en place
   $LaClef=$regKey + $FixTab[$i] + "\" + $FixTab[$i+1]
   $cmd = $FixPath + $FixTab[$i+2]
   If Exist ($cmd) AND Not KeyExist ($LaClef)
      $tmp=$FixTab[$i+1]
      $i=$i_Max ; Permet de sortir --> Une seule installation
   Else
      $cmd=""
      $tmp=""
   EndIf
Next $i

If $cmd <> "" ; On doit effectuer une installation
   shell "%COMSPEC% /e:1024 /c " + $cmd + $arg
   ; Attend que le patch soit installé
   While Not KeyExist ($LaClef)
      sleep(1)
   Loop
   sleep(1)
   Reboot($tmp)
EndIf

:End_PATCH

; ---------------------------
; Installation des patchs IE6
; ---------------------------
If VAL($IE)>=6 AND $IsReboot=0 AND $langue="French" AND @INWIN=2
   dim $FixTab[10]
   $cmd=""
   $tmp=""

   $FixPath=$SRVInst + "\Gratuits\SP_et_patch\IE6\Patchs\"
   $regKey=$RegPath + "Microsoft\Windows\CurrentVersion\Internet Settings\"

   ; NB : il ne faut pas laisser les anciens patchs s'ils se remplacent !
   $FixTab[0]="Q321232" ; Cumulatif du 15 mai 2002
   $FixTab[1]="Q321232.exe"
   ;

   If @INWIN=2 ; Machines 9x
      $arg = " /Q:A /R:N" ; Installation silencieuse sans reboot
   Else
      $arg = " /Q:A" ; Installation silencieuse avec reboot
   EndIf

   ; Cherche le dernier élément du tableau
   For $i=0 to UBOUND($FixTab)
      If $FixTab[$i]<>""
         $i_Max=$i
      EndIf
   Next $i

   ; Pour tester l'existence d'un correctif, il faut vérifier sa présence dans une clef.

   ; Check la BDR pour l'existence de l'info d'installation
   ; et aussi de l'existence du patch sur le serveur


   For $i=0 to $i_Max step 2 ; Patchs à mettre en place
      If ExistValueBDR($regKey,"MinorVersion")
         $szKeyID=ReadValue($regKey,"MinorVersion")
         $Exist=InStr(UCASE($szKeyID), UCASE($FixTab[$i]))
      Else
         $Exist=0
      EndIf

      If $Exist=0
         $cmd = $FixPath + $FixTab[$i+1]
         If exist ($cmd)
            $tmp="Sécurité d'IE6"
            $i=$i_Max ; Permet de sortir --> Une seule installation
         Else
            $cmd=""
         EndIf
      EndIf
   Next $i

   If $cmd <> "" ; On doit effectuer une installation
      shell "%COMSPEC% /e:1024 /c " + $cmd + $arg
      ; Attend que le patch soit installé
      Do
         sleep(1)
         $szKeyID=ReadValue($regKey,"MinorVersion")
      Until 0 < InStr($szKeyID, $FixTab[$i])
      sleep(5)
      If @INWIN=2 ; Uniquement pour les machines 9x reboot
         Reboot($tmp)
      EndIf
   EndIf
EndIf

:End_IE

; ==================================================================
; GESTION de NORTON
; ==================================================================
;
If @INWIN=2 ;uniquement pour les machines 9x
   ; Les variables...
   $SetupNORTON="\\filer\Norton\Nav732.exe" ; Dossier en partage lecture seule.
   $RunGood=$RegPath + "Microsoft\Windows\CurrentVersion\Run"
   $RunNotGood=$RunGood + "-"
   $RunServicesGood=$RegPath + "Microsoft\Windows\CurrentVersion\RunServices"
   $RunServicesNotGood=$RunServicesGood + "-"
   $FlagNORTON=@LANROOT+ "\" + $EIRep + "\NORTON.dat"
   $NotGood=0 ; Flag pour savoir si afficher message
   $InstNORTON=0 ; Flag pour savoir si réinstaller NORTON
   $KeyNORTONGood=0 ;Flag pour vérifier que la clef de NORTON est OK

   ; Teste l'installation de Norton (clef)
   If KeyExist ($RegPath + "Symantec\Norton AntiVirus")
      $KeyNORTONGood=1
   EndIf
   ;
   ;
   ; Teste la désactivation de Norton.
   ; Quand Norton est désactivé, les clefs passent de Run à Run- et de RunServices à RunServices-
   ; Il suffit de remettre ces clefs correctemnt puis rebooter la machine.
   ;
   ; Dans certains cas, il y a une clef qui est supprimée. Il faut donc afficher un message.
   ;
   ; Test du vptray
   If Not ExistValueBDR($RunGood,"vptray")
      $NotGood=1
      If ExistValueBDR($RunNotGood,"vptray")
         $Key = ReadValue($RunNotGood, "vptray")
         If $Key<>""
            $szKeyID = WRITEVALUE ($RunGood, "vptray", $Key, "REG_SZ")
            DelValue($RunNotGood, "vptray")
         EndIf
      Else
         $InstNORTON=1
      EndIf
   EndIf

   ; Test du rtvscn95
   If Not ExistValueBDR($RunServicesGood,"rtvscn95")
      $NotGood=1
      If ExistValueBDR($RunServicesNotGood,"rtvscn95")
         $Key = ReadValue($RunServicesNotGood, "rtvscn95")
         If $Key<>""
            $szKeyID = WRITEVALUE ($RunServicesGood, "rtvscn95", $Key, "REG_SZ")
            DelValue($RunServicesNotGood, "rtvscn95")
         EndIf
      Else
         $InstNORTON=1
      EndIf
   EndIf

   ; Test du defwatch
   If Not ExistValueBDR($RunServicesGood,"defwatch")
      $NotGood=1
      If ExistValueBDR($RunServicesNotGood,"defwatch")
         $Key = ReadValue($RunServicesNotGood, "defwatch")
         If $Key<>""
            $szKeyID = WRITEVALUE ($RunServicesGood, "defwatch", $Key, "REG_SZ")
            DelValue($RunServicesNotGood, "defwatch")
         EndIf
      Else
         $InstNORTON=1
      EndIf
   EndIf


   ;$Mes="NotGood=" + $NotGood + " InstNORTON=" + $InstNORTON + " KeyNORTONGood=" + $KeyNORTONGood
   ;$return = MessageBox($Mes,$Title,64)

   ; La clef de NORTON est absente : NORTON n'a jamais été installé
   ; Sinon, effectue le bilan de l'installation correcte de NORTON : clef et services

   If Not $KeyNORTONGood
      $Mes = "Attention... Attention... Attention..."+ $CR + $CR + $CR
      $Mes=$Mes + "Norton Antivirus n'est pas installé sur cette machine."+ $CR + $CR
      $Mes=$Mes + "NORTON va maintenant être installé. Ne tentez pas de travailler tant que votre machine n'a pas redémarrée automatiquement !"
      $return = MessageBox($Mes,$Title,64)
      $Mes = "NORTON n'était pas installé sur la machine " + @WKSTA + $CR + $CR
      $Mes=$Mes + "L'installation est lancée automatiquement."
      SendMail("Machine sans NORTON",@USERID,$Mes)
      RUN $SetupNORTON ; Lance l'installation silencieuse
      GOTO End_NORTON ; Plus aucun test ne doit être effectué
   Else
      If $InstNORTON ; Il faut appeler le service technique et au bout de 3 fois blocage
         If Exist($FlagNORTON)
            If OPEN (1, $FlagNORTON, 3) = 0
               $count=READLINE(1)
               Close (1)
               If @ERROR = 0
                  DEL $FlagNORTON ; Supprime le fichier pour le recréer
                  $count=val($count)+1 ; Incrémente le compteur
                  If OPEN (1, $FlagNORTON, 5) = 0
                     WRITELINE(1,$count)
                     Close (1)
                  Endif
               EndIf
            EndIf
         Else
            If OPEN (1, $FlagNORTON, 5) = 0
               $count=1
               WRITELINE(1,$count)
               Close (1)
            Endif
         Endif
         If $count>=4
            $Mes="Désactiver Norton est une faute grave" + $CR + $CR + $CR
            $Mes=$Mes + "Norton Antivirus n'est pas activé correctement sur cette machine." + $CR + $CR
            $Mes=$Mes + "Cela fait " + $count + " fois au moins qu'il vous est demandé d'informer le service technique." + $CR + $CR
            $Mes=$Mes + "Votre machine va maintenant être arrêtée !"
            $return = MessageBox($Mes,$Title,64)
            $Mes = "NORTON a été désinstallé d'une manière incorrecte sur la machine " + @WKSTA + $CR
            $Mes=$Mes + "Cela fait + $count + fois que ce problème est détecté." + $CR + $CR
            $Mes=$Mes + "Une intervention immédiate est requise car la machine est maintenant bloquée."
            SendMail("Machine sans NORTON",@USERID,$Mes)
            shell "rundll32.exe shell32.dll,SHExitWindowsEx 5"
         Else
            $Mes = "Désactiver Norton est une faute grave" + $CR + $CR + $CR
            $Mes=$Mes + "Norton Antivirus ne fonctionne pas correctement et ne peut pas être réinstallé automatiquement sur cette machine." + $CR + $CR
            $Mes=$Mes + "Vous devez contacter le service technique !"
            $return = MessageBox($Mes,$Title,64)
            $Mes = "NORTON a été désinstallé d'une manière incorrecte sur la machine " + @WKSTA + $CR + $CR
            $Mes=$Mes + "Une intervention immédiate est requise."
            SendMail("Machine sans NORTON",@USERID,$Mes)
         EndIf
         GOTO End_NORTON
      Else
         If Exist($FlagNORTON)
            DEL $FlagNORTON ; Supprime la demande d'installation de NORTON
         EndIf
         If $NotGood
            $Mes = "Désactiver Norton est une faute grave" + $CR + $CR + $CR + $CR
            $Mes=$Mes + "Norton Antivirus est désactivé sur cette machine." + $CR + $CR
            $Mes=$Mes + "Votre machine va maintenant être redémarée pour procéder à la réactivation de NORTON !"
            $return = MessageBox($Mes,$Title,64)
            $Mes = "NORTON était désactivé sur la machine " + @WKSTA + $CR
            $Mes=$Mes + "La réactivation des services est effectuée"
            SendMail("NORTON désactivé sur "+ @WKSTA,@USERID,$Mes)
            shell "rundll32.exe shell32.dll,SHExitWindowsEx 6"
         EndIf
      EndIf
   EndIf
EndIf
:End_NORTON

; ==================================================================
; Limitation des postes de travail
; ==================================================================
;
; ------------------------------------------------
; Suppression de l'active DeskTop des machines W9x
; ------------------------------------------------
; --- Supprime l'ActiveDesktop
$KeyID=$RegPath + "Microsoft\Windows\CurrentVersion\Policies\Explorer"
If Not KeyExist($KeyID)
   ADDKEY($KeyID)
EndIf
SetKey9x($KeyID, "NoActiveDesktop", "1", "REG_DWORD")

; --- Supprime la configuration d'ActiveDesktop dans le menu contextuel
SetKey9x($KeyID, "NoSetActiveDesktop", "1", "REG_DWORD")


; --------------------------------------
; Suppression du passage heure été/hiver
; --------------------------------------
$KeyID="HKLM\System\CurrentControlSet\Control\TimeZoneInformation"
SetKey9x($KeyID, "DisableAutoDaylightTimeSet", "1", "REG_DWORD")


; -----------------------------------------------------
; Suppression des profils utilisateurs des machines W9x
; -----------------------------------------------------
$KeyID="HKLM\Network\Logon"
SetKey9x($KeyID, "UserProfiles", "0", "REG_DWORD")


; --------------------------------------------------
; Suppression de la gestion des PWL des machines W9x
; --------------------------------------------------
$KeyID=$RegPath + "Microsoft\Windows\CurrentVersion\Policies\Network"
SetKey9x($KeyID, "DisablePwdCaching", "1", "REG_DWORD")


; ----------------------------------------------------------------------
; Suppression de l'entrée par ECHAP sur les machines 9x (sauf portables)
; ----------------------------------------------------------------------
If $TypePC<>"Portable"
   $KeyID="HKLM\Network\logon"
   SetKey9x($KeyID, "MustBeValidated", "1", "REG_DWORD")
EndIf

; -----------------
; Gestion des quota
; -----------------
$MaxQuota=100 ;100MO
$MaxQuotaTMK=100 ;100MO
$MaxQuotaHL=100 ;100MO
$MaxQuotaRH=100 ;200MO
$MaxQuotaCOMMERCIAL=100 ;100MO
$MaxQuotaSUP=200 ;200MO
$MaxQuotaINFO=1000 ;1GO
$MaxQuotaFORMATION=500 ;500MO

; --------------------------
; Groupe "Svce_Informatique"
; --------------------------
If INGROUP("Svce_Informatique")
   $MaxQuota=MAX($MaxQuotaINFO,$MaxQuota)
Endif

; ----------------
; Groupe "Svce_HL"
; ----------------
If INGROUP("Svce_HL")
   $MaxQuota=MAX($MaxQuotaHL,$MaxQuota)
Endif

; ----------------
; Groupe "Svce_RH"
; ----------------
If INGROUP("Svce_RH")
   $MaxQuota=MAX($MaxQuotaRH,$MaxQuota)
Endif

; ------------------------
; Groupe "Svce_Commercial"
; ------------------------
If INGROUP("Svce_Commercial")
   USE O: \\Applis\serv_opt
   $MaxQuota=MAX($MaxQuotaCOMMERCIAL,$MaxQuota)
Endif

; -----------------
; Groupe "Svce_Sup"
; -----------------
If INGROUP("Svce_Sup")
   $MaxQuota=MAX($MaxQuotaSUP,$MaxQuota)
Endif

; -----------------
; Groupe "Svce_TMK"
; -----------------
If INGROUP("Svce_TMK")
   $MaxQuota=MAX($MaxQuotaTMK,$MaxQuota)
Endif

; -------------------------------
; Groupe "Svce_Qualité_Formation"
; -------------------------------
If INGROUP("Svce_Qualité_Formation")
   $MaxQuota=MAX($MaxQuotaFORMATION,$MaxQuota)
Endif

; Gestion des quota en MO
; -----------------------
If $MaxQuota=""
   $MaxQuota=100
EndIf

FLUSHKB
; Affiche un message à tout utilisateur dépassant son quota.
$Quota=GetFolderSize($SRVPerso + "\" + @USERID + "$") / (1024*1024)
if $Quota >$MaxQuota
   $Mes = "ATTENTION : Limite de quota (" + $MaxQuota + " MO) atteinte !" + chr(10)+ chr(10)
   $Mes=$Mes + "Votre dossier personnel contient " + $Quota +" MO de données alors que "+ $MaxQuota + " MO seulement sont autorisés sur (" +    $LecteurPerso + ")" + chr(10)
   $Mes=$Mes + "Vous devez effacer des fichiers de ce dossier."
   $return = MESSAGEBOX($Mes,$Title,64)
   SendMail("Dépassement de Quota",@USERID,$Mes)
EndIf

:END_QUOTA

; Empèche les machines 9x de maintenir la liste d'exploration
; -----------------------------------------------------------
GOSUB NoMaintainServerList9x


; ---------------------------
; Appel du script utilisateur
; ---------------------------
$NomUser=@LDRIVE+@USERID+".bat"
If EXIST($NomUser)
   Call $NomUser
EndIf

;$return = MessageBox("Fin du script",$Title,64)
EXIT 1

; ------------------------------------------------------------------------------
; Suppression des machines 9x de la liste des explorateurs potentiels de domaine
; ------------------------------------------------------------------------------
;
; Il faut travailler la BDR et mettre des valeurs à 0 (Q246489).
; La modification ne prendra effet que lors du ReBoot de la machine 9x.
;
:NoMaintainServerList9x
IF @INWIN=2 ;Win9x
   $KeyID="HKLM\System\CurrentControlSet\Services\VxD\VNETSUP"
   $szKeyID=""
   If KeyExist($KeyID)
      $szKeyID = ReadValue($KeyID, "MaintainServerList")
      If @ERROR = 0 AND $szKeyID <> "0"
         WriteValue($KeyID, "MaintainServerList" ,"0" ,"REG_SZ")
      EndIf
   EndIf
   $KeyID="HKLM\System\CurrentControlSet\Services\VxD\VNETSUP\Ndi\Params\MaintainServerList"
   $szKeyID=""
   If KeyExist($KeyID)
      $szKeyID = ReadValue($KeyID, "") ;clef par défaut
      If @ERROR = 0 AND $szKeyID <> "0"
         WriteValue($KeyID, "" ,"0" ,"REG_SZ")
      EndIf
   EndIf
EndIf
Return


; ------------------------------------------------------------------------------
; Suppression des machines NT de la liste des explorateurs potentiels de domaine
; ------------------------------------------------------------------------------
;
; Il faut que la valeur MaintainServerList soit à "No".
; La modification ne prendra effet que lors du ReBoot de la machine NT.
;
:NoMaintainServerListNT
If @INWIN<>2 ;WinNT
   ; Sont exclus les CPD et CSD
   If ($IS_DOMAIN_CONTROLLER <> 0)
      Return
   EndIf
   $KeyID="HKLM\SYSTEM\CurrentControlSet\Services\Browser\Parameters
   $szKeyID=""
   If KeyExist($KeyID)
      $szKeyID = ReadValue($KeyID, "MaintainServerList") ;clef par défaut
      If @ERROR = 0 AND $szKeyID <> "No"
         WriteValue($KeyID, "" ,"No" ,"REG_SZ")
      EndIf
   EndIf
EndIf
Return

;
; Fin du fichier de script
; ------------------------

 

 

 

 

Début de page  |  Page d'accueil  |  Me contacter

(C) Laurent - autourdupc.com -

Création le 25 juin 2002.
Mise à jour le 25 juin 2002.