sisa2002
Goto Top

Rechte per script ändern

Hallo,

ich habe mit unten angegebenem Code die Rechte einer Datei per script geändert. Das funktioniert auch soweit. Leider werden nachdem ich das Script habe laufen lassen die geänderten Rechte nicht unter den Dateieigenschaften/Sicherheitseinstellungen angezeigt. Wenn ich aber ein Script zum auslesen der Dateirechte benutzte, wird bestätigt das die Rechte geändert wurden.

Hat jemand eine Idee was ich falsch gemacht habe, oder was ich tun muss das die geänderten Rechte angezeigt werden ?

Danke !


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: 75580

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

Ausgedruckt am: 28.03.2024 um 13:03 Uhr