Annexe : Code source login script

Script d'inclusion

./login.swf

<?xml version="1.0" encoding="utf-8" ?>
<job id="ScriptConnexionONCFS">
	<script language="VBScript" src="./src/definitions.vbs"/>
	<script language="VBScript" src="./src/fonctions.vbs"/>
	<script language="VBScript" src="./src/demarrage.vbs"/>
</job>

Définition des variables

./src/definitions.vbs

'******************************************************************************
'
'	Nom		:	definitions.vbs
'	Rôle		:	Bundle de variables globales et constantes utilisées à l'ONCFS (Région ALR)
'	Auteur		:	Stéphane DUFOUR
'	Version		:	1.0.0 du 20/10/2014, developpement initial
'	Licence		:	GPL 2.0
' 
'	Compilation	:	N/A
'
'	Execution	:	N/A
'
'******************************************************************************
Option Explicit
'Constantes globales ...
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const FileAttrNormal   = 0
Const FileAttrReadOnly = 1
Const FileAttrHidden = 2
Const FileAttrSystem = 4
Const FileAttrVolume = 8
Const FileAttrDirectory = 16
Const FileAttrArchive = 32 
Const FileAttrAlias = 64
Const FileAttrCompressed = 128
Const LOG_SUCCESS=0
Const LOG_ERROR=1
Const LOG_WARNING=2
Const LOG_INFORMATION=4
Const LOG_AUDIT_SUCCESS=8
Const LOG_AUDIT_FAILURE=16
Const systemDrive = "C:"
'Const logFileLocation = "\\SERVEUR1\Ville1\Public\DSI\login-log"
Const logFile = "LoginScript-Messages.log"
Const debugMsgTittle = "DEBUG Login"
Const prodMsgTittle = "Connexion ONCFS"
'Variables lgobales ... NON INITIALISEES !!!
Dim debugMode
Dim execTimeFull
Dim minTask
Dim maxTask
Dim curTask
Dim oncfsComputerName
Dim oncfsSite
Dim oncfsNas
Dim oncfsUserName
Dim oncfsPgmFiles

Script contenant les fonctions

./src/fonctions.vbs

'******************************************************************************
'
'	Nom		:	fonctions.vbs
'	Rôle		:	Bundle de fonctions utilisées à l'ONCFS (Région ALR)
'	Auteur		:	Stéphane DUFOUR
'	Version		:	1.0.0 du 20/10/2014, developpement initial
'	Licence		:	GPL 2.0
' 
'	Compilation	:	N/A
'
'	Execution	:	N/A
'
'******************************************************************************
'******************************************************************************
'	Nom		:	AffEtatDebug()
'	Fonction	:	Affichage du mode de travail en cours Debug ou pas
'	Auteur		:	Stéphane DUFOUR
'	Version		:	1.0.0
'	Param.In	:	booleen debug ou pas
'	Param.Out	:	MsgBox indiquant que le mode debug est actif sinon rien
'******************************************************************************
Sub AffEtatDebug()
	if debugMode then MsgBox "DEBUG LOGIN SCRIPT ACTIF"  ,vbOKOnly,debugMsgTittle
	'Else
	'	MsgBox "Mode debug inactif"
	'End if
End Sub
'******************************************************************************
'	Nom		:	Consignation()
'	Fonction	:	Permet de logger du texte dans le fichier de log défini en variable global (mode append)
'	Auteur		:	Stéphane DUFOUR
'	Version		:	1.0.0
'	Param.In	:	message, criticité
'	Param.Out	:	MsgBox indiquant que le mode debug est actif sinon rien
'******************************************************************************
Sub Consignation(logMessage,logLevel)
	
	'Instaciation objet fichier
	Set objFSO=CreateObject("Scripting.FileSystemObject")
	
	' Mise à jour/Création du fichier de log
	if oncfsPgmFiles = "" then oncfsPgmFiles = systemDrive 'Au cas ou il y ai un souci avec les var. d'env. on log sous c:
	if oncfsUserName = "" then oncfsUserName = "UtilisateurInconnu"
	if oncfsComputerName = "" then oncfsComputerName = "OrdinateurInconnu"
	'Set objLogFile = objFSO.OpenTextFile(oncfsPgmFiles & "\" & logFile, ForAppending, True)
	Set objLogFile = objFSO.OpenTextFile(oncfsPgmFiles & "\" & oncfsComputerName & "-" & logFile, ForAppending, True)
	
	' Mise en forme criticité
	Select case logLevel
		case LOG_SUCCESS
			messageCriticite = "SUCCES"
		case LOG_ERROR
			messageCriticite = "ERREUR"
		case LOG_WARNING
			messageCriticite = "ATTENTION"
		case LOG_INFORMATION
			messageCriticite = "INFO"
	End select
	
	' Message à écrire ...
	fullLogMsg = Now & " " & oncfsUserName & " ["  & messageCriticite & "] : " & logMessage
	' Ecriture dans fichier
	objLogFile.WriteLine fullLogMsg
	objLogFile.Close
	
End Sub
'******************************************************************************
'	Nom		:	CreerSignatureOutlook()
'	Fonction	:	Création de la signature automatique d'un utilisateur
'	Auteur		:	Stéphane DUFOUR
'	Version		:	1.0.1 Bug si champs vide, test avant affectation
'					1.0.0 Initiale
'	Param.In	:	N/A
'	Param.Out	:	Création signature MSWord/Outlook dans 
'					%appdata%\Microsoft\Signatures
'******************************************************************************
Sub CreerSignatureOutlook()
	if debugMode then MsgBox "CreerSignatureOutlook" & vbCrLf & "Etape : " & curTask & "/" & maxTask ,vbOKOnly,debugMsgTittle
	'début chrono
	execTime = Timer
	
	'Definition objet AD
	Set objSysInfo = CreateObject("ADSystemInfo")
	'Instanciation objet AD
	strUser = objSysInfo.UserName
	'Instanciation objet LDAP
	Set objUser = GetObject("LDAP://" & strUser)
	'Instanciation des attributs AD et variables utiles
	strGivenName = objUser.givenName
	strLastName = objUser.LastName
	strTitle = objUser.Title
	strDepartment = objUser.Department
	strCompany = objUser.Company
	strTelephoneFixe = objUser.TelephoneNumber
	strTelephoneMobile = objUser.Mobile
	strCourriel = Lcase(objUser.Mail)
	strLogoPath = "\\oncfs.intra\NETLOGON\Outlook_v2\Signature\ONCFS_fichiers\image001.jpg"
	
	'strLogoPath_cop21 = "\\oncfs.intra\NETLOGON\Outlook_v2\Signature\ONCFS_fichiers\image002.jpg"
	'strSlogan_cop21 = "L'ONCFS s'engage" & Chr(11) &  "pour la Conférence sur le climat"
	
	'***********  Traitement (sous API Word) de la signature electronique ******************************
	'objet application Word (doc)
	Set objWord = CreateObject("Word.Application")
	Set objDoc = objWord.Documents.Add()
	Set objSelection = objWord.Selection
	'Objet insertion images (logo)
	Set objShapeLogo = objDoc.InlineShapes
	'Set objShapeCOP21 = objDoc.InlineShapes
	
	'objet manipulation signature courriel	
	Set objEmailOptions = objWord.EmailOptions
	Set objSignatureObject = objEmailOptions.EmailSignature
	Set objSignatureEntries = objSignatureObject.EmailSignatureEntries
	'Création de la signature mail (option EmailSignature de Word, avec la partie "nouveau message")
		'Création du cartouche (tableau : 1x2) de la signature
		nbLig = 1
		nbCol = 2
		objDoc.Tables.Add objWord.Selection.Range, nbLig, nbCol
		Set tableauSignature = objDoc.Tables(1)
		tableauSignature.Columns(1).Width = 90
		
		'Colonne 1 : Ajout du logo (issue du fichier "strLogoPath")
		tableauSignature.cell(1,1).select
		objSelection.ParagraphFormat.Alignment = 1
		objSelection.InlineShapes.AddPicture(strLogoPath)
		'tableauSignature.AutoFitBehavior(0)
		
		'Colonne 2 : Informations utilisateur
		tableauSignature.cell(1,2).select
		tableauSignature.Columns(2).Width = 370
		objSelection.Font.Name = "Verdana"
		objSelection.Font.Color = RGB(0,0,0)
		objSelection.Font.Size = 9
		objSelection.Font.Bold = True
		objSelection.TypeText strGivenName & " " & UCase(strLastName)
		objSelection.TypeText Chr(11)
		objSelection.Font.Bold = False
		objSelection.Font.Size = 8
		objSelection.Font.Italic = True
		if strTitle <> "" then objSelection.TypeText strTitle
		objSelection.TypeText Chr(11)
		if strDepartment <> "" then objSelection.TypeText strDepartment
		objSelection.TypeText Chr(11)
		objSelection.Font.Italic = False
		objSelection.Font.Bold = True
		if strCompany <> "" then objSelection.TypeText strCompany
		objSelection.TypeText Chr(11)
		objSelection.Font.Bold = False
		objSelection.Font.Size = 7
		if strTelephoneFixe <> "" then objSelection.TypeText strTelephoneFixe
		objSelection.TypeText Chr(11)
		if strTelephoneMobile <> "" then objSelection.TypeText strTelephoneMobile
		objSelection.TypeText Chr(11)
		objDoc.Hyperlinks.Add objSelection.Range, "mailto:" & strCourriel, , , strCourriel
		
			'Ajout COP21 (ligne 2 du tableau)
			'tableauSignature.cell(2,1).select
			'objSelection.ParagraphFormat.Alignment = 1
			'objSelection.InlineShapes.AddPicture(strLogoPath_cop21)
		
			'Colonne 2 : Ajout COP21
			'tableauSignature.cell(2,2).select
			'tableauSignature.Columns(2).Width = 370
			'objSelection.TypeText Chr(11)
			'objSelection.TypeText Chr(11)
			'objSelection.Font.Name = "Arial"
			'objSelection.Font.Color = RGB(0,128,0)
			'objSelection.Font.Size = 10
			'objSelection.Font.Bold = True
			'objSelection.TypeText strSlogan_cop21
			'objSelection.TypeText Chr(11)
			'objSelection.TypeText Chr(11)
	Set objSelection = objDoc.Range()
	objSignatureEntries.Add "Full Signature", objSelection
	objSignatureObject.NewMessageSignature = "Full Signature"
	' Signature de réponse (Reply Signature) choisi identique à celle du dessus
	objSignatureEntries.Add "Reply Signature", objSelection
	objSignatureObject.ReplyMessageSignature = "Reply Signature"
	objDoc.Saved = True
	objWord.Quit
	
	Consignation "CreerSignatureOutlook, " & Round(Timer - execTime,1) & " sec.",LOG_INFORMATION
End Sub
'******************************************************************************
'	Nom		:	InventairePytheas()
'	Fonction	:	Lancement de l'outil d'inventaire Pytheas
'	Auteur		:	Stéphane DUFOUR
'	Version		:	1.0.0
'	Param.In	:	nom netbios du serveur Pytheas, Partage ou se situe le binaire, chamin d'accès au binaire de Pytheas
'	Param.Out	:	N/A
'******************************************************************************
Sub InventairePytheas(serveurPytheas,partagePytheas,pathBinPytheas)
	if debugMode then MsgBox "InventairePytheas" & vbCrLf & "Etape : " & curTask & "/" & maxTask ,vbOKOnly,debugMsgTittle
	'début chrono
	execTime = Timer
	
	'Pytheas
	pathPAMSyncExe = "\\" & serveurPytheas & "\" & partagePytheas & pathBinPytheas & "\PAMSync.exe"
	pathPAMSyncIni = "\\" & serveurPytheas & "\" & partagePytheas & pathBinPytheas & "\PAMSync.ini"
	argPAMSync = " /ini " & pathPAMSyncIni
	execPAMSyncPyhteas = pathPAMSyncExe & argPAMSync
	Dim oShell
	Set oShell = CreateObject("WScript.Shell")
	'if debugMode then MsgBox execPAMSyncPyhteas
	oShell.Run execPAMSyncPyhteas,,True 'on lance en mode synchrone
	
	Consignation "InventairePytheas, " & Round(Timer - execTime,1) & " sec.",LOG_INFORMATION
End Sub

Script principal de démarrage (connexion)

./src/demarrage.vbs

'******************************************************************************
'
'	Nom		:	demarrage.vbs
'	Rôle		:	Script de connexion utilisé à l'ONCFS (Région ALR)
'	Auteur		:	Stéphane DUFOUR
'	Version		:	1.0.0 du 20/10/2014, developpement initial
'	Licence		:	GPL 2.0
' 
'	Compilation	:	N/A (cscript.exe)
'
'	Execution	:	via GPO utilisateur, ou cscript.exe fonctions.vbs
'
'******************************************************************************
' TODO : log, gestion erreur,  set objet=nothing TODO
'Les fonctions et definition de variables, constantes sont dans les fichiers décrits par le "login.wsf"
'**********************   ATTENTION
' Production donc on ne bloque pas sur les erreurs (AJUSTER PARAMETRE SUIVANT en conséquence : 'debugMode' !!!!)
On Error Resume Next
' Mode debuggage = True, production = False
debugMode = False 'True
AffEtatDebug
'**********************   ATTENTION 
' Chronmétrage du temps d'execution du login script.
execTimeFull = Timer
' Reinitialisation du compteur d'étape à 0 et indication du nombre de tâche du login script
minTask = 1
maxTask = 1 ' A ajuster pour debugage si plus de taches sont ajoutées
curTask = 0
' Récupération des variables d'environnement ONCFS et autres
Set wshShell = CreateObject( "WScript.Shell" )
oncfsComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
oncfsSite = wshShell.ExpandEnvironmentStrings( "%ONCFS_Site%" )
oncfsNas = wshShell.ExpandEnvironmentStrings( "%ONCFS_Nas%" )
oncfsUserName = wshShell.ExpandEnvironmentStrings( "%USERNAME%" )
oncfsPgmFiles = wshShell.ExpandEnvironmentStrings( "%ONCFS_ProgramFiles%" )
' Log le début du script
Consignation ">>> DEBUT >>>",LOG_INFORMATION
	
'if debugMode then
	'Progression du script
	'Set objExplorer = CreateObject("InternetExplorer.Application")
	'objExplorer.Navigate "about:blank"   
	'objExplorer.ToolBar = 0
	'objExplorer.StatusBar = 0
	'objExplorer.Width = 400
	'objExplorer.Height = 200 
	'objExplorer.Visible = 1
	'objExplorer.Document.Title = prodMsgTittle
	'strTaskList = "Début du script de connexion ..." & "<BR>" & "<BR>"
'end if
'************* ETAPE 1 ********************************************************
' Création signature messagerie electronique pour MSWord/Outlook
'curTask = curTask + 1
'if debugMode then 
	'strTaskList = strTaskList + "Création signature messagerie electronique, étape " & curTask & "/" & maxTask & "<BR>"
	'objExplorer.Document.Body.InnerHTML = strTaskList
'end if
'CreerSignatureOutlook
'************* ETAPE 2 ********************************************************
' Lancement inventaire Pytheas
curTask = curTask + 1
'if debugMode then
	'strTaskList = strTaskList + "Inventaire Pytheas, étape " & curTask & "/" & maxTask & "<BR>"
	'objExplorer.Document.Body.InnerHTML = strTaskList
'end if
InventairePytheas "serveur","pamroot$","\paminventory\PAMScan"
'************* FIN ************************************************************
' Fin du script de connexion ONCFS
'Résumé script
if debugMode then
	'strTaskList = strTaskList + "Temps execution : " & Round(execTime,1) & " sec., étape " & curTask & "/" & maxTask & "<BR>"
	'objExplorer.Document.Body.InnerHTML = strTaskList
	MsgBox "FIN Login script",vbOKOnly,debugMsgTittle
	'objExplorer.Quit
end if
' Log la fin du script
Consignation "<<< FIN <<< " & Round(Timer - execTimeFull,1) & " sec.",LOG_INFORMATIONpathBinPytheas & "\PAMSync.ini"
	argPAMSync = " /ini " & pathPAMSyncIni
	execPAMSyncPyhteas = pathPAMSyncExe & argPAMSync
	Dim oShell
	Set oShell = CreateObject("WScript.Shell")
	'if debugMode then MsgBox execPAMSyncPyhteas
	oShell.Run execPAMSyncPyhteas,,True 'on lance en mode synchrone
	
	Consignation "InventairePytheas, " & Round(Timer - execTime,1) & " sec.",LOG_INFORMATION
End Sub