Option Explicit '2014 05 27 'Copie d'un fichier à l'ouverture et fermeture de session afin qu'il soit pris en charge pour un profil itinérant Dim objFSO, objFichierLog, CheminScriptActuel, CheminFichierdeLog, NomFichier Dim Position, Compteur, AccesOk Dim WSHShell Dim vHomeDrive, vUserProfile, vUserName, vCOMPUTERNAME Dim CheminDuHomeFolder, CheminRepertoireLicenceSurProfilLocal, CheminFichierLicenceSurHome, CheminFichierLicenceSurProfilLocal Dim Mode Dim objArgs, ArgCount Const ForReading = 1 Const ForWritting = 2 Const ForAppending = 8 'Mode = "logoff" Mode = "logon" On Error resume next Set objArgs = Wscript.Arguments ArgCount = 0 if objArgs.Count = 0 then 'wscript.echo "No arguments specified." 'wscript.echo 'call Help() Else Mode=LCase(objArgs(0)) 'wscript.echo "0 : " & Mode Select Case Mode Case "logon" Mode = "logon" Case "logoff" Mode = "logoff" Case Else Mode = "logon" End Select end if Set objArgs = Nothing CheminScriptActuel = Left(wscript.scriptfullname,Len(wscript.scriptfullname)-Len(wscript.scriptname)-1) Set WSHShell = CreateObject("WScript.Shell") vHomeDrive = WSHShell.ExpandEnvironmentStrings("%HOMEDRIVE%") vUserProfile = WSHShell.ExpandEnvironmentStrings("%USERPROFILE%") vUserName = WSHShell.ExpandEnvironmentStrings("%USERNAME%") vCOMPUTERNAME = WSHShell.ExpandEnvironmentStrings("%COMPUTERNAME%") 'CheminDuHomeFolder = "\\dc.mydomain.local\homes$\" & vUserName CheminDuHomeFolder = vHomeDrive CheminFichierLicenceSurHome = CheminDuHomeFolder & "\" & "MonFichierACopier.ini" CheminRepertoireLicenceSurProfilLocal = vUserProfile & "\" & "AppData\Local\MonRepertoire" 'CheminFichierLicenceSurProfilLocal = vUserProfile & "\" & "AppData\Local" & "\" & "MaLic.txt" CheminFichierLicenceSurProfilLocal = CheminRepertoireLicenceSurProfilLocal & "\" & "MonFichierACopier.ini" NomFichier = wscript.scriptname Position = InstrRev(NomFichier,".") NomFichier = Left(NomFichier, Position - 1) CheminFichierdeLog = CheminScriptActuel & "\" & NomFichier & "_log_" & vUserName & "_" & vCOMPUTERNAME & "_" & Mode & ".txt" Set objFSO = CreateObject("Scripting.FileSystemObject") Err.clear On Error Resume Next Set objFichierLog = objFSO.OpenTextFile(CheminFichierdeLog, ForWritting, True) objFichierLog.WriteLine(Now) If Err.Number > 0 Then On error Goto 0 Wscript.Echo "Erreur lors de la création du fichier de log " & CheminFichierdeLog & " : " & err.number & " (" & err.description & ")" Wscript.quit End If objFichierLog.WriteLine(VbTab & "Mode passé en paramètres : " & Mode) objFichierLog.WriteLine(VbTab & "vHomeDrive : " & vHomeDrive) objFichierLog.WriteLine(VbTab & "vUserProfile : " & vUserProfile) objFichierLog.WriteLine(VbTab & "vUserName : " & vUserName) objFichierLog.WriteLine(VbTab & "vCOMPUTERNAME : " & vCOMPUTERNAME) objFichierLog.WriteLine(VbTab & "CheminFichierLicenceSurHome : " & CheminFichierLicenceSurHome) objFichierLog.WriteLine(VbTab & "CheminRepertoireLicenceSurProfilLocal : " & CheminRepertoireLicenceSurProfilLocal) objFichierLog.WriteLine(VbTab & "CheminFichierLicenceSurProfilLocal : " & CheminFichierLicenceSurProfilLocal) AccesOk = 0 Compteur = 0 Do Compteur = Compteur + 1 WScript.Sleep 1000 'Attente de 1 seconde 'If objFSO.FolderExists(vHomeDrive) Then AccesOk = 1 'If objFSO.DriveExists(vHomeDrive) Then AccesOk = 1 If objFSO.FolderExists(CheminDuHomeFolder) Then AccesOk = 1 'objFichierLog.WriteLine(VbTab & "Tentative d'accès numéro " & Compteur & " à " & vHomeDrive & " : " & AccesOk) objFichierLog.WriteLine(VbTab & "Tentative d'accès numéro " & Compteur & " à " & CheminDuHomeFolder & " : " & AccesOk) Loop While (Compteur < 10) And AccesOk = 0 If AccesOk = 1 Then objFichierLog.WriteLine(VbTab & "HomeDrive " & vHomeDrive & " accessible") If Mode = "logoff" Then objFichierLog.WriteLine(VbTab & "Fonctionnement sur la base d'un logoff") 'Si le fichier de licence existe sur le profil local, on va essayer de le copier sur le homefolder. If objFSO.FileExists(CheminFichierLicenceSurProfilLocal) Then objFichierLog.WriteLine(VbTab & "Le fichier est présent sur le profil local dans " & CheminFichierLicenceSurProfilLocal & " (pour indication)") If objFSO.FileExists(CheminFichierLicenceSurHome) Then objFichierLog.WriteLine(VbTab & CheminFichierLicenceSurHome & "existe. Il sera écrasé par " & CheminFichierLicenceSurProfilLocal) Else objFichierLog.WriteLine(VbTab & CheminFichierLicenceSurHome & " n'existe pas. " & CheminFichierLicenceSurProfilLocal & " va le créer") End If objFichierLog.WriteLine(VbTab & "Copie de " & CheminFichierLicenceSurProfilLocal & " sur " & CheminFichierLicenceSurHome) Err.clear On Error Resume Next Call objFSO.CopyFile (CheminFichierLicenceSurProfilLocal, CheminFichierLicenceSurHome, True) If Err.Number > 0 Then objFichierLog.WriteLine(VbTab & "Erreur lors de l'écriture du fichier sur le Home Folder. Code de retour de l'erreur : " & err.number & " (" & err.description & ")") On error Goto 0 Else objFichierLog.WriteLine(VbTab & "Absence sur fichier dans le profil local. Il aurait dû être ici : " & CheminFichierLicenceSurProfilLocal & " (pour indication)") End If End If If Mode = "logon" Then objFichierLog.WriteLine(VbTab & "Fonctionnement sur la base d'un logon") 'Lors d'un logon, on regarde si un fichier existe sur le home folder. Si oui, on le copie dans tous les cas dans le profil local If objFSO.FileExists(CheminFichierLicenceSurHome) Then objFichierLog.WriteLine(VbTab & CheminFichierLicenceSurHome & " existe") 'Test de la présence du répertoire qui doit contenir le fichier de licence et création si abscence If objFSO.FolderExists(CheminRepertoireLicenceSurProfilLocal) Then objFichierLog.WriteLine(VbTab & "Le répertoire qui doit contenir le fichier de licence existe, cad " & CheminRepertoireLicenceSurProfilLocal) Else objFichierLog.WriteLine(VbTab & "Absence du répertoire qui doit contenir le fichier de licence, cad " & CheminRepertoireLicenceSurProfilLocal) objFichierLog.WriteLine(VbTab & "Création de " & CheminRepertoireLicenceSurProfilLocal) WSHShell.Run "cmd /c mkdir """ & CheminRepertoireLicenceSurProfilLocal & """" WScript.Sleep 2000 'Attente de 2 seconde End If 'Second test du répertoire qui doit contenir le fichier de licence If objFSO.FolderExists(CheminRepertoireLicenceSurProfilLocal) = True Then objFichierLog.WriteLine(VbTab & "Le répertoire qui doit contenir le fichier de licence est présent : " & CheminRepertoireLicenceSurProfilLocal) Else objFichierLog.WriteLine(VbTab & "Le répertoire qui doit contenir le fichier de licence n'existe pas : " & CheminRepertoireLicenceSurProfilLocal) End If If objFSO.FileExists(CheminFichierLicenceSurProfilLocal) Then objFichierLog.WriteLine(VbTab & "Le fichier est présent dans le profil local dans " & CheminFichierLicenceSurProfilLocal & " (à titre indicatif)") Else objFichierLog.WriteLine(VbTab & "Le fichier n'existe pas dans le profil local dans " & CheminFichierLicenceSurProfilLocal & " (à titre indicatif)") End If objFichierLog.WriteLine(VbTab & "Copie de " & CheminFichierLicenceSurHome & " sur " & CheminFichierLicenceSurProfilLocal) Err.clear On Error Resume Next Call objFSO.CopyFile (CheminFichierLicenceSurHome, CheminFichierLicenceSurProfilLocal, True) If Err.Number > 0 Then objFichierLog.WriteLine(VbTab & "Code de retour de l'erreur : " & err.number & " (" & err.description & ")") On error Goto 0 Else objFichierLog.WriteLine(VbTab & "Le fichier n'est pas présent sur le HomeFolder, soit normalement dans " & CheminFichierLicenceSurHome) If objFSO.FileExists(CheminFichierLicenceSurProfilLocal) Then objFichierLog.WriteLine(VbTab & "Pour information, le fichier est présent dans le profil local dans " & CheminFichierLicenceSurProfilLocal & " (à titre indicatif)") Else objFichierLog.WriteLine(VbTab & "Pour information, le fichier n'existe pas dans le profil local dans " & CheminFichierLicenceSurProfilLocal & " (à titre indicatif)") End If End If End If Else objFichierLog.WriteLine(VbTab & "HomeDrive " & vHomeDrive & " inaccessible. On arrête") End If 'Call objFSO.CopyFile (CheminFichierSource, CheminFichierCible, True) objFichierLog.WriteLine("Terminé") 'Wscript.echo "Exe terminé" objFichierLog.Close 'Fermeture du fichier Set WSHShell = Nothing Set objFichierLog = Nothing Set objFSO = Nothing