www.IT-Visions.de-Diskussionsforen (Version 2.1)
(Diese Seite wurde noch nicht auf das neue Layout umgestellt!)


Diese Foren stehen den Lesern unserer Bücher und allen anderen registrieren Benutzern dieser Website zur Verfügung. Wir würden uns freuen, wenn viele Nutzer dieser Website hier nicht nur Fragen stellen, sondern auch die Fragen anderer Nutzer beantworten. Diese Foren sind ein ehrenamtlicher, nicht-kommerzieller, unmoderierter Community-Dienst von www.IT-Visions.de. Wenn Sie kommerzielle Unterstützung für .NET/Scripting/PowerShell suchen, schauen Sie bitte auf unser Support-Angebot und unsere Schulungsangebote für Scripting und Schulungsangebote für .NET.



Besitzer eines Verzeichnises für User setzen (WMI)
Autor:  FrankGabriel
E-mail:  Antworten bitte nur in das Forum!
Datum:  01.07.2005 09:07:46
Subject:  Besitzer eines Verzeichnises für User setzen (WMI)
Bezug zum Buch:  Windows Scripting 4. Auflage
Message:  Hallo,

ich habe eine script für das Setzen des Besitzers eines Verzeichnisses geschrieben. Es funktioniert, wenn ich mich als Admin einsetze, setze ich ein normalen User ein, dann leider nicht.
Es läuft auf einem 2003-Server unter meinem Domain-Admin-Konto.
Auf dem Verzeichnis habe ich als Admin volle Rechte.

Hier der Code:

Set WshNetWork    = CreateObject("WScript.Network")
Set objFileSystem = CreateObject("Scripting.FileSystemObject")

strDomain     = wshNetWork.UserDomain
strUserSAMName = "gbr"
strAdminName = wshNetWork.UserName
Server     = "SWP-FS1"
ServerPfad = "D:\HOME\gbr"
'Server     = "."
'ServerPfad = "C:\TEST"

Dim objSD


SetzeNTFSBesitzer Server, ServerPfad, strDomain, strUserSAMName



Sub SetzeNTFSBesitzer(Rechner, LokalerPfad, DomainName, ObjektName)


Set objWMI      = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & Rechner)
Set objSecurity = objWMI.Get("Win32_LogicalFileSecuritySetting.Path='" & LokalerPfad & "'")

If objSecurity.GetSecurityDescriptor(objSD) = 0 Then
Set objOwner = objSD.Owner
Wscript.Echo objSecurity.Path & " is owned by " & objOwner.Name
End If


'------------------------ Erstelle trustee ANFANG
Set objSec = GetObject("winmgmts:\\.\root\cimv2")

'collection von Usern. Diese sollte nur 1 haben!!
Set colUsers = objSec.ExecQuery("SELECT * FROM WIN32_ACCOUNT WHERE Domain = '" & _
                                 DomainName & "' AND Name = '" & ObjektName & "'")

For Each UserName in colUsers
Set objName = UserName
Next

' Für die Erstellung eines Trustees zwecks Rechtevergabe wird die SID in binaerer
' und String Form gebraucht.objName.SID gibt nur die string version.
Set objSID = objSec.Get("Win32_SID.SID='" & objName.SID & "'")

'Neues Leeres Win32_Trustee object erzeugen
Set objTrusteeClass = objSec.Get("Win32_Trustee")
Set objTrustee      = objTrusteeClass.SpawnInstance_()

'Eigenschaften fuer trustee definieren.
objTrustee.Domain    = objSID.ReferencedDomainName

objTrustee.Name      = objSID.AccountName
objTrustee.SID       = objSID.BinaryRepresentation
objTrustee.SidLength = objSID.SidLength
objTrustee.SIDString = objSID.SID

Wscript.Echo objTrustee.Name
'------------------------ Erstelle trustee ENDE

objSD.Owner = objTrustee


tt = objSecurity.SetSecurityDescriptor(objSD,1)

If objSecurity.GetSecurityDescriptor(objSD) = 0 Then
Set objOwner = objSD.Owner
Wscript.Echo objSecurity.Path & " is owned by " & objOwner.Name
End If

End Sub

Bei dem Test lokal auf meinen Rechner mit normalen Konto setzt er auch mich als Besitzer ein. Bin lokal auch admin.

Was mache ich falsch. Wäre dankbar für ein Tipp.

Gruß
Frank

Antworten

  Zurück zum Forum



 Klassische Programmierung (Scripting, COM) -- Windows Scripting, VBScript, VB6, u.a.
 Besitzer eines Verzeichnises für User setzen (WMI) von FrankGabriel  am 1.7.2005 9:07:46 AM


www.IT-Visions.de - Dr. Holger Schwichtenberg / 1998-2019