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"
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 75580
Url: https://administrator.de/contentid/75580
Ausgedruckt am: 20.11.2024 um 08:11 Uhr