Introduction
Le script a pour but de copier un fichier à l'ouverture/fermeture de session pour les personnes utilisant un profil itinérant.
En effet le répertoire AppData\Local n'est pas pris en compte de base dans le profil itinérant et certains programmes peuvent y stocker des fichiers comme une licence.
Le Vbscript proposé ne prend en charge la copie que d'un fichier dont le chemin est codé en dur.
C'est une base de travail.
Il reçoit un paramètre dont la valeur est « logon » ou « logoff » afin de n'avoir qu'un seul script dans les 2 cas.
Le script se comporte donc différemment suivant quil reçoit le paramètre « logon » ou « logoff »
« logon » est le paramètre par défaut.
Lors dun logon le script va chercher son fichier à la racine du HomeFolder de la personne.
Il copie le fichier dans le profil local dans %USERPROFILE%\Local\ etc ...
A linverse lors dun logoff le script prend le fichier dans le profil local puis il le copie dans le homefolder de la personne.
Un fichier de log par serveur et par logon/logoff est généré à l'emplacement du script.
Suite à tests des adaptations ont été faites, à savoir que le homefolder de lutilisateur nest pas toujours disponible immédiatement, aussi le script fait 10 tentatives daccès avant dabandonner à raison dune tentative par seconde.
Si le répertoire cible dans le profil local nexiste pas, le script le crée.
Il pourra être nécessaire de faire lancer ce script par un .bat qui ne l'attend que quelques secondes en cas de lock du script à exécuter pour raison x ou y.
Dans mon cas le script a été déclenché par Gpo à louverture et fermeture de session.
LogonLogoffScript.vbs
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
Lien vers le fichier : cliquez ici
Dans firefox, dans
about:config
passez à true le paramètre suivant
browser.xul.error_pages.expert_bad_cert
Lien vers le fichier : cliquez ici
Dans firefox, dans
about:config
passez à true le paramètre suivant
Article(s) en relation(s)