Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA - Afficher les autorisations d'accès des répertoires / fichiers

64 views
Skip to first unread message

ThierryP

unread,
Nov 23, 2016, 5:57:41 AM11/23/16
to
Bonjour le forum,

Windows Server ne permettant pas de lister facilement les autorisations d'accès (par utilisateur ou groupe de l'AD) aux dossiers / fichiers, je voudrais le faire via VBA.

Si une âme charitable voulait bien me donner un début de piste... je lui en serais très reconnaissant !!

Merci d'avance

ThierryP

MichD

unread,
Nov 23, 2016, 7:30:11 AM11/23/16
to

Bonjour,

Tu veux accéder aux permissions d'un usager sur des fichiers ?

Regarde ici :
http://stackoverflow.com/questions/2928738/how-to-grant-permission-to-users-for-a-directory-using-command-line-in-windows

La fenêtre CMD = fenêtre d'une invite de commande ouverte comme admin.

Un exemple en vba d'une commande utilisant la fenêtre de l'invite de commande:
===============

Pour créer tous les répertoires du chemin :

Sub test()

Dim Chemin As String, Commande As String

'Crée d'un seul coup tous les répertoires
'et sous-répertoires s'ils sont absents et
'ne touche à rien s'ils sont présents
Chemin = "c:\AAA\Denis\Daniel\toto\Bozo\"

'S'assurer d'être sur le bon lecteur où les répertoires
'doivent être créé
ChDrive "C"

Commande = Environ("comspec") & " /c mkdir " & Chemin
Shell Commande, 0

End Sub
=================

MichD

MichD

unread,
Nov 23, 2016, 7:55:45 AM11/23/16
to
En supplément,

Pour connaître tout ce que tu peux faire avec la commande "icacls",
dans une fenêtre de l'invite de commande, tape cette commande icacls /?

MichD


ThierryP

unread,
Nov 23, 2016, 8:56:20 AM11/23/16
to
Bonjour Denis,

Merci pour le lien ! Mon problème, c'est qu'en utilisant ICACLS, je peux créer un fichier texte contenant toutes les infos (enfin, je suppose !!) mais difficilement exploitables (en tous cas, pour moi) du style :

Bureau_etudes
D:PAI(A;OICI;FA;;;BA)(A;OICI;0x1301bf;;;BU)S:AI

ou encore :

Commercial
D:PAI(D;OICI;CCSWWPLORC;;;S-1-5-21-1004336348-1801674531-1179727518-1128)(A;OICI;FA;;;S-1-5-21-1004336348-1801674531-1179727518-1668)(A;OICI;FA;;;BA)(A;OICI;0x1200a9;;;DU)(A;OICI;FA;;;S-1-5-21-3310317648-1530309550-2900299992-1003)S:AI

Un peu trop compliqué pour moi ! J'espérais pouvoir trouver quelque chose qui puisse me donner directement les noms (utilisateurs ou groupes de l'AD), pour chaque dossier / fichier, Excel me permettant alors d'analyser assez facilement les données. D'après mes tests, il faut que je construise une table de correspondance entre les noms et les codes bizarroïdes comme : S-1-5-21-3310317648-1530309550-2900299992-1003)S:AI, puis pour les droits eux-mêmes. Je crois qu'il va me falloir investir dans un logiciel dédié !

Merci de t'être penché sur mon souci..... qui dépasse peut-être l'utilisation d'Excel !

ThierryP

MichD

unread,
Nov 23, 2016, 9:32:03 AM11/23/16
to
Tu peux extraire les informations que tu désires en utilisant un fichier .txt .
Dans un deuxième temps, tu as besoin d'une autre macro pour extraire l'information
de ce fichier texte dans Excel si besoin.

Personne n'a dit que l'utilisation de cette commande était facile et quelqu'un pouvait
arriver à extraire les informations désirées après quelques minutes...

Des adresses où tu as des exemples d'utilisation de la commande "icacls"

http://www.computerhope.com/cacls.htm

https://www.windows-commandline.com/cacls-command-examples/

http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/nftechsupt.web+WinBatch/How~To/System~Information+ICACLS~Code~Sample.txt

MichD

HB

unread,
Nov 23, 2016, 11:22:40 AM11/23/16
to
J'ai fait il y a longtemps un vbs qui fait ça :
mais si l'AD est grosse, ça va être kilométrique

Je l'ai fait pour des Stations du domaine (vérification en cas
d'embrouille, par pour un contrôleur de domaine...)

Attention c'est super extra long ...


Voici d'abord son mode d'emploi.
=========================================================================
Autorisations_CSV.vbs HB 2009

But

Ce script permet de faire un bilan des autorisations de sécurité pour un
ensemble de fichiers et/ou de réper-toires. Les résultats sont regroupés
dans un fichier liste.csv de façon à faciliter la consultation et
l’étude des informations contenues...


Pour utiliser ce script

Vous devez avoir le droit d’écrire dans le répertoire où se trouve ce
script.
Saisir avec la souris les objets (fichiers et/ou répertoires) à traiter
puis, par glisser-déposer, Les amener sur le script
Autorisations_CSV.vbs . Un formulaire (géré par IE et par le script)
surgit ...


Signification des paramètres

Profondeur :

Objets pris en compte selon la valeur de ce paramètre numérique :
0 : Seulement les objets transmis.
1 : Les objets transmis et les objets "contenus dans les répertoires
transmis".
2 : ... et aussi les objets "contenus dans les 'répertoires contenus
dans les répertoires transmis' " ...
3 à 10 : etc... (récursivité) ...

Objets à traiter :

Il y a trois choix : Dossiers et Fichiers ou bien Dossiers ou bien
Fichiers

Types de fichiers :

On peut limiter le traitement à certains types de fichiers en
fournissant une ou plusieurs extensions. Le séparateur utilisé doit
alors être le point-virgule. Toute valeur différente de « .* » est
interprétée comme une liste d’extensions.
Valeur spéciale : .* Tout type de fichier ...
Extension unique :
.bat Fichiers .bat.
Liste d’extensions : .vbs; ; html
Fichiers .vbs, .html et sans extension.

Les espaces situés au début et/ou à la fin de chaque extension seront
supprimés...
Un espace seul sera donc interprété comme une chaîne vide (fichiers sans
extension).
Le nombre des extensions est limité à 20 et la longueur totale de la
saisie ne peut dépasser 100 caractères...


Résultat

Si vous fermez la fenêtre ("croix rouge") ou si vous choisissez le
bouton Annuler, rien ne sera fait...
Si vous choisissez le bouton Valider, le script fabriquera un fichier
liste.csv contenant les informations attendues.
Il s'agit d'un fichier CSV standard avec le point-virgule comme
séparateur de champs.
Ensuite, tout bon tableur vous permettra rapidement de présenter ces
données pour en faciliter la lecture.


Contenu du fichier liste.csv

Les 4 premières colonnes :

Le chemin L'utilisateur / le groupe concerné
Précision indiquant si ces autorisations sont héritées Le « masque »
indiquant les ACL ( pour info...)

Les 5 colonnes suivantes donnent les autorisations "basiques"

Ce sont des combinaisons d'autorisations élémentaires.
Cela correspond à ce que l'on peut voir avec l'onglet sécurité.

Les 4 colonnes suivantes donnent les autorisations "génériques" codées à
part dans les ACL...

Les 14 colonnes suivantes donnent les autorisations élémentaires :

Ce sont les autorisations auxquelles on accède par > onglet sécurité
> Paramètres avancés > modifier

============================================================================
voici maintenant le vbs

Attention, des retours de lignes intempestifs sont ajoutés (dans les
news) ... Il faudra bien tout relire

' =========== VARIABLES ============================================
' Tableaux
Dim Code(16), Nom(16)
Dim CodeSt(6), NomSt(6)
Dim CodeG(5), NomG(5)
Dim TablExt(20)
' objets
Dim ONET, FSO, oIE, ts, FichierListe, fdo, ObjArgs
' chaînes
Dim Machine, Chemin, FicHtml, Titre
Dim CheminFichier, EXT, Bidon, Cc
' Valeurs numériques
Dim Nb, NbArgs, IArgs, NbExt, KOI, PROFONDEUR , Ii
' DWORD de la BdR
DIM AGARDER
' Booléens
Dim FICHIERS, DOSSIERS, ChoixExt
' ============ Récupération des arguments transmis =================
Set ObjArgs = WScript.Arguments
Nb = ObjArgs.Count

NbArgs = Nb - 1
' ================= ze fso ,bien sûr ===============================
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
' ============== remplissage des tableaux =========================
INIT()
' ====================nom de la machine ============================
set ONET = WScript.CreateObject("wscript.Network")
Machine = ONET.ComputerName
set ONET = Nothing

' ================== Chemin du script ==============================
Chemin = WScript.ScriptFullName

' ============================================================
' =============== page html pour les paramètres ==============
' ============================================================
Titre = "Liste des ACL : Paramétrage"
FicHtml=Left(Chemin, InStrRev(Chemin, "\")) & "index.html"
Set ts = FSO.CreateTextFile(FicHtml, True)
' ============================================================
ts.writeline "<html>"
ts.writeline "<head>"
ts.writeline "<title>" & Titre & "</title>"
ts.writeline "<STYLE TYPE=""text/css"">"
ts.writeline " body {"
ts.writeline " font-family: Verdana;"
ts.writeline " font-size: 10 pt }"
ts.writeline " h1, h2, h3, h4, h5, h6 { font-family: Verdana }"
ts.writeline "</STYLE>"
ts.writeline "</head>"
ts.writeline "<body bgcolor=""#FFFFD2"">"
ts.writeline "<script language=""VBScript""> "
ts.writeline "<!--"
ts.writeline "Dim saibon "
ts.writeline "Sub OKAY_OnClick"
ts.writeline " saibon=1 "
ts.writeline "End Sub"
ts.writeline "Sub NIET_OnClick"
ts.writeline " saibon=-1 "
ts.writeline "End Sub"
ts.writeline "Sub Window_OnLoad()"
ts.writeline " saibon=0 "
ts.writeline "End Sub"
ts.writeline "Public Function Controle()"
ts.writeline " Controle=saibon"
ts.writeline "End function"
ts.writeline "'-->"
ts.writeline "</script>"
ts.writeline "<form name=""FORME"">"
ts.writeline "Profondeur de la recherche :&nbsp;&nbsp;"
ts.writeline "<select name=""PROF"" size=""1"">"
ts.writeline "<option selected>0</option>"
ts.writeline "<option>1</option>"
ts.writeline "<option>2</option>"
ts.writeline "<option>3</option>"
ts.writeline "<option>4</option>"
ts.writeline "<option>5</option>"
ts.writeline "<option>6</option>"
ts.writeline "<option>7</option>"
ts.writeline "<option>8</option>"
ts.writeline "<option>9</option>"
ts.writeline "<option>10</option>"
ts.writeline "</select><br><br>"

ts.writeline "Objets à traiter :&nbsp;&nbsp;"
ts.writeline "<select name=""DOSFICH"" size=""1"">"
ts.writeline "<option selected>Dossiers et Fichiers</option>"
ts.writeline "<option>Dossiers</option>"
ts.writeline "<option>Fichiers</option>"
ts.writeline "</select><br><br>"

ts.writeline "Type de fichiers à traiter (""<code>.*</code>"" pour
<b>tous</b> <u>ou bien</u> extension(s)) :<br>"
Ts.Writeline "<INPUT TYPE=""text"" STYLE=""FONT-FAMILY: Courier New;""
NAME=""TYPEFICH"" SIZE=60 MAXLENGTH=100 VALUE="".*"">"
Ts.Writeline "<br><small>&nbsp;&nbsp;Vous pouvez mettre jusqu'à 20
extensions en les séparant par des point-virgules."
Ts.Writeline "<br>&nbsp;&nbsp;Pour les fichiers sans extension vous
pouvez utiliser un chaîne vide ou un espace."
Ts.Writeline "<br><i>&nbsp;&nbsp;Ces données seront ignorées si seuls
les dossiers sont traités...</i></small>"
ts.writeline "<br><br><hr><br>"

ts.writeline "<center><input type=""button"" value="" Valider ""
name=""OKAY"">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
ts.writeline "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input
type=""button"" value="" Annuler "" name=""NIET""></center>"
ts.writeline "</form>"
ts.writeline "</body>"
ts.writeline "</html>"
ts.Close
set ts=nothing

' ============================================================
' Ouverture d'Internet Explorer
Set oIE = WScript.CreateObject("InternetExplorer.Application", "IE_")

oIE.Left = 100
oIE.Top = 50
oIE.Height = 300
oIE.Width = 580
oIE.MenuBar = 0
oIE.ToolBar = 0
oIE.StatusBar = 0

oIE.navigate FicHtml
oIE.Visible = 2


Do While (oIE.Busy)
WScript.Sleep 200
Loop

' ============================================================
' Attente d'action sur un bouton ou fermeture de la fenêtre
On Error Resume Next
Do
WScript.Sleep 100
Loop While (oIE.Document.Script.Controle() = 0)
' ============================================================
' Si on ferme directement IE sans passer par un bouton,
' on quitte le script
If Err <> 0 Then
FSO.DeleteFile FicHtml,true
Set FSO = Nothing
Wscript.quit
end if
' ============================================================
Test = oIE.Document.Script.Controle()
If Test = -1 Then
CloseIE
Set FSO = Nothing
Wscript.quit
end if
' ============================================================
' ============== Récupération des paramètres =================
' ============================================================
KOI = oIE.Document.FORME.DOSFICH.selectedIndex
PROFONDEUR = oIE.document.FORME.PROF.selectedIndex
EXT = oIE.document.FORME.TYPEFICH.Value
' ============================================================
CloseIE
' ============================================================
If EXT = ".*" then
ChoixExt = False
else
ChoixExt = True
TabExt = Split(EXT,";")
NbExt = UBound(TabExt)
For Ii = 0 to NbExt
TabExt(Ii) = TRIM(LCase(TabExt(Ii)))
Next
End If
DOSSIERS = (KOI = 0 Or KOI = 1)
FICHIERS = (KOI = 0 Or KOI = 2)
' ============================================================
' ============================================================

CheminFichier = Left(Chemin, InStrRev(Chemin, "\")) & "liste.csv"
Set FichierListe = FSO.OpenTextFile(CheminFichier, 2, True)

Bidon = "Chemin;Utilisateurs / Groupes;Hérité;Masque Complet"

' Première ligne du CSV : Nom des colonnes ===================

for Ii = 1 to 5
Bidon = Bidon & ";" & NomSt(Ii)
next

for Ii = 1 to 4
Bidon = Bidon & ";" & NomG(Ii)
next

for Ii = 1 to 14
Bidon = Bidon & ";" & Nom(Ii)
next

FichierListe.WriteLine Bidon

' =================== BOUCLE sur les arguments ====================
For IArgs = 0 to NbArgs
Cc = ObjArgs(IArgs)

If (FSO.FileExists(Cc) And FICHIERS) Then
If FLAGFICH(CC) then
Fichierliste.Writeline SONCAS(Cc)
End if
End If
If FSO.FolderExists(CC) then
Set fdo = FSO.GetFolder(Cc)
If DOSSIERS Then
Fichierliste.Writeline SONCAS(fdo.path)
End If
If PROFONDEUR > 0 then
Call Traite(fdo,1)
End If

end if
Next
' ========================================================================
Set FSO = Nothing
Fichierliste.Close
Set Fichierliste = Nothing

MsgBox "C'est fini..."
Wscript.quit
' ========================================================================
' ========================================================================
Sub Traite(fd,nivo)
If FICHIERS Then
For Each Sf In Fd.Files
If FLAGFICH(Sf.name) then
Fichierliste.Writeline SONCAS(sf.path)
End If
Next
End If

For Each sfg in fd.SubFolders
If DOSSIERS then
Fichierliste.Writeline SONCAS(sfg.path)
End If
If PROFONDEUR > nivo Then
Call Traite(sfg,nivo+1)
End If
Next

End Sub
'
===================================================================================
' Procédure qui traite un objet : avec WMI et les descripteurs de
sécurité ...
'
===================================================================================
Function SONCAS(CHE)
Dim CHECHE, Elt, Msg, Devant
Dim wmiFileSecSetting, Quissa
Dim DescripteurDeSecurite
Dim intControlFlags, Masque, AcT, TypeHerit
Dim RetVal, I

CHECHE = "'" & Replace(CHE,"\","\\") & "'"

Set wmiFileSecSetting =
GetObject("winmgmts:Win32_LogicalFileSecuritySetting.path=" & CHECHE)

RetVal = wmiFileSecSetting. _
GetSecurityDescriptor(DescripteurDeSecurite)
If Err <> 0 Then
SONCAS = "GetSecurityDescriptor failed" _
& Err.Number & VBCRLF & Err.Description
Exit Function
End If

Msg = ""

intControlFlags = DescripteurDeSecurite.ControlFlags

If intControlFlags AND &H4 Then

For Each ItemSecurite In DescripteurDeSecurite.DACL
Msg = Msg & CHE
Set Quissa = ItemSecurite.Trustee
If Trim(Quissa.Domain) = "" then
Devant = ""
Else
Devant = Quissa.Domain & "\"
End If
Msg = Msg & ";" & Devant & Quissa.Name
Masque = ItemSecurite.AccessMask
AcT = ItemSecurite.AceType

TypeHerit = ItemSecurite.AceFlags
If (TypeHerit and &H18) then
Msg = Msg & ";" & "X"
Else
Msg = Msg & ";" & " "
End If

Msg = Msg & ";" &"&h" & hex(Masque)


For I = 1 to 5
If (Masque AND CodeSt(I)) = CodeSt(I) then
If AcT = 0 then
Elt = "+"
else
Elt = "-"
End If
else
Elt = " "
End If
Msg = Msg & ";" & Elt
Next

For I = 1 to 4
If (Masque AND CodeG(I)) = CodeG(I) then
If AcT = 0 then
Elt = "+"
else
Elt = "-"
End If
else
Elt = " "
End If
Msg = Msg & ";" & Elt
Next

For I = 1 to 14
If (Masque AND Code(I)) = Code(I) then
If AcT = 0 then
Elt = "+"
else
Elt = "-"
End If
else
Elt = " "
End If
Msg = Msg & ";" & Elt
Next
Msg = Msg & VbCrlf

Next
SONCAS = Msg
Else
SONCAS = "Aucune information disponible..." & VbCrlf

End If
Set wmiFileSecSetting = Nothing
Set Quissa = Nothing
End Function

' ============================================================
' Fermeture d'Internet Explorer et suppression du fichier HTML
' ============================================================
Sub CloseIE
oIE.Quit
Set oIE = Nothing
RemetScriptIE
FSO.DeleteFile fichtml,true
End Sub
' ============================================================
' Détermine si un fichier doit être traité
' ============================================================
Function FLAGFICH(CHEM)
Dim RN, RR, Truc

If EXT = ".*" Then
FLAGFICH = TRUE
else
RN = right(CHEM,Len(CHEM)- InStrRev(CHEM, "\"))
If InStrRev(RN, ".")= 0 then
RR = ""
Else
RR = "." & right(RN,Len(RN)- InStrRev(RN, "."))
End If
Truc = False
For A = 0 to NbExt
Truc = Truc Or ( RR = TabExt(A))
Next
FLAGFICH = Truc
end if

End Function

' ==============================================================
' pb de sécurité dans IE le paramètre est modifié mais conservé
' ==============================================================
Sub PourScriptIE
Dim WS
Dim CLEBDR, VARBDR

Set WS = WScript.CreateObject("WScript.Shell")
CLEBDR = "HKEY_CURRENT_USER\Software\Microsoft\Internet
Explorer\Main\FeatureControl\FEATURE_LOCALMACHINE_LOCKDOWN\"
VARBDR = CLEBDR & "iexplore.exe"
AGARDER = WS.RegRead(VARBDR)
WS.RegWrite VARBDR,0,"REG_DWORD"
Set WS = Nothing
End Sub
' ==============================================================
' pb de sécurité dans IE le paramètre est remis à la fin
' ==============================================================
Sub RemetScriptIE
Dim WS
Dim CLEBDR, VARBDR

Set WS = WScript.CreateObject("WScript.Shell")
CLEBDR = "HKEY_CURRENT_USER\Software\Microsoft\Internet
Explorer\Main\FeatureControl\FEATURE_LOCALMACHINE_LOCKDOWN\"
VARBDR = CLEBDR & "iexplore.exe"
WS.RegWrite VARBDR,AGARDER,"REG_DWORD"
Set WS = Nothing
End Sub
'
==================================================================================
sub INIT()

CodeSt(1) = &h120089
NomSt(1) = "Lire"

CodeSt(2) = &h120116
NomSt(2) = "Ecrire"

CodeSt(3) = &h1200A9
NomSt(3) = "Lire-Exécuter"

CodeSt(4) = &h1301BF
NomSt(4) = "Modifier"

CodeSt(5) = &h1101FF
NomSt(5) = "Contrôle Total"

Code(1) = &h000001
Nom(1) = "Voir"

Nom(2) = "Ajouter un fichier"
Code(2) = &h000002

Nom(3) = "Ajouter un sous-dossier"
Code(3) = &h000004

Nom(4) = "Lire les attributs étendus"
Code(4) = &h000008

Nom(5) = "Ecrire des attributs étendus"
Code(5) = &h000010

Nom(6) = "Parcourir"
Code(6) = &h000020

Nom(7) = "Détruire un élément"
Code(7) = &h000040

Nom(8) = "Lire les attributs"
Code(8) = &h000080

Nom(9) = "Ecrire les attributs"
Code(9) = &h000100

Nom(10) = "Effacer un fichier"
Code(10)= &h010000

Nom(11) = "Lire des autorisations"
Code(11)= &h020000

Nom(12) = "Modifier des autorisations"
Code(12)= &h040000

Nom(13) = "S'approprier un élément"
Code(13)= &h080000

Nom(14) = "Synchroniser"
Code(14)= &h100000

NomG(1) = "G_ALL"
CodeG(1)= &h10000000
NomG(2) = "G_EXECUTE"
CodeG(2)= &h20000000
NomG(3) = "G_WRITE"
CodeG(3)= &h40000000
NomG(4) = "G_READ"
CodeG(4)= &h80000000

' Allure générale du masque : GGGG 0000 000x xxxx 0000 000x xxxx xxxx
' 0 : Bits libres
' G : Quatre autorisations génériques
' x : Quatorze autorisations élémentaires (détails)

End Sub
'
==================================================================================

HB

unread,
Nov 23, 2016, 12:25:07 PM11/23/16
to
================== Annule et remplace le précédent ================

Comme depuis XP, la sécurité et l'objet IE ont évolué, bien sûr, ce
vieux vbs marche mal.

Mais en changeant trois fois rien, c'est bon. (testé à l'instant)

C'est donc toujours un VBS ...

En l'état il peut probablement être vite adapté au VBA pour Excel
mais comme il fabrique un CVS standard ... est-ce utile ?

Cordialement,

HB

======================================================================
Trois paramètres sont à régler dans le script :
(juste après la zone de déclaration des variables)

Profondeur :

Objets pris en compte selon la valeur de ce paramètre numérique :
0 : Seulement les objets transmis.
1 : Les objets transmis et les objets "contenus dans les
répertoires transmis".
2 : ... et aussi les objets "contenus dans les 'répertoires
contenus dans les répertoires transmis' " ...
3 à 10 : etc... (récursivité) ...

Objets à traiter (KOI) :

Il y a trois choix :
Dossiers et Fichiers ou bien Dossiers ou bien Fichiers

Types de fichiers (EXT):

On peut limiter le traitement à certains types de fichiers en
fournissant une ou plusieurs extensions. Le séparateur utilisé doit
alors être le point-virgule. Toute valeur différente de « .* » est
interprétée comme une liste d’extensions.
Valeur spéciale : .* Tout type de fichier ...
Extension unique :
.bat Fichiers .bat.
Liste d’extensions : .vbs; ; html
Fichiers .vbs, .html et sans extension.
===========================================================================
Vous devez avoir le droit d’écrire dans le répertoire où se trouve ce
script. Saisir avec la souris les objets (fichiers et/ou répertoires) à
traiter puis, par glisser-déposer, Les amener sur le script

============================================================================

Un petit message dit quand c'est fini ;
c'est assez rapide quand même ...
============================================================================
Contenu du fichier liste.csv

Les 4 premières colonnes :

Le chemin L'utilisateur / le groupe concerné
Précision indiquant si ces autorisations sont héritées Le « masque »
indiquant les ACL ( pour info...)

Les 5 colonnes suivantes donnent les autorisations "basiques"

Ce sont des combinaisons d'autorisations élémentaires.
Cela correspond à ce que l'on peut voir avec l'onglet sécurité.

Les 4 colonnes suivantes donnent les autorisations "génériques" codées à
part dans les ACL...

Les 14 colonnes suivantes donnent les autorisations élémentaires :

Ce sont les autorisations auxquelles on accède par > onglet sécurité >
Paramètres avancés > modifier

============================================================================
voici maintenant le vbs et cette fois c'est le bon, testé à l'instant
avec Windows 10


Attention, des retours de lignes intempestifs sont ajoutés (dans les
news) ... Il faudra bien tout relire et, avec notepad corriger les
erreurs qui en découlent (une bonne dizaine au moins)

à enregistrer en truc.vbs bien sûr ...

' =========== VARIABLES ============================================
' Tableaux
Dim Code(16), Nom(16)
Dim CodeSt(6), NomSt(6)
Dim CodeG(5), NomG(5)
Dim TablExt(20)
' objets
Dim ONET, FSO, oIE, ts, FichierListe, fdo, ObjArgs
' chaînes
Dim Machine, Chemin, FicHtml, Titre
Dim CheminFichier, EXT, Bidon, Cc
' Valeurs numériques
Dim Nb, NbArgs, IArgs, NbExt, KOI, PROFONDEUR , Ii
' DWORD de la BdR
DIM AGARDER
' Booléens
Dim FICHIERS, DOSSIERS, ChoixExt


' ============================================================
' ============== Paramètres à adapter =================
' ============================================================
' O : dossiers et fichiers
' 1 : seulement les dossiers
' 2 : Seulement les fichiers

KOI = 0

' pour le traitement récursif ...
PROFONDEUR = 10
' extensions séparées par ";"

EXT = ".*"
' ============================================================
' ============================================================
' PARTIE FIXE A NE PAS TOUCHER
' ============================================================
' ============ Récupération des arguments transmis ===========
Set ObjArgs = WScript.Arguments
Nb = ObjArgs.Count

NbArgs = Nb - 1
' ================= ze fso ,bien sûr =========================
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
' ============== remplissage des tableaux ===================
INIT()
' ====================nom de la machine ======================
set ONET = WScript.CreateObject("wscript.Network")
Machine = ONET.ComputerName
set ONET = Nothing

' ================== Chemin du script ========================
Chemin = WScript.ScriptFullName
' Détermine sur un fichier doir être traité
' ============================================================
Function FLAGFICH(CHEM)
Dim RN, RR, Truc

If EXT = ".*" Then
FLAGFICH = TRUE
else
RN = right(CHEM,Len(CHEM)- InStrRev(CHEM, "\"))
If InStrRev(RN, ".")= 0 then
RR = ""
Else
RR = "." & right(RN,Len(RN)- InStrRev(RN, "."))
End If
Truc = False
For A = 0 to NbExt
Truc = Truc Or ( RR = TabExt(A))
Next
FLAGFICH = Truc
end if

End Function


'

ThierryP

unread,
Nov 24, 2016, 11:01:26 AM11/24/16
to
Bonjour Denis,

Merci pour les liens ! En fait, vu le temps à consacrer à des tables de correspondance, à gérer des exceptions etc etc..., j'en suis à me demander s'il ne serait pas plus simple de tout remettre à plat et de repartir de zéro !

Je vais me plonger dans le script de HB, qui a l'air de pouvoir faire ce que je souhaite moyennant une bonne prise de tête !!

Merci

ThierryP

ThierryP

unread,
Nov 24, 2016, 11:03:17 AM11/24/16
to
Wahouu !!

Impressionnant ;o))

Je vais me plonger là-dedans, histoire de griller les quelques neurones qui me restent !!

Merci de mettre à disposition un tel boulot,

ThierryP

HB

unread,
Nov 24, 2016, 12:12:35 PM11/24/16
to
Si tu te contentes d'un Ctrl-C puis Ctrl-V dans Notepad
tu n'as quasiment rien à faire.

mais en le trouvant tout prêt avec
son mode d'emploi c'est encore mieux ... :

http://alturl.com/x6xf6

Cordialement,

HB

ThierryP

unread,
Nov 24, 2016, 12:14:49 PM11/24/16
to
Le mercredi 23 novembre 2016 17:22:40 UTC+1, HB a écrit :
> J'ai fait il y a longtemps un vbs qui fait ça :
> mais si l'AD est grosse, ça va être kilométrique


J'ai pu faire quelques petits tests, je pense que ça va me convenir au top.

Je n'aurai qu'un mot : chapeau bas !! (deux mots, du coup !)
Encore merci,

ThierryP

HB

unread,
Nov 24, 2016, 3:04:08 PM11/24/16
to
Merci,

Ce qui est bien avec VBS c'est que ce qui fonctionnait déjà avec XP et
les serveurs 2003 marche encore avec W10 et des serveurs 2012 ...
(sauf l'utilisation de l'objet com IE à cause de l'augmentation des
mesures de sécurité qui devient plus délicate)
Par exemple, l'accès à WMI et les fonctionnalités associées (ici l'accès
aux descripteurs de sécurité pour lire en détail les ACL) sont toujours là.
On ne le dira jamais assez : Les Microsoftiens ont certes des défauts
mais ils sont champions de la compatibilité ascendante ;o)
J'utilise aussi beaucoup de scripts en "ligne de commandes" pour gérer
le réseau et là encore, la compatibilité est très bien assurée.

Cordialement,

HB

JièL

unread,
Nov 24, 2016, 4:54:40 PM11/24/16
to
Le 24/11/2016 à 21:03, HB a écrit :
> On ne le dira jamais assez : Les Microsoftiens ont certes des défauts
> mais ils sont champions de la compatibilité ascendante ;o)

Heum... t'as déjà essayé d'ouvrir un fichier .MDB avec Access 2010/2013 ?

Ou ben de récupérer des mails stockés dans Outlook Express avec Outlook
(ou n'importe quoi d'autres d'ailleurs)

J'ai un carnet d'adresse .WAB, je l'ouvre avec quoi ? ;-)

Bref, je ne suis pas vraiment d'accord avec toi, surtout avec les
formats fermés de MS.

--
JièL incompatible

Message has been deleted

HB

unread,
Nov 25, 2016, 6:26:16 AM11/25/16
to
Oui

C'est normal...
Pour éviter les pb de compatibilité avec les sécurités renforcées de IE,
j'ai viré cette partie.

Il faut mettre les paramètres DANS le VBS :
La zone à modifier est clairement identifiée...

Sinon, tu peux faire un classeur excel qui, avec une macro, fabrique le
vbs avec les bons paramètres (plus simple que de tout transposer en
VBA), l'exécute puis ouvre le cvs ; l'enregistre en xlsx puis améliore
la mise en page en ajustant les colonnes et en figeant les "volets" pour
pouvoir défiler dans les données... et enfin s'auto-ferme ...
Je n'ai pas le temps mais je pense que c'est "assez facile" pour un
macroteur averti...

On peut aussi demander les paramètres avec de bêtes imputbox dans le VBS
... mais le contrôle des valeurs et la gestion des erreurs n'est pas
aussi pratique qu'en VBA.

Cordialement,

HB

Le 25/11/2016 à 11:48, ThierryP a écrit :
> Bonjour,
>
> C'est toujours pareil : dès que tu commences à aider quelqu'un, tu ne t'en sors plus !!!
> J'ai téléchargé ton zip, mais dans cette version, il n'y a plus de fenetre qui apparaît pour demander le niveau, extensions etc... Est-ce normal ? Je suis sous W7, IE11.
>
> Merci d'avance,
>
> ThierryP
>

ThierryP

unread,
Nov 25, 2016, 10:13:33 AM11/25/16
to
Bonjour,

Désolé, j'ai posté trop vite et supprimé le message trop tard !! J'ai jeté un coup d'oeil dans ton script et me suis rendu compte que ma question était idiote !!
Le fichier csv me suffit parfaitement, je me débrouille avec pour ressortir les infos dont j'ai besoin et là, mes connaissances en VBA devraient suffire !

Bon week-end,

ThierryP

HB

unread,
Nov 26, 2016, 5:23:05 AM11/26/16
to
soit ;o)
Tout n'est pas rose au pays des logiciels (en général)...

Tu connais une méthode pour récupérer les comptes,
carnets d'adresse et messages de Thunderbird
pour quelqu'un qui désire changer
de logiciel de messagerie ... ?

H.B.

JièL

unread,
Nov 28, 2016, 9:45:46 AM11/28/16
to
Le 26/11/2016 à 11:22, HB a écrit :
> Tu connais une méthode pour récupérer les comptes,

non, ça je ne pense pas que ce soit possible, du moins pas pour un autre
logiciel... Pour le même c'est possible avec l'outil de backup, voire
simplement en gardant le profil complet

> carnets d'adresse et messages de Thunderbird

Alors là tu as pris un mauvais exemple, les carnets d'adresses et
fichier de courrier sont basé sur un format ouvert ;-)

--
JièL Thunderbirdisé

ThierryP

unread,
Nov 29, 2016, 4:23:26 AM11/29/16
to
Bonjour,

Pour une fois, je peux aider ;o))

Il y a un logiciel qui s'appelle MailStore (www.mailstore.com) qui fait ça très bien. Je m'en suis servi il y a peu pour migrer des boîtes OE ou Thunderbird vers Exchange. Il existe même un AddIn qui s'intègre à Exchange pour gérer une archive dans Exchange.
Pour les carnets, un export en CSV puis import dans EXchange (si c'est ta solution) le fait.

ThierryP
0 new messages