Besitzer festellen - Ordner Problem

  • Hallo Gemeinde,

    ich habe ein Problem mit dem folgenden Codeschnipsel... das Progrämmchen soll anhand eines Pfades und einen Folders den Besitzer einer jeden Datei UND auch eines jeden ORDNERS feststellen und jenachdem wer Besitzer ist dafür eine Text-Datei anlegen. Das "StringTrimleft" benötige ich da ein Laufwerk auf einem Fileserver abgefragt wird und dann der Domänenname vorne an steht und ich diesen erstmal "rausfiltern" muss bzw. möchte... Das Problem liegt jetzt darin, dass der Besitzer eines Ordners offenbar nicht ausgelesen wird, dafür dann eine .txt angelegt wird ohne den Usernamen...

    Vielleicht bin ich einfach zu blöd dazu, aber es könnte auch sein, dass die Funktion Besitzer des Ordners nicht unterstützt wird(?), denn Besitzer einer Datei funktioniert einwandfrei!

    Spoiler anzeigen
    [autoit]


    #Include <File.au3>
    #Include <Array.au3>
    #include <_GetFilesFolder_Rekursiv.au3>
    hotKeySet("{ESC}", "Terminate")

    [/autoit] [autoit][/autoit] [autoit]

    $pfad = "C:\"
    $folder = "Programme"

    [/autoit] [autoit][/autoit] [autoit]

    $test = _GetFilesFolder_Rekursiv($pfad & $folder, '*', "-1")
    Consolewrite("Array wurde eingelesen, fahre jetzt mit dem Bestimmen des Besitzers fort..." & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    $FileList = _FileListToArray($Pfad, '*.*', 0)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 to $test[0]
    $FileList2 = _FileListToArray($Pfad & "\" & $FileList[$i], '*.*', 0)

    [/autoit] [autoit][/autoit] [autoit]

    If FileExists(StringTrimleft(_GetExtProperty($test[$i], 8),10) & ".txt") Then
    FileWrite(StringTrimleft(_GetExtProperty($test[$i], 8),10) & ".txt", $test[$i] & @CRLF)
    Else
    $file = FileOpen(@SCRIPTDIR & "\" & StringTrimleft(_GetExtProperty($test[$i], 8),10) & ".txt", 1)
    FileWrite(StringTrimleft(_GetExtProperty($test[$i], 8),10) & ".txt", $test[$i] & @CRLF)
    FileClose($file)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func Terminate()
    Exit 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;~ ===============================================================================
    ; Function Name: GetExtProperty($sPath,$iProp)
    ; Description: Returns an extended property of a given file.
    ; Parameter(s): $sPath - The path to the file you are attempting to retrieve an extended property from.
    ; $iProp - The numerical value for the property you want returned. If $iProp is is set
    ; to -1 then all properties will be returned in a 1 dimensional array in their corresponding order.
    ; The properties are as follows:
    ; Name = 0
    ; Size = 1
    ; Type = 2
    ; DateModified = 3
    ; DateCreated = 4
    ; DateAccessed = 5
    ; Attributes = 6
    ; Status = 7
    ; Owner = 8
    ; Author = 9
    ; Title = 10
    ; Subject = 11
    ; Category = 12
    ; Pages = 13
    ; Comments = 14
    ; Copyright = 15
    ; Artist = 16
    ; AlbumTitle = 17
    ; Year = 18
    ; TrackNumber = 19
    ; Genre = 20
    ; Duration = 21
    ; BitRate = 22
    ; Protected = 23
    ; CameraModel = 24
    ; DatePictureTaken = 25
    ; Dimensions = 26
    ; Width = 27
    ; Height = 28
    ; Company = 30
    ; Description = 31
    ; FileVersion = 32
    ; ProductName = 33
    ; ProductVersion = 34
    ; Requirement(s): File specified in $spath must exist.
    ; Return Value(s): On Success - The extended file property, or if $iProp = -1 then an array with all properties
    ; On Failure - 0, @Error - 1 (If file does not exist)
    ; Author(s): Simucal ([email='Simucal@gmail.com'][/email])
    ; Note(s):
    ;
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetExtProperty($sPath, $iProp)
    Local $iExist, $sFile, $sDir, $oShellApp, $oDir, $oFile, $aProperty, $sProperty
    $iExist = FileExists($sPath)
    If $iExist = 0 Then
    SetError(1)
    Return 0
    Else
    $sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1))
    $sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1)))
    $oShellApp = ObjCreate ("shell.application")
    $oDir = $oShellApp.NameSpace ($sDir)
    $oFile = $oDir.Parsename ($sFile)
    If $iProp = -1 Then
    Local $aProperty[35]
    For $i = 0 To 34
    $aProperty[$i] = $oDir.GetDetailsOf ($oFile, $i)
    Next
    Return $aProperty
    Else
    $sProperty = $oDir.GetDetailsOf ($oFile, $iProp)
    If $sProperty = "" Then
    Return 0
    Else
    Return $sProperty
    EndIf
    EndIf
    EndIf
    EndFunc ;==>_Get

    [/autoit]

    Einmal editiert, zuletzt von Volumeman (21. August 2013 um 20:34)

  • Hmmm das ist natürlich doof... also kann ich die Geschichte in die Tonne kloppen bis sich jemand findet, der mehr Ahnung hat wie ich und das hinbekommt...

    Danke für deine Antwort (übrigens wieder mal der einzige)

  • Google Suche "autoit owner folder"... erster Treffer:

    [autoit]


    Dim $objSD
    $varFolderName = "C:\Users"
    $oWMIService = ObjGet("winmgmts:")
    $oFolderSecuritySettings = $oWMIService.Get("Win32_LogicalFileSecuritySetting='" & $varFolderName & "'")
    $intRetVal = $oFolderSecuritySettings.GetSecurityDescriptor($objSD)
    If $intRetVal = 0 Then
    MsgBox (0, "", "Owner: " & $objSD.Owner.Domain & "\" & $objSD.Owner.Name)
    Else
    MsgBox (0, "", "Couldn't retrieve security descriptor.")
    EndIf

    [/autoit]

    Edit:

    Funktioniert im Übrigen auch mit Dateien und nicht nur mit Ordnern. ;)