Hieronder een leuk maar lastig probleem met WMI en VB.
Het onderstaande script wordt gebruikt om rechten uit te lezen op een Windows 2000 Server.
Alles gaat goed zolang de folder geen ' bevat.
Hieronder heb ik de code zo aangepast zie regel 40 dat deze de rechten moet uitlezen van folder:
C:\Scripts\New Folders\test's.
Echter geeft WMI hier direct de error terug SWbemServicesEx: Invalid object path.
De volgende onderstaande pagina's van Microsoft heb ik gebruikt om dit probleem te verhelpen echter kom ik er niet uit.
http://www.microsoft.com/.../qanda/dec04/hey1217.mspx
http://www.microsoft.com/.../qanda/mar06/hey0315.mspx
Wie kan mij helpen in de juiste richting te gaan zoeken.
Google en microsoft heb ik ondertussen wel gezien.
Het onderstaande script wordt gebruikt om rechten uit te lezen op een Windows 2000 Server.
Alles gaat goed zolang de folder geen ' bevat.
Hieronder heb ik de code zo aangepast zie regel 40 dat deze de rechten moet uitlezen van folder:
C:\Scripts\New Folders\test's.
Echter geeft WMI hier direct de error terug SWbemServicesEx: Invalid object path.
De volgende onderstaande pagina's van Microsoft heb ik gebruikt om dit probleem te verhelpen echter kom ik er niet uit.
http://www.microsoft.com/.../qanda/dec04/hey1217.mspx
http://www.microsoft.com/.../qanda/mar06/hey0315.mspx
Wie kan mij helpen in de juiste richting te gaan zoeken.
Google en microsoft heb ik ondertussen wel gezien.
Visual Basic:
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
| call IndexScripts sub IndexScripts() dim fso set fso = createobject("scripting.filesystemobject") dim loc if WScript.Arguments.Count = 0 Then loc = fso.GetAbsolutePathName(".") Else loc = WScript.Arguments(0) end If GetWorkingFolder loc, 0, 1, "|" set fso = Nothing End Sub function GetWorkingFolder(foldspec, foldcount, _ firsttime, spacer) Dim objShell,oExec Set objShell = CreateObject("WScript.Shell") dim fso Set fso = CreateObject("Scripting.FileSystemObject") dim fold set fold = fso.GetFolder(foldspec) dim foldcol set foldcol = fold.SubFolders 'do the first folder stuff if firsttime = 1 Then foldcount = foldcol.count firsttime = 0 end If dim remaincount remaincount = foldcol.count 'do the subfolder stuff dim sf for each sf in foldcol remaincount = GetWorkingFolder (foldspec +"\"+sf.name, _ remaincount, firsttime, spacer) strFolderName = "C:\\Scripts\\New Folders\\test\'s" SE_DACL_PRESENT = &h4 ACCESS_ALLOWED_ACE_TYPE = &h0 ACCESS_DENIED_ACE_TYPE = &h1 FILE_ALL_ACCESS = &h1f01ff FOLDER_ADD_SUBDIRECTORY = &h000004 FILE_DELETE = &h010000 FILE_DELETE_CHILD = &h000040 FOLDER_TRAVERSE = &h000020 FILE_READ_ATTRIBUTES = &h000080 FILE_READ_CONTROL = &h020000 FOLDER_LIST_DIRECTORY = &h000001 FILE_READ_EA = &h000008 FILE_SYNCHRONIZE = &h100000 FILE_WRITE_ATTRIBUTES = &h000100 FILE_WRITE_DAC = &h040000 FOLDER_ADD_FILE = &h000002 FILE_WRITE_EA = &h000010 FILE_WRITE_OWNER = &h080000 Set objWMIService = GetObject("winmgmts:") Set objFolderSecuritySettings = _ objWMIService.Get("Win32_LogicalFileSecuritySetting='" & strFolderName & "'") intRetVal = objFolderSecuritySettings.GetSecurityDescriptor(objSD) intControlFlags = objSD.ControlFlags If intControlFlags AND SE_DACL_PRESENT Then arrACEs = objSD.DACL For Each objACE in arrACEs WScript.Echo objACE.Trustee.Domain & "\" & objACE.Trustee.Name If objACE.AceType = ACCESS_ALLOWED_ACE_TYPE Then WScript.Echo vbTab & "Allowed:" ElseIf objACE.AceType = ACCESS_DENIED_ACE_TYPE Then WScript.Echo vbTab & "Denied:" End If If objACE.AccessMask AND FILE_ALL_ACCESS Then WScript.Echo vbTab & vbTab & "FILE_ALL_ACCESS " End If If objACE.AccessMask AND FOLDER_ADD_SUBDIRECTORY Then WScript.Echo vbTab & vbTab & " FOLDER_ADD_SUBDIRECTORY " End If If objACE.AccessMask AND FILE_DELETE Then WScript.Echo vbTab & vbTab & "FILE_DELETE " End If If objACE.AccessMask AND FILE_DELETE_CHILD Then WScript.Echo vbTab & vbTab & "FILE_DELETE_CHILD " End If If objACE.AccessMask AND FOLDER_TRAVERSE Then WScript.Echo vbTab & vbTab & " FOLDER_TRAVERSE " End If If objACE.AccessMask AND FILE_READ_ATTRIBUTES Then WScript.Echo vbTab & vbTab & "FILE_READ_ATTRIBUTES " End If If objACE.AccessMask AND FILE_READ_CONTROL Then WScript.Echo vbTab & vbTab & "FILE_READ_CONTROL " End If If objACE.AccessMask AND FOLDER_LIST_DIRECTORY Then WScript.Echo vbTab & vbTab & " FOLDER_LIST_DIRECTORY " End If If objACE.AccessMask AND FILE_READ_EA Then WScript.Echo vbTab & vbTab & "FILE_READ_EA " End If If objACE.AccessMask AND FILE_SYNCHRONIZE Then WScript.Echo vbTab & vbTab & "FILE_SYNCHRONIZE " End If If objACE.AccessMask AND FILE_WRITE_ATTRIBUTES Then WScript.Echo vbTab & vbTab & "FILE_WRITE_ATTRIBUTES " End If If objACE.AccessMask AND FILE_WRITE_DAC Then WScript.Echo vbTab & vbTab & "FILE_WRITE_DAC " End If If objACE.AccessMask AND FOLDER_ADD_FILE Then WScript.Echo vbTab & vbTab & " FOLDER_ADD_FILE " End If If objACE.AccessMask AND FILE_WRITE_EA Then WScript.Echo vbTab & vbTab & "FILE_WRITE_EA " End If If objACE.AccessMask AND FILE_WRITE_OWNER Then WScript.Echo vbTab & vbTab & "FILE_WRITE_OWNER " End If Next Else WScript.Echo "No DACL present in security descriptor" End If '******************************************************************************** next 'clean up set fso = Nothing GetWorkingFolder = foldcount - 1 end function |