IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Modifier une GPO Local par VBS


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 3
    Par défaut Modifier une GPO Local par VBS
    Via un VBS, je souhaiterai modifier la GPO Local d'un poste VISTA.
    L'outil "gpedit.msc" permet de modifier cet GPO Local.
    Sous "gpedit.msc", dans "Configuration utilisateur\Paramètres Windows\Scripts(Ouverture / Fermeture Session)\Fermeture de Session", on peut ajouter des scripts.

    Je cherche une solution via VBS pour ajouter un script à cet endroit.

    Je ne sais pas si cela est possible mais en informatique "Rien n'est impossible, c'est juste une question de moyen et de technique"

  2. #2
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    Salut,

    la GPEDIT.MSC n'est qu'une interface pour éditer la base de registre.

    Du coup, tu ne serais pas mieux de passer par les commandes du VBS pour aller taper dircetement dans ta base de registre ?
    Pour rappel le lancement de script au démarrage c'est dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\Scripts\Logon
    et à la fermeture du poste c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\Scripts\Logoff
    A++

  3. #3
    Nouveau candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Par défaut pas c'accord
    non non et re NON

    modifier les clés de registre n'est pas suffisant

    il y a aussi le fichier C:\WINDOWS\system32\GroupPolicy\User\Scripts\scripts.ini a changer

    mais même ça c'est pas encore suffisant

    en lançant la commande : gpupdate /force
    ça permet de le voir apparaitre dans l'interface GPEDIT.MSC

    mais même ça c'est pas encor suffisant pour que le script ce lance
    à la fermeture de session

    Je suis entrain de chercher du côté des commandes fournies par windows
    mais je galère. . . .

    J'ouvre le concours : qui va trouver la solution en premier?

  4. #4
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut
    Citation Envoyé par BLUTAVE Voir le message
    non non et re NON

    modifier les clés de registre n'est pas suffisant

    il y a aussi le fichier C:\WINDOWS\system32\GroupPolicy\User\Scripts\scripts.ini a changer

    mais même ça c'est pas encore suffisant

    en lançant la commande : gpupdate /force
    ça permet de le voir apparaitre dans l'interface GPEDIT.MSC

    mais même ça c'est pas encor suffisant pour que le script ce lance
    à la fermeture de session

    Je suis entrain de chercher du côté des commandes fournies par windows
    mais je galère. . . .

    J'ouvre le concours : qui va trouver la solution en premier?
    Salut, BLUTAVE
    Tu m'a donner une petite idée sur le scripts.ini pour que je puisse faire marcher ceci que j'ai poster il y a quelques jours dans plusieurs forums dans le Net et je n'ai eu aucune réponse jusqu'à maintenant .Mais grâce à toi je crois je vais finir a le faire tourner ce script
    un tout petit brouillon de Fonction WriteScripts qu'on peut ajouter a mon script initial et je crois qu'on peut l'améliorer ensemble
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub WriteScripts()
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set WSSH = CreateObject("Wscript.shell")
    Set sys32 = FSO.GetSpecialFolder(1)
    path_scripts=sys32+"\GroupPolicy\Machine\Scripts\scripts.ini"
    If (Not fso.FileExists(path_scripts)) Then
    set scriptini=fso.CreateTextFile(path_scripts)
    scriptini.WriteLine "[Shutdown]"
    scriptini.WriteLine "0CmdLine=usb-cd.vbs"
    scriptini.close
    set scriptini=fso.GetFile(path_scripts) 
    scriptini.Attributes = 2 ' le Fichier devient Caché !
    else
    set scriptini=fso.OpenTextFile(path_scripts,2)
    scriptini.WriteLine "[Shutdown]"
    scriptini.WriteLine "0CmdLine=usb-cd.vbs"
    scriptini.close
    set scriptini=fso.GetFile(path_scripts) 
    scriptini.Attributes = 2 ' le Fichier devient Caché !
    end if
    End Sub

  5. #5
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Bonjour,

    Je galere sur le meme probleme.
    J'ai essaie enormement de chose, je suis meme alle jusqu'a comparer
    la BDR entre la methode classique (gpedit) et la methode modif de la BDR.

    Pour le moment j'en suis a cela:
    1 - Modif de la BDR -> Ok
    2 - Modif du fichier scripts.ini -> Ok
    3 - Forcer update -> pas certain de l'utilite
    4 - ???

    Sur mon poste, il me suffit de faire 1 et 2 pour que ca fonctionne.
    Sur un autre poste rien a faire, j'ai bien la petite fenetre a la deconnexion
    qui m'indique l'execution des scripts de fermeture mais le script ne tourne pas.
    (par gpedit tout fonctionne normalement bien sur)

    Avez-vous trouve la commande magique??

  6. #6
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut
    Citation Envoyé par Minick Voir le message
    Bonjour,

    Je galere sur le meme probleme.
    J'ai essaie enormement de chose, je suis meme alle jusqu'a comparer
    la BDR entre la methode classique (gpedit) et la methode modif de la BDR.

    Pour le moment j'en suis a cela:
    1 - Modif de la BDR -> Ok
    2 - Modif du fichier scripts.ini -> Ok
    3 - Forcer update -> pas certain de l'utilite
    4 - ???

    Sur mon poste, il me suffit de faire 1 et 2 pour que ca fonctionne.
    Sur un autre poste rien a faire, j'ai bien la petite fenetre a la deconnexion
    qui m'indique l'execution des scripts de fermeture mais le script ne tourne pas.
    (par gpedit tout fonctionne normalement bien sur)

    Avez-vous trouve la commande magique??
    Salut Minick,
    STP poste ton script ici pour voir les paramètres à modifier merci !

  7. #7
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Salut,

    Merci pour ton interet.

    Je viens de trouver pourquoi cela ne fonctionnait pas (grace a une comparaison de fichiers, je suis tetu :o)) )

    En fait, en plus du scripts.ini et de la BDR il y a le fichier gpt.ini (dans C:\WINDOWS\system32\GroupPolicy)
    qui se met a jour quand on passe par gpedit.

    Dans la section General 2 cles importantes :
    - version : les explications bien faites ici
    Ce qui m'interesse dans l'explication c'est ajouter 65536 au numero de version pour incrementer la partie version user de 1

    - gPCUserExtensionNames : Qui indique les extensions utilisees (normalement inscrites dans la BDR)
    Dans mon cas {42B5FAAE-6536-11D2-AE5A-0000F87571E3} et {40B66650-4972-11D1-A7CA-0000F87571E3}

    Et tout roule.

    Pourquoi ca fonctionnait sur mon poste et pas sur les autres alors me direz-vous...
    Simplement a cause d'une incoherence dans mon parametrage a cause de mes tests.
    Ajout du script par gpedit et suppression par la BDR et scripts.ini donc gpt.ini
    pas reinitialise.


    Voila, si ca peut servir a d'autre

    EDIT:
    Juste pour preciser qu'un petit gpupdate /force ne fait pas de mal
    et s'avere meme necessaire pour que le changement soit pris en compte immediatement.

  8. #8
    christian_grandjean
    Invité(e)
    Par défaut J'ai écris un petit script qui fait le boulot demandé
    Bonjour,
    Après des recherches j'ai découvert qu'il n'est pas nécessaire de modifier/ajouter les clés dans le registre, il s'avère que si vous modifiez le fichier "\GroupPolicy\Machine\Scripts\scripts.ini" ou "\GroupPolicy\User\Scripts\scripts.ini" et que vous faites un "GPUPdate /Force" Windows popule la base de registre correctement et tout seul comme un grand, c'est ce que fait ma fonction.
    1. Set ini file to normal mode
    2. Edit ini file
    3. Create/Add changes
    4. ( Delete GPO registry key, not realy important )
    5. Set ini file to hidden mode
    6. Run GPUPDATE to integrate entries in registry

    Je met le code à diposition de la communauté, ça peut vous être utile un jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
     
    '***************************************************************
    ' °Author	: Grandjean Christian
    ' °Date		: 23.02.2010
    ' °Version	: 1.0
    '
    ' °Script description :
    '	Add entries in local GPO for "Machine => Startup/Shutdown" or "User => Logon/Logoff" entries.
    '
    ' °Script parameters :
    '	sScript = Script or application to run
    '	sParameters = command line parameters
    '	sAddInStartupOrLogin
    '		True = Startup / Logon
    '		False = Shutdown / Logoff
    '	sMACHINEorUSER
    '		MACHINE = Machine Policy
    '		USER = User Policy
    '
    ' °Script workflow :
    '	1. Set ini file to normal mode
    ' 	2. Edit ini file
    ' 	3. Create/Add changes
    ' 	4. Delete GPO registry key
    '	5. Set ini file to hidden mode
    ' 	6. Run GPUPDATE to integrate entries in registry
    '
    ' °Remarks :
    '	The script accept maximum 9 entries in ini file
    '
    ' °Use for :
    '	Add entry for login to user policy
    '		WriteGPOScriptPolicy "C:\WINDOWS\system32\cscript.exe", "//NOLOGO C:\MaintenanceMode.vbs MYPARAM", True, "USER"
    '	Add entry for shutdown to computer policy
    '		WriteGPOScriptPolicy "C:\WINDOWS\system32\cscript.exe", "//NOLOGO C:\MaintenanceMode.vbs MYPARAM", False, "MACHINE"
     
     
    '***************************************************************
    Sub WriteGPOScriptPolicy(ByVal sScript, ByVal sParameters, ByVal sAddInStartupOrLogin, ByVal sMACHINEorUSER)
    	Dim sScriptPath, sSys32, sTMP
    	Dim oINI, ooShell, ooFSO, oINIProperties, oRegFile
    	Dim iLastStartup, iLastShutdown
    	Dim sOption1, sOption2, sStartup, sShutdown
    	sStartup = ""
    	sShutdown = ""
    	sMACHINEorUSER = Ucase(sMACHINEorUSER)
     
    	Set ooShell = CreateObject("WSCript.Shell")
    	Set ooFSO = CreateObject("Scripting.FileSystemObject")
     
    	Set sSys32 = ooFSO.GetSpecialFolder(1)
     
    	' Check if COMPUTER or USER Policy
    	If sMACHINEorUSER = "MACHINE" Then
    		sScriptPath = sSys32 & "\GroupPolicy\Machine\Scripts\scripts.ini"
    	Elseif sMACHINEorUSER = "USER" Then
    		sScriptPath = sSys32 & "\GroupPolicy\User\Scripts\scripts.ini"
    	Else
    		WScript.Echo "Please set value for sMACHINEorUSER !"
    		WScript.Quit
    	End If
     
    	If (Not ooFSO.FileExists(sScriptPath)) Then
    		' Add new value in startup or shutdown
    		If sAddInStartupOrLogin Then
    			iLastStartup = 0
    			If sMACHINEorUSER = "MACHINE" Then sStartup =  VbCrLf & "[Startup]"
    			If sMACHINEorUSER = "USER" Then sStartup =  VbCrLf & "[Logon]"
    			sStartup = sStartup & VbCrLf & iLastStartup & "CmdLine=" & sScript
    			sStartup = sStartup & VbCrLf & iLastStartup & "Parameters=" & sParameters
    		Else
    			iLastShutdown = 0
    			If sMACHINEorUSER = "MACHINE" Then sStartup =  VbCrLf & "[Shutdown]"
    			If sMACHINEorUSER = "USER" Then sStartup =  VbCrLf & "[Logoff]"
    			sShutdown = sShutdown &  VbCrLf &iLastShutdown & "CmdLine=" & sScript
    			sShutdown = sShutdown &  VbCrLf &iLastShutdown & "Parameters=" & sParameters
    		End If
    	Else
    		' Set file as normal
    		Set oINIProperties = ooFSO.GetFile(sScriptPath) 
    		oINIProperties.Attributes = 0 'The File become Hidden!
     
    		' read
    		Set oINI = ooFSO.OpenTextFile(sScriptPath, 1)
     
    		iLastStartup = 0
    		iLastShutdown = 0
     
    		Do While 1 = 1
    			On Error Resume Next
    				sTMP = oINI.ReadLine
    				'If sTMP = VbCrLf Then sTMP = ""
    				If Err > 0 Then Exit Do
    			On Error GoTo 0
     
    			If InStr(1, UCase(sTMP), UCase("[Startup]")) > 0 And sMACHINEorUSER = "MACHINE" Then sOption1 = sTMP
    			If InStr(1, UCase(sTMP), UCase("[Shutdown]")) > 0 And sMACHINEorUSER = "MACHINE" Then sOption2 = sTMP
    			If InStr(1, UCase(sTMP), UCase("[Logon]")) > 0 And sMACHINEorUSER = "USER" Then sOption1 = sTMP
    			If InStr(1, UCase(sTMP), UCase("[Logoff]")) > 0 And sMACHINEorUSER = "USER" Then sOption2 = sTMP
     
    			If sOption1 = "[Startup]" And sOption2 <> "[Shutdown]" Or sOption1 = "[Logon]" And sOption2 <> "[Logoff]" Then
    				sStartup = sStartup & VbCrLf & sTMP
     
    				On Error Resume Next
    					'WScript.Echo CInt(Left(sTMP, 1))
    					iLastStartup = Cint(Left(sTMP, 1)) + 1
    				On Error GoTo 0
    				'WScript.Echo "Start Next value = " & iLastStartup
    			Else
    				sShutdown = sShutdown & VbCrLf & sTMP
    				On Error Resume Next
    					'WScript.Echo CInt(Left(sTMP, 1))
    					iLastShutdown = CInt(Left(sTMP, 1)) + 1
    				On Error GoTo 0
    				'WScript.Echo "Shutdown Next value = " & iLastShutdown
    			End If 
    		Loop
     
    		' Add new value in startup or shutdown
    		If sAddInStartupOrLogin Then
    			' If key dont exist
    			If InStr(1, sStartup, "[Startup]") = 0 And sMACHINEorUSER = "MACHINE" Then sStartup = VbCrLf & "[Startup]"
    			If InStr(1, sStartup, "[Logon]") = 0 And sMACHINEorUSER = "USER" Then sStartup = VbCrLf & "[Logon]"
    			sStartup = sStartup & VbCrLf &iLastStartup & "CmdLine=" & sScript
    			sStartup = sStartup & VbCrLf & iLastStartup & "Parameters=" & sParameters
    		Else
    			' If key dont exist
    			If InStr(1, sShutdown, "[Shutdown]") = 0 And sMACHINEorUSER = "MACHINE" Then sShutdown = VbCrLf & "[Shutdown]"
    			If InStr(1, sShutdown, "[Logoff]") = 0 And sMACHINEorUSER = "USER" Then sShutdown = VbCrLf & "[Logoff]"
    			sShutdown = sShutdown &  VbCrLf & iLastShutdown & "CmdLine=" & sScript
    			sShutdown = sShutdown &  VbCrLf & iLastShutdown & "Parameters=" & sParameters
    		End If
     
    		' Close file
    		oINI.Close
    	End If
    	On Error GoTo 0
    		' prin result
    		WScript.Echo sStartup &  sShutdown
     
    		' Write result in ini file
    		Set oINI = ooFSO.CreateTextFile(sScriptPath, True)
    		oINI.WriteLine sStartup & sShutdown
    		oINI.Close
     
    		' Set file as hidden
    		Set oINIProperties = ooFSO.GetFile(sScriptPath) 
    		oINIProperties.Attributes = 2 'The File become Hidden!
     
    		' Remove registry key
    		'Set oRegFile = ooFSO.CreateTextFile(CurDir & "\~TMP-REG-WriteGPOScriptPolicy-Script.reg", True)
    		'oRegFile.WriteLine "Windows Registry Editor Version 5.00"
    		'oRegFile.WriteLine "[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts]"
    		'oRegFile.Close
    		'oShell.Run "REGEDIT /S " & CurDir & "\~TMP-REG-WriteGPOScriptPolicy-Script.reg"
    		'oFSO.DeleteFile CurDir & "\~TMP-REG-WriteGPOScriptPolicy-Script.reg", True
     
    		' Check if COMPUTER or USER Policy
    		If sMACHINEorUSER = "MACHINE" Then
    			' Reload configuration from ini file
    			ooShell.Run "GPUPDATE /Target:Computer /Force /Wait:30", 1, True
    		Elseif sMACHINEorUSER = "USER" Then
    			' Reload configuration from ini file
    			ooShell.Run "GPUPDATE /Target:User /Force /Wait:30", 1, True
    		Else
    			WScript.Echo "Please set value for sMACHINEorUSER !"
    			WScript.Quit
    		End If
     
    End Sub

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Par défaut
    Bonjour,

    Désolé de faire remonter ce message qui date de plus de 6/8 mois.

    Je me suis inspiré de ce post pour automatiser le déploiement d'un script à la fermeture de session sur plusieurs postes.

    Plusieurs cas:
    1/ Sur certains aucun problème ca passe très bien
    2/ Sur d'autres erreur répertoire non créés, donc j'ai rajouter quelques lignes:
    Set sSys32 = ooFSO.GetSpecialFolder(1)

    if not ooFSO.folderExists(sSys32&"\GroupPolicy") then ooFSO.createFolder(sSys32&"\GroupPolicy")
    if not ooFSO.FolderExists(sSys32&"\GroupPolicy\User") then ooFSO.createFolder(sSys32&"\GroupPolicy\User")
    if not ooFSO.FolderExists(sSys32&"\GroupPolicy\User\Scripts") then ooFSO.CreateFolder(sSys32&"\GroupPolicy\User\Scripts")

    3/ Sur d'autres machines le script aparait bein dans ma console (gpedit.msc) mais ne se déclenche jamais lors de la fermeture de session; Je suis obligé manuellement de supprimer, en gpedit, le script renseigné et de le rajouter manuellement pour qu'il soit bien pris en compte en fermeture de session.

    Je précise que j'avais fait plusieurs gpupdate /force pour forcer la relecture; Mais cela n'avait rien changé.

    En fait je souhaiterais solutionner le point numéro 3.
    Auriez-vous des idées ou pistes de recherche svp.?

    Merci
    David

  10. #10
    Nouveau candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Par défaut UNE SOLUTION
    Salut tout le monde,

    bon "Minick" a apporté un lien intéressant sur les modifications a apporter
    sur le fichier gpt.ini

    et le script de christian_grandjean est un très bon départ mais n'est pas suffisant. Son script fonctionne que si l'utilisateur va dans gpedit pour vérifier
    que son ajout a bien fonctionné, et donc que gpedit rajoute des modifications non prévues par le script de christian.

    Je vous propose le script suivant, que j'ai amélioré, testé et utilisé à mon boulot (ne dites pas à mon boss que je vous l'ai refilé, il me ferait chier avec les droits d'auteurs)


    exemple d'utilisation pour ajouter un script au shutdown :
    CSCRIPT Add_Script_To_Session.vbs "D:\testshutdown.bat" false "MACHINE"

    exemple d'utilisation pour ajouter un script au logoff :
    CSCRIPT Add_Script_To_Session.vbs "D:\logoff.bat" false "USER"


    à copier dans un fichier nommé :Add_Script_To_Session.vbs
    (bon faites attention à la longueur des lignes qui ne correspond pas obligatoirement à la largeur autorisée sur ce forum)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    '*********************************************************
    '                            En-tête
    '*********************************************************
    ' °Author	: BLUTEAU Erwan et christian grandjean
    ' °Date		: 28.01.2011
    ' °Version	: 3.0
    '
    ' °Script description :
    '	Add entries in local GPO for "Machine => Startup/Shutdown" or "User
    '        => Logon/Logoff" entries.
    '
    ' °Script parameters :
    '	sScript = Script or application to run
    '	sParameters = command line parameters
    '	sAddInStartupOrLogin
    '		True = Startup / Logon
    '		False = Shutdown / Logoff
    '	sMACHINEorUSER
    '		MACHINE = Machine Policy
    '		USER = User Policy
    '
    ' °Script workflow :
    '	1. Set ini file to normal mode
    ' 	2. Edit ini file
    ' 	3. Create/Add changes
    ' 	4. Delete GPO registry key
    '	5. Set ini file to hidden mode
    ' 	6. Run GPUPDATE to integrate entries in registry
    '
    ' °Remarks :
    '	The script accept maximum 9 entries in ini file
    '
    '********************************************************
    '                          Fin en-tête 
    '*********************************************************
     
     
    Const ForReading =1    	'Constante pour l ouverture en lecture d un fichier
    Const ForWriting = 2
    const ForAppending = 8
    Const DeleteReadOnly = True
    '*********************************************************
    'recupération des paramétres
    '*********************************************************
    Set objArgs = Wscript.Arguments         ' Objet pour récupérer les arguments
    'Param 1
    TargetRunningScript=Wscript.Arguments(0)
    'Param 2
    if Wscript.Arguments.count <= 3 then
    	TargetRunningScriptParam=""
    else
    	TargetRunningScriptParam = Wscript.Arguments(1)
    	if Wscript.Arguments.count >= 5 then
    		for i = 2 to Wscript.Arguments.count-3
    			TargetRunningScriptParam = TargetRunningScriptParam & " " & Wscript.Arguments(i)
    		next
    	end if
    end if
    'Param 3
    TargetTime=Wscript.Arguments(Wscript.Arguments.count-2)
    'Param 4
    TargetGPO=Wscript.Arguments(Wscript.Arguments.count-1)
     
    'wscript.echo "param1=" & TargetRunningScript
    'wscript.echo "param2=" & TargetRunningScriptParam
    'wscript.echo "param3=" & TargetTime
    'wscript.echo "param4=" & TargetGPO
     
     
    'LANCEMENT SCRIPT
    WriteGPOScriptPolicyGPTINIFILE TargetTime,TargetGPO
    WriteGPOScriptPolicy TargetRunningScript,TargetRunningScriptParam,TargetTime,TargetGPO
    '*********************************************************
    '                            FIN
    '*********************************************************
    'WScript.Sleep 10000
    WScript.Quit
     
     
     
     
     
     
    '*********************************************************
    '                         LES FONCTIONS
    '*********************************************************
    Sub WriteGPOScriptPolicyGPTINIFILE(ByVal sAddInStartupOrLogin, ByVal sMACHINEorUSER)
    	Dim objFSO,ooShell
    	Dim sSys32
    	Dim FicGptIni, PathGptIni, TmpVar, NbrLigne, i,ext, version
    	Dim TABGptIni()
    	Set ooShell = CreateObject("WSCript.Shell")									'Pour RUN de commandes
    	Set objFSO = CreateObject("Scripting.FileSystemObject")						'
    	Set sSys32 = objFSO.GetSpecialFolder(1)
     
    	PathGptIni = sSys32 & "\GroupPolicy\gpt.ini"
    	PathGptIniTMP = PathGptIni & ".tmp"
     
    	NbrLigne = 0
    	IF objFSO.FileExists(PathGptIni) Then
     
    		Set FicGptIni = objFSO.OpenTextFile(PathGptIni, ForReading)
    		Do Until FicGptIni.AtEndOfStream
    			NbrLigne = NbrLigne + 1
    			TmpVar = FicGptIni.ReadLine()
    			ReDim preserve TABGptIni(NbrLigne)
    			TABGptIni(NbrLigne)=TmpVar
    			'wscript.echo TABGptIni(NbrLigne)
    		Loop
    		'wscript.echo "***********************"
    		'wscript.echo "***********************"
     
    		if sMACHINEorUSER = "MACHINE" then
    			For i = 0 to NbrLigne	
    				if 	instr(TABGptIni(i),"gPCMachineExtensionNames") then
    					if instr(TABGptIni(i),"[{42B5FAAE-6536-11D2-AE5A-0000F87571E3}{40B6664F-4972-11D1-A7CA-0000F87571E3}]") then
    						'wscript.echo "deja présent"	
    					else
    						ext = right(TABGptIni(i),len(TABGptIni(i))-instr(TABGptIni(i),"="))
    						TABGptIni(i) = "gPCMachineExtensionNames=" & "[{42B5FAAE-6536-11D2-AE5A-0000F87571E3}{40B6664F-4972-11D1-A7CA-0000F87571E3}]" & ext
    					end if
    				end if
     
    				if 	instr(TABGptIni(i),"Version=") AND (instr(TABGptIni(i),"gPCFunctionalityVersion")=0) then
    					version = right(TABGptIni(i),len(TABGptIni(i))-instr(TABGptIni(i),"="))
    					version = version + 65536
    					TABGptIni(i) = "Version=" & version
    				end if
    			Next
    		end if
     
    		if sMACHINEorUSER = "USER" then
    			For i = 0 to NbrLigne	
    				if 	instr(TABGptIni(i),"gPCUserExtensionNames") then
    					if instr(TABGptIni(i),"[{42B5FAAE-6536-11D2-AE5A-0000F87571E3}{40B66650-4972-11D1-A7CA-0000F87571E3}]") then
    						'wscript.echo "deja présent"	
    					else
    						ext = right(TABGptIni(i),len(TABGptIni(i))-instr(TABGptIni(i),"="))
    						TABGptIni(i) = "gPCUserExtensionNames=" & "[{42B5FAAE-6536-11D2-AE5A-0000F87571E3}{40B66650-4972-11D1-A7CA-0000F87571E3}]" & ext
    					end if
    				end if
     
    				if 	instr(TABGptIni(i),"Version=") AND (instr(TABGptIni(i),"gPCFunctionalityVersion")=0) then
    					version = right(TABGptIni(i),len(TABGptIni(i))-instr(TABGptIni(i),"="))
    					version = version + 1
    					TABGptIni(i) = "Version=" & version
    				end if
    			Next
    		end if
     
    		on error goto 0
    		If objFSO.FileExists(PathGptIniTMP) Then
    			objFSO.DeleteFile(PathGptIniTMP)
    		End If
    		Set FicGptIniTEMP = objFSO.OpenTextFile(PathGptIniTMP, ForWriting,true)
    		for k = 0 to NbrLigne	
    			'wscript.echo TABGptIni(k)
    			FicGptIniTEMP.write(TABGptIni(k) & vbNewLine)
    		next
    		FicGptIniTEMP.close
    		objFSO.CopyFile PathGptIniTMP, PathGptIni, 1
    		If objFSO.FileExists(PathGptIniTMP) Then
    			objFSO.DeleteFile(PathGptIniTMP)
    		End If
     
    	END IF
     
     
    End Sub
    '*********************************************************
    Sub WriteGPOScriptPolicy(ByVal sScript, ByVal sParameters, ByVal sAddInStartupOrLogin, ByVal sMACHINEorUSER)
    	Dim sScriptPath, sSys32, sTMP
    	Dim oINI, ooShell, ooFSO, oINIProperties, oRegFile
    	Dim iLastStartup, iLastShutdown
    	Dim sOption1, sOption2, sStartup, sShutdown
    	sStartup = ""
    	sShutdown = ""
    	sMACHINEorUSER = Ucase(sMACHINEorUSER)
     
    	Set ooShell = CreateObject("WSCript.Shell")
    	Set ooFSO = CreateObject("Scripting.FileSystemObject")
     
    	Set sSys32 = ooFSO.GetSpecialFolder(1)
     
    	' Check if COMPUTER or USER Policy
    	If sMACHINEorUSER = "MACHINE" Then
    		sScriptPath = sSys32 & "\GroupPolicy\Machine\Scripts\scripts.ini"
    	Elseif sMACHINEorUSER = "USER" Then
    		sScriptPath = sSys32 & "\GroupPolicy\User\Scripts\scripts.ini"
    	Else
    		WScript.Echo "Please set value for sMACHINEorUSER !"
    		WScript.Quit
    	End If
     
    	If (Not ooFSO.FileExists(sScriptPath)) Then
    		' Add new value in startup or shutdown
    		If sAddInStartupOrLogin Then
    			iLastStartup = 0
    			If sMACHINEorUSER = "MACHINE" Then sStartup =  VbCrLf & "[Startup]"
    			If sMACHINEorUSER = "USER" Then sStartup =  VbCrLf & "[Logon]"
    			sStartup = sStartup & VbCrLf & iLastStartup & "CmdLine=" & sScript
    			sStartup = sStartup & VbCrLf & iLastStartup & "Parameters=" & sParameters
    		Else
    			iLastShutdown = 0
    			If sMACHINEorUSER = "MACHINE" Then sStartup =  VbCrLf & "[Shutdown]"
    			If sMACHINEorUSER = "USER" Then sStartup =  VbCrLf & "[Logoff]"
    			sShutdown = sShutdown &  VbCrLf &iLastShutdown & "CmdLine=" & sScript
    			sShutdown = sShutdown &  VbCrLf &iLastShutdown & "Parameters=" & sParameters
    		End If
    	Else
    		' Set file as normal
    		Set oINIProperties = ooFSO.GetFile(sScriptPath) 
    		oINIProperties.Attributes = 0 'The File become Hidden!
     
    		' read
    		Set oINI = ooFSO.OpenTextFile(sScriptPath, 1)
     
    		iLastStartup = 0
    		iLastShutdown = 0
     
    		Do While 1 = 1
    			On Error Resume Next
    				sTMP = oINI.ReadLine
    				'If sTMP = VbCrLf Then sTMP = ""
    				If Err > 0 Then Exit Do
    			On Error GoTo 0
     
    			If InStr(1, UCase(sTMP), UCase("[Startup]")) > 0 And sMACHINEorUSER = "MACHINE" Then sOption1 = sTMP
    			If InStr(1, UCase(sTMP), UCase("[Shutdown]")) > 0 And sMACHINEorUSER = "MACHINE" Then sOption2 = sTMP
    			If InStr(1, UCase(sTMP), UCase("[Logon]")) > 0 And sMACHINEorUSER = "USER" Then sOption1 = sTMP
    			If InStr(1, UCase(sTMP), UCase("[Logoff]")) > 0 And sMACHINEorUSER = "USER" Then sOption2 = sTMP
     
    			If sOption1 = "[Startup]" And sOption2 <> "[Shutdown]" Or sOption1 = "[Logon]" And sOption2 <> "[Logoff]" Then
    				sStartup = sStartup & VbCrLf & sTMP
     
    				On Error Resume Next
    					'WScript.Echo CInt(Left(sTMP, 1))
    					iLastStartup = Cint(Left(sTMP, 1)) + 1
    				On Error GoTo 0
    				'WScript.Echo "Start Next value = " & iLastStartup
    			Else
    				sShutdown = sShutdown & VbCrLf & sTMP
    				On Error Resume Next
    					'WScript.Echo CInt(Left(sTMP, 1))
    					iLastShutdown = CInt(Left(sTMP, 1)) + 1
    				On Error GoTo 0
    				'WScript.Echo "Shutdown Next value = " & iLastShutdown
    			End If 
    		Loop
     
    		' Add new value in startup or shutdown
    		If sAddInStartupOrLogin Then
    			' If key dont exist
    			If InStr(1, sStartup, "[Startup]") = 0 And sMACHINEorUSER = "MACHINE" Then sStartup = VbCrLf & "[Startup]"
    			If InStr(1, sStartup, "[Logon]") = 0 And sMACHINEorUSER = "USER" Then sStartup = VbCrLf & "[Logon]"
    			sStartup = sStartup & VbCrLf &iLastStartup & "CmdLine=" & sScript
    			sStartup = sStartup & VbCrLf & iLastStartup & "Parameters=" & sParameters
    		Else
    			' If key dont exist
    			If InStr(1, sShutdown, "[Shutdown]") = 0 And sMACHINEorUSER = "MACHINE" Then sShutdown = VbCrLf & "[Shutdown]"
    			If InStr(1, sShutdown, "[Logoff]") = 0 And sMACHINEorUSER = "USER" Then sShutdown = VbCrLf & "[Logoff]"
    			sShutdown = sShutdown &  VbCrLf & iLastShutdown & "CmdLine=" & sScript
    			sShutdown = sShutdown &  VbCrLf & iLastShutdown & "Parameters=" & sParameters
    		End If
     
    		' Close file
    		oINI.Close
    	End If
    	On Error GoTo 0
    		' prin result
    		'WScript.Echo sStartup &  sShutdown
     
    		' Write result in ini file
    		Set oINI = ooFSO.CreateTextFile(sScriptPath, True)
    		oINI.WriteLine sStartup & sShutdown
    		oINI.Close
     
    		' Set file as hidden
    		Set oINIProperties = ooFSO.GetFile(sScriptPath) 
    		oINIProperties.Attributes = 2 'The File become Hidden!
     
    		' Remove registry key
    		'Set oRegFile = ooFSO.CreateTextFile(CurDir & "\~TMP-REG-WriteGPOScriptPolicy-Script.reg", True)
    		'oRegFile.WriteLine "Windows Registry Editor Version 5.00"
    		'oRegFile.WriteLine "[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts]"
    		'oRegFile.Close
    		'oShell.Run "REGEDIT /S " & CurDir & "\~TMP-REG-WriteGPOScriptPolicy-Script.reg"
    		'oFSO.DeleteFile CurDir & "\~TMP-REG-WriteGPOScriptPolicy-Script.reg", True
     
    		' Check if COMPUTER or USER Policy
    		If sMACHINEorUSER = "MACHINE" Then
    			' Reload configuration from ini file
    			ooShell.Run "GPUPDATE /Target:Computer /Force /Wait:30", 0, True
    			'if err.number <> 0 then
    			'	wscript.echo "ERREUR : " & err.Number & " : "  & err.Description
    			'	wscript.sleep 10000
    			'end if
    		Elseif sMACHINEorUSER = "USER" Then
    			' Reload configuration from ini file
    			ooShell.Run "GPUPDATE /Target:User /Force /Wait:30", 0, True
    		Else
    			WScript.Echo "Please set value for sMACHINEorUSER !"
    			WScript.Quit
    		End If
     
    End Sub

Discussions similaires

  1. Opengl / SDL : Modifier une texture pixel par pixel
    Par tenseiken dans le forum Langage
    Réponses: 0
    Dernier message: 27/03/2009, 13h58
  2. Modifier une condition Where par VBA
    Par totojordi dans le forum VBA Access
    Réponses: 12
    Dernier message: 02/07/2008, 08h50
  3. Modifier une table uniquement par formulaire
    Par langevert dans le forum Sécurité
    Réponses: 6
    Dernier message: 14/08/2007, 13h39
  4. Réponses: 1
    Dernier message: 29/01/2007, 10h41
  5. Comment modifier une BufferedImage alimenté par un Thread
    Par jlassiramzy dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 02/08/2006, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo