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.
Le fichier présenté est enregistré sous le nom de "MainScript.bat".
L'exemple présenté est actuellement en exploitation. Il permet :
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 |
@echo
off |
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.
|
visites |