Berechtigungen von Ordner und Unterordnern anzeigen

  • Hiho,

    ich suche folgendes.
    ein programm, in dem ich einen ordner auswähle, und dann von diesem ordner und allen unterordner die berechtigungen in ner txt abspeichert.

    hab versucht ein bestehendes script umzubauen, aber es kommt immer:
    Variable must be of type "Object".:
    ShowSubfolders( $FSO.GetFolder($SearchFolder) )
    ShowSubfolders( $FSO^ ERROR

    also so stelle ich mir das in etwa vor

    Spoiler anzeigen
    [autoit]

    Dim $SearchFolder = FileSelectFolder("Gebe Sie den gewünschten Ordner an, der nach Berechtigungen durchsucht werden soll", "", 2)
    Dim $PathFound
    $FSO = ObjCreate("Scripting.FileSystemObject")
    Showsubfolders( $FSO.GetFolder($SearchFolder) )

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

    Func ShowSubFolders($Folder)
    For $Subfolder in $Folder.SubFolders
    If ($Subfolder.Path & "\") Then
    $PathFound = $Subfolder.Path & "\"
    runwait(@comspec & ' /c cacls "' & $Subfolder.Path & '">>"C:\Documents and Settings\plutod\Desktop.txt"')
    ExitLoop
    EndIf
    ShowSubFolders( $Subfolder )
    Next
    EndFunc

    [/autoit]
  • also AccesEnum läuft bei mir auch, mein script nicht, jedoch bei nem kollegen mit admin-rechten (ich habe ja nur eingeschränkte rechte =/)

    aber schonmal danke fürs testen, ansonsten hät ich echt schön doof aus der wäsche geguckt, fehler zu suchen die net da sind *hehe*

    [autoit]

    Dim $SearchFolder = FileSelectFolder("Gebe Sie den gewünschten Ordner an, der nach Berechtigungen durchsucht werden soll", "", 2)
    Dim $PathFound
    $FSO = ObjCreate("Scripting.FileSystemObject")
    Showsubfolders( $FSO.GetFolder($SearchFolder) )

    Func ShowSubFolders($Folder)
    For $Subfolder in $Folder.SubFolders
    If ($Subfolder.Path & "\") Then
    $PathFound = $Subfolder.Path & "\"
    runwait(@comspec & ' /c cacls "' & $Subfolder.Path & '">>"C:\Documents and Settings\' & @UserName & '\Desktop\UserBerechtigungen.txt"', "", @SW_HIDE)
    EndIf
    ShowSubFolders( $Subfolder )
    Next
    EndFunc
    MsgBox(0, "Fertig", "Userberechtigungen für LW/Ordner: " & $SearchFolder & " wurde auf dem Desktop abgelegt")

    [/autoit]

    sieht jetzt so aus, disco aufm desktop war nervig *g*
    jetzt soll ich aber noch nen bestimmten string in der txt suchen (eine gruppe) und den jeweiligen gefundenen ordner ausgeben
    das wird aber krass, oder?

  • Du kannst die Datei mit Hilfe von StingInStr oder Stringregexp dursuchen. Sollte soooo schwer nicht sein ;)

  • mit schwer meinte ich folgendes prob:

    G:\ DEDOM001\DEDUSL-D3290F:(DENY)(Beschr„nkter Zugriff:)

    WRITE_DAC
    WRITE_OWNER

    DEDOM001\DEDUSL-D3290F:(OI)(CI)F
    DEDOM001\DEDUSL-D3290B:R
    DEDOM001\DEDUSL-D3290C:(OI)(CI)C
    DEDOM001\DEDUSL-D3290R:(OI)(CI)R
    DEDOM001\DEDUSL-DATA-Admins:(OI)(CI)F
    DEDOM001\Domain Admins:(OI)(CI)F

    so sieht ja nachher das ergebnis in der txt aus.
    darin soll ich jetzt z.B. nach "D3290C" suchen, und dann "G:\" ausgeben lassen.
    das wird eher das problem, oder?

  • sieht die Datei wirklich so aus .. oder steht in jeder Zeile der Laufwerksbuchstabe? Wenn ja dann könnstest Du das so machen:

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    Dim $file = @Scriptdir&"\Desktop.txt"
    Dim $aArray

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

    _FileReadToArray ( $file, $aArray )
    for $i = 0 to $aArray[0]
    $currStr = $aArray[$i]
    $strAt = StringInStr($currStr,"D3290C")
    if $strat <> 0 Then
    $aResult = StringRegExp($currStr,"[a-zA-Z]{1}[\:]{1}",1)
    Msgbox(0,"",$aResult[0])
    Endif
    next

    [/autoit]

    ansonsten könnte man in jeder Zeile nach dem Laufwerksbuchstaben gucken und dann bei einem Treffer ausgeben.

    Einmal editiert, zuletzt von jonk (10. Mai 2007 um 14:16)

  • die sieht leider wirklich so aus.

    erst LW oder ordner, dann verweigerte gruppen und darunter die erlaubten gruppen aufgelistet.

    PS: wenn wer noch ne idee hat, kann er es gerne schreiben. hab jetzt folgende lösung.

    alles wie gehabt, nur nachdem die txt auf dem desktop angelegt wurde, lasse ich die cmd mit string nach meinem begriff suchen, und in einer weiteren text-datei ausgeben. davor steht jeweils die zeile in der der wert gefunden wurde.
    ist schonmal ein anfang.

    [autoit]

    MsgBox(0, "", '/c find "' & @DesktopDir & '\UserBerechtigungen.txt">>' & @DesktopDir & '\DEDUSL-KCD_ADSB.txt')
    stop
    Dim $SearchFolder = FileSelectFolder("Gebe Sie den gewünschten Ordner an, der nach Berechtigungen durchsucht werden soll", "", 2)
    Dim $PathFound
    $FSO = ObjCreate("Scripting.FileSystemObject")
    Showsubfolders( $FSO.GetFolder($SearchFolder) )

    Func ShowSubFolders($Folder)
    For $Subfolder in $Folder.SubFolders
    If ($Subfolder.Path & "\") Then
    $PathFound = $Subfolder.Path & "\"
    runwait(@comspec & ' /c cacls "' & $Subfolder.Path & '">>' & @DesktopDir & '\UserBerechtigungen.txt"', "", @SW_HIDE)
    EndIf
    ShowSubFolders( $Subfolder )
    Next
    EndFunc
    RunWait(@comspec & ' /c find "' & @DesktopDir & '\UserBerechtigungen.txt">>"' & @DesktopDir & '\DEDUSL-KCD_ADSB.txt"')
    MsgBox(0, "Fertig", "Userberechtigungen für LW/Ordner: " & $SearchFolder & " wurde auf dem Desktop abgelegt")

    [/autoit]