gelöst Code erklären Ordnerrechte ändern
Hallo ich habe folgendes mit google gefunden und schon ein wenig verändert. ich möchte ein script schreiben was mit ordnerrechte ändert und mit dem ich dann einfach für einen bestimmten ordner die rechte auf einen schlag ändern kann.
mit diesem script ändert man die dateirechte. wie macht man das für ordner?
Wie mache ich es eine Benutzergrupper für den ordner komplett zu entfernen oder den zugriff zu verweigern?
nach welchem system funktioniert "Set ACE3 = CreateACE(wmi, 2032127, 0, SetTrustee(wmi, "Administratoren"))"? was sind das für Zahlen?
Was sind Trustee Objekte?
Was ist da gegenstück zu "Win32_LogicalFileSecuritySetting" damit das mit ordnern funktionier?
mit diesem script ändert man die dateirechte. wie macht man das für ordner?
Wie mache ich es eine Benutzergrupper für den ordner komplett zu entfernen oder den zugriff zu verweigern?
nach welchem system funktioniert "Set ACE3 = CreateACE(wmi, 2032127, 0, SetTrustee(wmi, "Administratoren"))"? was sind das für Zahlen?
Was sind Trustee Objekte?
Was ist da gegenstück zu "Win32_LogicalFileSecuritySetting" damit das mit ordnern funktionier?
01.
zielfile ="c:\TEST\1.txt"
02.
03.
' Zugriff auf WMI
04.
Set wmi = GetObject("winmgmts:")
05.
' "Jeder" soll die Datei nur lesen dürfen, das Löschen wird explizit verboten
06.
' "Administrator" soll alle Rechte erhalten
07.
Set ACE1 = CreateACE(wmi, 1, 0, SetTrustee(wmi, "Benutzer"))
08.
Set ACE2 = CreateACE(wmi, 64, 1, SetTrustee(wmi, "Benutzer"))
09.
Set ACE3 = CreateACE(wmi, 2032127, 0, SetTrustee(wmi, "Administratoren"))
10.
Set ACE4 = CreateACE(wmi, 2032127, 0, SetTrustee(wmi, "test"))
11.
12.
' die beiden ACEs werden in einem Variablenfeld gespeichert
13.
newdacl = Array(ACE1, ACE2, ACE3, ACE4)
14.
15.
' die Datei, die diese Rechte erhalten soll, wird angesprochen
16.
Set fileinstance = GetFile(wmi,zielfile)
17.
18.
' der alte Security Descriptor wird geöffnet
19.
retval = fileinstance.getsecuritydescriptor(sec)
20.
21.
' die neue DACL ersetzt die alte DACL
22.
sec.Properties_.Item("dacl") = newdacl
23.
24.
' der geänderte Security Descriptor wird in die Datei zurückgeschrieben
25.
retval = fileinstance.setsecuritydescriptor(sec)
26.
27.
28.
29.
Function GetFile(wmi, filename)
30.
' öffnet eine Datei
31.
Set GetFile = wmi.Get("Win32_LogicalFileSecuritySetting='" & filename & "'")
32.
End Function
33.
34.
35.
Function CreateACE(wmi, AccessMask, AceType, objTrustee)
36.
' legt einen ACE an
37.
Set objAce = wmi.Get("Win32_Ace").SpawnInstance_
38.
objAce.Properties_.Item("AccessMask") = AccessMask
39.
objAce.Properties_.Item("AceFlags") = 3
40.
objAce.Properties_.Item("AceType") = AceType
41.
objAce.Properties_.Item("Trustee") = objTrustee
42.
Set CreateACE = objAce
43.
End Function
44.
45.
46.
Function SetTrustee(wmi, account)
47.
If Left(account,2) = "\\" Then
48.
konto = Mid(account, 3)
49.
Else
50.
konto = account
51.
End If
52.
infos = Split(konto, "\")
53.
If UBound(infos) = 0 Then
54.
'SYS: Windows Script Host Runtime Library
55.
Set wshnet = CreateObject("WScript.Network")
56.
UserName = infos(0)
57.
ComputerName = wshnet.ComputerName
58.
Else
59.
UserName = infos(1)
60.
ComputerName = infos(0)
61.
End If
62.
63.
64.
' legt ein Win32_Trustee-Objekt an
65.
Set objTrustee = wmi.Get("Win32_Trustee").SpawnInstance_
66.
objTrustee.Domain = ComputerName
67.
objTrustee.Name = UserName
68.
69.
objTrustee.Properties_.Item("SID") = GetBinarySID(ComputerName, UserName)
70.
Set SetTrustee = objTrustee
71.
End Function
72.
73.
74.
Function GetBinarySID(ComputerName, UserName)
75.
' ** ermittelt binäre SID eines Benutzerkontos
76.
On Error Resume Next
77.
Set wmi = GetObject("winmgmts:\\" & ComputerName)
78.
If Err.number<>0 Then
79.
MsgBox "Konnte \\" & ComputerName & " nicht erreichen!"
80.
WScript.Quit
81.
End If
82.
On Error Goto 0
83.
84.
wql = "select * from win32_account where name='" & UserName & "'"
85.
Set result = wmi.ExecQuery(wql)
86.
counter = 0
87.
For each entry in result
88.
counter = counter + 1
89.
sid = entry.SID
90.
Next
91.
92.
93.
Set obj = wmi.Get("Win32_SID.SID=""" & sid & """")
94.
GetBinarySID = obj.Properties_.Item("BinaryRepresentation").Value
95.
End Function
2 Antworten
- LÖSUNG 53111 schreibt am 17.09.2007 um 11:59:06 Uhr
- LÖSUNG sisa2002 schreibt am 07.12.2007 um 07:14:37 Uhr
LÖSUNG 17.09.2007 um 11:59 Uhr
ich bin jetzt bei folgendem stand: schön wäre wenn man noch mit checkboxen/radiobuttons auswählen kann welche der ordner bearbeitet werden sollen. dann müsste man das script für mehrer nutzeränderungen nur einmal ausführen und könnte mehrer nutzer auf einmal bearbeiten. hat jemand eine idee wie man das machen könnte?
01.
DIM ordnerarray
02.
DIM FSO ' Variable für den Zugriff auf das File System Object
03.
DIM objOrdner ' Variable für den Ordner, in dem die Unterordner entstehen
04.
DIM objUnterordner ' Variable für die Unterordner
05.
DIM Ordner ' Variabel für den Ordner, in dem die Unterordner entstehen
06.
07.
ordnerarray = Array(100)
08.
09.
10.
Ordner = "H:\"
11.
12.
Set FSO = CreateObject("Scripting.FileSystemObject")
13.
14.
Set objOrdner = FSO.GetFolder(Ordner)
15.
16.
17.
For Each objUnterordner in objOrdner.SubFolders
18.
19.
20.
x = x & objUnterordner.Name & chr(13)
21.
22.
Next
23.
24.
25.
26.
OrdnerUndNutzer =InputBox("Ordner und Dateien in H:\" & chr(13) & chr(13) & x & chr(13) &_
27.
"Bitte hier den Ordnernamen eingeben. (Ordnername entspricht dem Benutzernamen des Nutzers mit Vollzugriff)",,"Ordnername")
28.
zielfile = "H:\" & OrdnerUndNutzer
29.
30.
' Zugriff auf WMI
31.
Set wmi = GetObject("winmgmts:")
32.
' "Jeder" soll die Datei nur lesen dürfen, das Löschen wird explizit verboten
33.
' "Administrator" soll alle Rechte erhalten
34.
35.
Set ACE1 = CreateACE(wmi, 2032127, 0, SetTrustee(wmi, "Administratoren"))
36.
Set ACE2 = CreateACE(wmi, 2032127, 0, SetTrustee(wmi, OrdnerUndNutzer))
37.
38.
39.
newdacl = Array(ACE1, ACE2)
40.
41.
42.
43.
44.
45.
' die Datei, die diese Rechte erhalten soll, wird angesprochen
46.
Set fileinstance = GetFile(wmi,zielfile)
47.
48.
' der alte Security Descriptor wird geöffnet
49.
retval = fileinstance.getsecuritydescriptor(sec)
50.
51.
' die neue DACL ersetzt die alte DACL
52.
sec.Properties_.Item("dacl") = newdacl
53.
54.
' der geänderte Security Descriptor wird in die Datei zurückgeschrieben
55.
retval = fileinstance.setsecuritydescriptor(sec)
56.
57.
' erledigt
58.
If retval = 0 Then
59.
MsgBox "Neue Zugriffsrechte eingetragen"
60.
Else
61.
MsgBox "Konnte Zugriffsrechte nicht speichern." & vbCrLf _
62.
& "Möglicherweise fehlen Ihnen die Berechtigungen, oder die Datei existiert nicht."
63.
End If
64.
65.
Function GetFile(wmi, filename)
66.
' öffnet eine Datei
67.
Set GetFile = wmi.Get("Win32_LogicalFileSecuritySetting='" & filename & "'")
68.
End Function
69.
70.
Function CreateACE(wmi, AccessMask, AceType, objTrustee)
71.
' legt einen ACE an
72.
Set objAce = wmi.Get("Win32_Ace").SpawnInstance_
73.
objAce.Properties_.Item("AccessMask") = AccessMask
74.
objAce.Properties_.Item("AceFlags") = 3
75.
objAce.Properties_.Item("AceType") = AceType
76.
objAce.Properties_.Item("Trustee") = objTrustee
77.
Set CreateACE = objAce
78.
End Function
79.
80.
Function SetTrustee(wmi, account)
81.
If Left(account,2) = "\\" Then
82.
konto = Mid(account, 3)
83.
Else
84.
konto = account
85.
End If
86.
infos = Split(konto, "\")
87.
If UBound(infos) = 0 Then
88.
'SYS: Windows Script Host Runtime Library
89.
Set wshnet = CreateObject("WScript.Network")
90.
UserName = infos(0)
91.
ComputerName = wshnet.ComputerName
92.
Else
93.
UserName = infos(1)
94.
ComputerName = infos(0)
95.
End If
96.
97.
' legt ein Win32_Trustee-Objekt an
98.
Set objTrustee = wmi.Get("Win32_Trustee").SpawnInstance_
99.
objTrustee.Domain = ComputerName
100.
objTrustee.Name = UserName
101.
102.
objTrustee.Properties_.Item("SID") = GetBinarySID(ComputerName, UserName)
103.
Set SetTrustee = objTrustee
104.
End Function
105.
106.
Function GetBinarySID(ComputerName, UserName)
107.
' ** ermittelt binäre SID eines Benutzerkontos
108.
On Error Resume Next
109.
Set wmi = GetObject("winmgmts:\\" & ComputerName)
110.
If Err.number<>0 Then
111.
MsgBox "Konnte \\" & ComputerName & " nicht erreichen!"
112.
WScript.Quit
113.
End If
114.
On Error Goto 0
115.
116.
wql = "select * from win32_account where name='" & UserName & "'"
117.
Set result = wmi.ExecQuery(wql)
118.
counter = 0
119.
For each entry in result
120.
counter = counter + 1
121.
sid = entry.SID
122.
Next
123.
If counter = 0 Then
124.
MsgBox "Konnte \\" & ComputerName & "\" & UserName & " nicht erreichen!"
125.
WScript.Quit
126.
ElseIf counter>1 Then
127.
MsgBox "Zweideutiger Kontoname."
128.
WScript.Quit
129.
End If
130.
131.
Set obj = wmi.Get("Win32_SID.SID=""" & sid & """")
132.
GetBinarySID = obj.Properties_.Item("BinaryRepresentation").Value
133.
End Function
LÖSUNG 07.12.2007 um 07:14 Uhr
Hallo,
ich habe den oben geposteten Quellcode zum ändern der Dateirechte genutzt. Jetzt habe ich noch das Problem das dies nach dem ändern der Rechte nicht über die Dateieigenschaften / Sicherheitseinstellungen sichtbar ist !
Hat jemand eine Idee woran das liegen könnte ?
Danke !
ich habe den oben geposteten Quellcode zum ändern der Dateirechte genutzt. Jetzt habe ich noch das Problem das dies nach dem ändern der Rechte nicht über die Dateieigenschaften / Sicherheitseinstellungen sichtbar ist !
Hat jemand eine Idee woran das liegen könnte ?
Danke !
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte