Hallo ich habe ein riesenproblem mit WMI Abfragen.
Ich möchte die eigenschaften von Files und Directorys abfragen, das ergebniss soll in etwa so sein als wenn ich unter Windows ein File selektiere und unter Eigenschaft den
Reiter Sicherheit anklicke. Unter Gruppen und Benutzernamen bekomme ich alle User und Gruppen die einer Datei oder einem Directory zugewiesen sind incl. die Rechte.
So etwas brauche ich. Den Eigentümer bekomme ich auch mittels WMI-Abfrage raus, allerdings nicht die anderen Parameter und auch nicht alle Benutzer.
Irgendwie mache ich was falsch nur weiss ich nicht was.
Die Function ReadFileOwner_Single geht wie vorgesehen
Die Function ReadFileOwner_Alles gibt mir nur einen leeren String zurück aber es kommt keine Fehlermeldung
Währe schön wenn einer ein Tipp hätte Irgenwie habe ich den durchblick verloren
;Autoitscript
$wbemFlagReturnImmediately = 0x10
Local $File_Pfad = @WindowsDir & "\hh.exe" ; Nur zum Test, nur Lesezugriff
; impersonationLevel = impersonate ist bevorzugte Standardvorgabe MS
Local $Obj_WMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & @ComputerName & "\root\cimv2")
ReadFileOwner_Single ($File_Pfad) ; TEST ein Wert auslesen
ReadFileOwner_Alles ($File_Pfad) ; TEST alles auslesen was das Objekt hergibt
Func ReadFileOwner_Single ($Obj_CheckFile)
Dim $Obj_Owner
$Obj_Owner_of_File = $Obj_WMIService.Get("Win32_LogicalFileSecuritySetting='" & $Obj_CheckFile & "'")
$intRetVal = $Obj_Owner_of_File.GetSecurityDescriptor($Obj_Owner)
If (IsObj($Obj_WMIService)) And (Not @error) Then ; Ist das Objekt $Obj_WMIService ein bekannetes Objekt
MsgBox (0, "ReadFileOwner", "Owner: " & $Obj_Owner.Owner.Domain & "\" & $Obj_Owner.Owner.Name)
Else
Msgbox(0,"WMI Output","Keine WMI Objects gefunden: " & "Win32_LogicalFileSecuritySetting" )
Endif
EndFunc
Func ReadFileOwner_Alles ($Obj_CheckFile)
Local $a_Text = ""
Local $Obj_Properties = ""
Dim $Obj_SecureRead
$Obj_Owner_of_File = $Obj_WMIService.Get("Win32_LogicalFileSecuritySetting='" & $Obj_CheckFile & "'")
$intRetVal = $Obj_Owner_of_File.GetSecurityDescriptor($Obj_SecureRead)
If (IsObj($Obj_WMIService)) And (Not @error) Then ; Ist das Objekt $Obj_WMIService ein bekannetes Objekt
ConsoleWrite ("Func ReadFileOwner_Alles nach IsObj Abfrage ")
For $Obj_Properties In $Obj_SecureRead
$a_Text = 'Description: ' & $Obj_Properties.Description & @CRLF
$a_Text = $a_Text & 'Caption: ' & $Obj_Properties.Caption & @CRLF
$a_Text = $a_Text & 'OwnerPermissions: ' & $Obj_Properties.OwnerPermissions & @CRLF
$a_Text = $a_Text &'ControlFlags ' & $Obj_Properties.ControlFlags & @CRLF
$a_Text = $a_Text & 'Path: ' & $Obj_Properties.Path & @CRLF
$a_Text = $a_Text &'SettingID: ' & $Obj_Properties.SettingID & @CRLF
Next
MsgBox (0,"TEST Komplett", $a_Text)
EndIf
EndFunc