53111
Goto Top

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?

zielfile ="c:\TEST\1.txt"  

' Zugriff auf WMI  
Set wmi = GetObject("winmgmts:")  
' "Jeder" soll die Datei nur lesen dürfen, das Löschen wird explizit verboten  
' "Administrator" soll alle Rechte erhalten  
Set ACE1 = CreateACE(wmi, 1, 0, SetTrustee(wmi, "Benutzer"))  
Set ACE2 = CreateACE(wmi, 64, 1, SetTrustee(wmi, "Benutzer"))  
Set ACE3 = CreateACE(wmi, 2032127, 0, SetTrustee(wmi, "Administratoren"))  
Set ACE4 = CreateACE(wmi, 2032127, 0, SetTrustee(wmi, "test"))  

' die beiden ACEs werden in einem Variablenfeld gespeichert  
newdacl = Array(ACE1, ACE2, ACE3, ACE4)

' die Datei, die diese Rechte erhalten soll, wird angesprochen  
Set fileinstance = GetFile(wmi,zielfile)

' der alte Security Descriptor wird geöffnet  
retval = fileinstance.getsecuritydescriptor(sec)

' die neue DACL ersetzt die alte DACL  
sec.Properties_.Item("dacl") = newdacl  

' der geänderte Security Descriptor wird in die Datei zurückgeschrieben  
retval = fileinstance.setsecuritydescriptor(sec)



Function GetFile(wmi, filename)
' öffnet eine Datei  
Set GetFile = wmi.Get("Win32_LogicalFileSecuritySetting='" & filename & "'")  
End Function


Function CreateACE(wmi, AccessMask, AceType, objTrustee)
' legt einen ACE an  
Set objAce = wmi.Get("Win32_Ace").SpawnInstance_  
objAce.Properties_.Item("AccessMask") = AccessMask  
objAce.Properties_.Item("AceFlags") = 3  
objAce.Properties_.Item("AceType") = AceType  
objAce.Properties_.Item("Trustee") = objTrustee  
Set CreateACE = objAce
End Function


Function SetTrustee(wmi, account)
If Left(account,2) = "\\" Then  
konto = Mid(account, 3)
Else
konto = account
End If
infos = Split(konto, "\")  
If UBound(infos) = 0 Then
'SYS: Windows Script Host Runtime Library  
Set wshnet = CreateObject("WScript.Network")  
UserName = infos(0)
ComputerName = wshnet.ComputerName
Else
UserName = infos(1)
ComputerName = infos(0)
End If


' legt ein Win32_Trustee-Objekt an  
Set objTrustee = wmi.Get("Win32_Trustee").SpawnInstance_  
objTrustee.Domain = ComputerName
objTrustee.Name = UserName

objTrustee.Properties_.Item("SID") = GetBinarySID(ComputerName, UserName)  
Set SetTrustee = objTrustee
End Function


Function GetBinarySID(ComputerName, UserName)
' ** ermittelt binäre SID eines Benutzerkontos  
On Error Resume Next
Set wmi = GetObject("winmgmts:\\" & ComputerName)  
If Err.number<>0 Then
MsgBox "Konnte \\" & ComputerName & " nicht erreichen!"  
WScript.Quit
End If
On Error Goto 0

wql = "select * from win32_account where name='" & UserName & "'"  
Set result = wmi.ExecQuery(wql)
counter = 0
For each entry in result
counter = counter + 1
sid = entry.SID
Next


Set obj = wmi.Get("Win32_SID.SID=""" & sid & """")  
GetBinarySID = obj.Properties_.Item("BinaryRepresentation").Value  
End Function

Content-Key: 68649

Url: https://administrator.de/contentid/68649

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: 53111
53111 17.09.2007 um 11:59:06 Uhr
Goto Top
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?


DIM ordnerarray
DIM FSO        ' Variable für den Zugriff auf das File System Object  
DIM objOrdner    ' Variable für den Ordner, in dem die Unterordner entstehen  
DIM objUnterordner ' Variable für die Unterordner  
DIM Ordner     ' Variabel für den Ordner, in dem die Unterordner entstehen  

ordnerarray = Array(100)


Ordner = "H:\"  

Set FSO = CreateObject("Scripting.FileSystemObject")  

Set objOrdner = FSO.GetFolder(Ordner)


   For Each objUnterordner in objOrdner.SubFolders
    

     x = x & objUnterordner.Name & chr(13)   
  
    Next
    
     

OrdnerUndNutzer =InputBox("Ordner und Dateien in H:\" & chr(13) & chr(13) & x & chr(13) &_  
"Bitte hier den Ordnernamen eingeben. (Ordnername entspricht dem Benutzernamen des Nutzers mit Vollzugriff)",,"Ordnername")  
zielfile = "H:\" & OrdnerUndNutzer  

' Zugriff auf WMI  
Set wmi = GetObject("winmgmts:")  
' "Jeder" soll die Datei nur lesen dürfen, das Löschen wird explizit verboten  
' "Administrator" soll alle Rechte erhalten  

 Set ACE1 = CreateACE(wmi, 2032127, 0, SetTrustee(wmi, "Administratoren"))  
              Set ACE2 = CreateACE(wmi, 2032127, 0, SetTrustee(wmi, OrdnerUndNutzer))
              
              
              newdacl = Array(ACE1, ACE2)





' die Datei, die diese Rechte erhalten soll, wird angesprochen  
Set fileinstance = GetFile(wmi,zielfile)

' der alte Security Descriptor wird geöffnet  
retval = fileinstance.getsecuritydescriptor(sec)

' die neue DACL ersetzt die alte DACL  
sec.Properties_.Item("dacl") = newdacl  

' der geänderte Security Descriptor wird in die Datei zurückgeschrieben  
retval = fileinstance.setsecuritydescriptor(sec)

' erledigt  
If retval = 0 Then
MsgBox "Neue Zugriffsrechte eingetragen"  
Else
MsgBox "Konnte Zugriffsrechte nicht speichern." & vbCrLf _  
& "Möglicherweise fehlen Ihnen die Berechtigungen, oder die Datei existiert nicht."  
End If

Function GetFile(wmi, filename)
' öffnet eine Datei  
Set GetFile = wmi.Get("Win32_LogicalFileSecuritySetting='" & filename & "'")  
End Function

Function CreateACE(wmi, AccessMask, AceType, objTrustee)
' legt einen ACE an  
Set objAce = wmi.Get("Win32_Ace").SpawnInstance_  
objAce.Properties_.Item("AccessMask") = AccessMask  
objAce.Properties_.Item("AceFlags") = 3  
objAce.Properties_.Item("AceType") = AceType  
objAce.Properties_.Item("Trustee") = objTrustee  
Set CreateACE = objAce
End Function

Function SetTrustee(wmi, account)
If Left(account,2) = "\\" Then  
konto = Mid(account, 3)
Else
konto = account
End If
infos = Split(konto, "\")  
If UBound(infos) = 0 Then
'SYS: Windows Script Host Runtime Library  
Set wshnet = CreateObject("WScript.Network")  
UserName = infos(0)
ComputerName = wshnet.ComputerName
Else
UserName = infos(1)
ComputerName = infos(0)
End If

' legt ein Win32_Trustee-Objekt an  
Set objTrustee = wmi.Get("Win32_Trustee").SpawnInstance_  
objTrustee.Domain = ComputerName
objTrustee.Name = UserName

objTrustee.Properties_.Item("SID") = GetBinarySID(ComputerName, UserName)  
Set SetTrustee = objTrustee
End Function

Function GetBinarySID(ComputerName, UserName)
' ** ermittelt binäre SID eines Benutzerkontos  
On Error Resume Next
Set wmi = GetObject("winmgmts:\\" & ComputerName)  
If Err.number<>0 Then
MsgBox "Konnte \\" & ComputerName & " nicht erreichen!"  
WScript.Quit
End If
On Error Goto 0

wql = "select * from win32_account where name='" & UserName & "'"  
Set result = wmi.ExecQuery(wql)
counter = 0
For each entry in result
counter = counter + 1
sid = entry.SID
Next
If counter = 0 Then
MsgBox "Konnte \\" & ComputerName & "\" & UserName & " nicht erreichen!"  
WScript.Quit
ElseIf counter>1 Then
MsgBox "Zweideutiger Kontoname."  
WScript.Quit
End If

Set obj = wmi.Get("Win32_SID.SID=""" & sid & """")  
GetBinarySID = obj.Properties_.Item("BinaryRepresentation").Value  
End Function
Mitglied: sisa2002
sisa2002 07.12.2007 um 07:14:37 Uhr
Goto Top
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 !