Jointure de tables WMI en VBS
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 :
Code:
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 |
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
Sur le site de Msdn j'ai pu trouvé des informations sur les différentes classes que je devais utiliser :
Citation:
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;
};
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 !
Merci de vos réponses.