Bonjour à tous,
je voudrais lister les droits de tous les répertoires partagés (pour l'instant je me limite au PC local) mais j'ai quelques petits soucis au niveau des jointures entre les tables dont j'ai besoin.
Voici mon code :
Je voulais également savoir quelle était la signification de GetObject dans ce genre d'utilisation car je me suis inspiré d'in code que j'ai trouvé à cette page : http://www.developpez.net/forums/arc.../t-223822.html
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 On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_Share",,48) cpt=1 For Each objItem in colItems If objItem.Type = 0 Then 'wscript.echo "dossier partage" Wscript.Echo "Partage n°" & cpt cpt=cpt+1 Wscript.Echo "Nom du partage: " & objItem.Name Wscript.Echo "Chemin d'accès: " & objItem.Path 'Wscript.Echo "Type de partage: " & objItem.Type End If ' The Win32_LogicalShareSecuritySetting 'jointure entre les tables Win32_LogicalShareSecuritySetting et objItem (Win32_Share) 'wmiFileSecSetting est une instance de la classe Win32_LogicalShareSecuritySetting Set wmiFilesSecSetting = objWMIService.ExecQuery("select * from Win32_LogicalShareSecuritySetting") 'Set wmiFileSecSetting = GetObject("winmgmts:Win32_LogicalShareSecuritySetting.Name='" & objItem.Name & "'") If objItem.Name = Win32_LogicalShareSecuritySetting.Name Then wscript.echo "nom du dossier partagé " & wmiFileSecSetting.Name 'il faut désormais trouver les groupes qui ont un lien avec le fichier partagé 'requete afin de trouver la référence du membre 'Set LSAItems = objWMIService.ExecQuery("select * from Win32_LogicalShareAccess") Set LSAItems = GetObject("winmgmts:Win32_LogicalShareAccess.SecuritySetting='" & wmiFileSecSetting & "'") WScript.echo "nom de LSAItems " & LSAItems.Name For each ref in LSAItems 'If ref.SecuritySetting = wmiFileSecSetting Then WSCript.echo "nom de droite : " & ref.SecuritySetting WSCript.echo "nom de gauche : " & wmiFileSecSetting.Name Set SIDItems = objWMIService.ExecQuery("select * from Win32_SID") For each ligne_SIDItems in SIDItems If ligne_SID = LSAItems.Trustee Then WScript.Echo "nom du groupe de gauche " & ligneSID.SID WScript.echo "nom du groupe de droite " & LSAItems.Trustee.SID End If Next 'End If Next End If Next
Sur le site de Msdn j'ai pu trouvé des informations sur les différentes classes que je devais utiliser :
Nous pouvons voir qu'il y a dans certaines tables "ref" ce qui signifie qu'une jointure est possible mais je ne sais pas comment faire !class Win32_Share
{
uint32 AccessMask;
boolean AllowMaximum;
string Caption;
string Description;
datetime InstallDate;
uint32 MaximumAllowed;
string Name;
string Path;
string Status;
uint32 Type;
};
class Win32_LogicalShareAccess : Win32_SecuritySettingAccess
{
uint32 AccessMask;
string GuidInheritedObjectType;
string GuidObjectType;
uint32 Inheritance;
Win32_LogicalShareSecuritySetting ref SecuritySetting;
Win32_SID ref Trustee;
uint32 Type;
};
class Win32_SID
{
string AccountName;
uint8 BinaryRepresentation[];
string ReferencedDomainName;
string SID;
uint32 SidLength;
};
class Win32_LogicalShareSecuritySetting : Win32_SecuritySetting
{
string Caption;
uint32 ControlFlags;
string Description;
string Name;
string SettingID;
};
Merci de vos réponses.
Partager