1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Mahagon

Beiträge von Mahagon

  • Domänen-Benutzer auflisten AD.au3

    • Mahagon
    • 18. Februar 2011 um 09:43

    Das mit den Benutzern ist echt nett gemacht :)
    Da mach ich doch glatt Gebrauch von

    Danke ;)

  • Domänen-Benutzer auflisten AD.au3

    • Mahagon
    • 17. Februar 2011 um 16:59

    Ah okay...Danke ^^
    Naja kurz und Bündig: ich will Berechtigungen inkl Benutzer auflisten :)

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #include <File.au3>
    #include <AD.au3>
    #include <GUIConstants.au3>
    Local _
    $FILE_READ_DATA__FILE_LIST_DIRECTORY = 1, _;Grants the right to read data from the file. For a directory, this value grants the right to list the contents of the directory.
    $FILE_WRITE_DATA__FILE_ADD_FILE = 2, _;Grants the right to write data to the file. For a directory, this value grants the right to create a file in the directory.
    $FILE_APPEND_DATA__FILE_ADD_SUBDIRECTORY = 4, _;Grants the right to append data to the file. For a directory, this value grants the right to create a subdirectory.
    $FILE_READ_EA = 8, _;Grants the right to read extended attributes.
    $FILE_WRITE_EA = 16, _;Grants the right to write extended attributes.
    $FILE_EXECUTE__FILE_TRAVERSE = 32, _;Grants the right to execute a file. For a directory, the directory can be traversed.
    $FILE_DELETE_CHILD = 64, _;Grants the right to delete a directory and all the files it contains (its children), even if the files are read-only.
    $FILE_READ_ATTRIBUTES = 128, _;Grants the right to read file attributes.
    $FILE_WRITE_ATTRIBUTES = 256, _;Grants the right to change file attributes.
    $DELETE = 65536, _;Grants delete access.
    $READ_CONTROL = 131072, _;Grants read access to the security descriptor and owner.
    $WRITE_DAC = 262144, _;Grants write access to the discretionary access control list (ACL).
    $WRITE_OWNER = 524288, _;Assigns the write owner.
    $SYNCHRONIZE = 1048576, _;Synchronizes access and allows a process to wait for an object to enter the signaled state.
    $OBJECT_INHERIT_ACE = 1, _;Noncontainer child objects inherit the ACE as an effective ACE. For child objects that are containers, the ACE is inherited as an inherit-only ACE unless the NO_PROPAGATE_INHERIT_ACE bit flag is also set.
    $CONTAINER_INHERIT_ACE = 2, _ ; Child objects that are containers, such as directories, inherit the ACE as an effective ACE. The inherited ACE is inheritable unless the NO_PROPAGATE_INHERIT_ACE bit flag is also set.
    $NO_PROPAGATE_INHERIT_ACE = 4, _ ;If the ACE is inherited by a child object, the system clears the OBJECT_INHERIT_ACE and CONTAINER_INHERIT_ACE flags in the inherited ACE. This prevents the ACE from being inherited by subsequent generations of objects.
    $INHERIT_ONLY_ACE = 8, _ ;Indicates an inherit-only ACE which does not control access to the object to which it is attached. If this flag is not set, the ACE is an effective ACE which controls access to the object to which it is attached. Both effective and inherit-only ACEs can be inherited depending on the state of the other inheritance flags.
    $INHERITED_ACE = 16, _ ;The system sets this bit when it propagates an inherited ACE to a child object.
    $wbemFlagReturnImmediately = 0x10, _
    $wbemFlagForwardOnly = 0x20, _
    $colItems = "", _
    $strComputer = "localhost", _
    $objSD, _
    $Output = "", _
    $objDaclAccessmask
    Local $aRights2dArray[1][21]
    Local $aRightFlags[14] = [$FILE_READ_DATA__FILE_LIST_DIRECTORY, $FILE_WRITE_DATA__FILE_ADD_FILE, $FILE_APPEND_DATA__FILE_ADD_SUBDIRECTORY, $FILE_READ_EA, $FILE_WRITE_EA, $FILE_EXECUTE__FILE_TRAVERSE, $FILE_DELETE_CHILD, $FILE_READ_ATTRIBUTES, $FILE_WRITE_ATTRIBUTES, $DELETE, $READ_CONTROL, $WRITE_DAC, $WRITE_OWNER, $SYNCHRONIZE]
    Local $aAceflags[5] = [$OBJECT_INHERIT_ACE, $CONTAINER_INHERIT_ACE, $NO_PROPAGATE_INHERIT_ACE, $INHERIT_ONLY_ACE, $INHERITED_ACE]
    Local $sRootFolder = FileSelectFolder("Verzeichnis zum auslesen der Berechtigungen auswählen", "",2,"C:")
    Local $pathall
    Local $sProtokoll = @ScriptDir & "\" & StringReplace(StringReplace($sRootFolder, "\", "_"), ":", "-") & " Berechtigungen " & @YDAY & @MON & @MDAY & @HOUR & @MIN & @SEC & ".log"

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

    Local Const $PBS_MARQUEE = 0x08

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

    $hGui = GUICreate("Berechtigungen werden überprüft", 464, 56, 193, 115)
    $Progress = GUICtrlCreateProgress(8, 8, 446, 17, $PBS_MARQUEE)
    $statLabel = GUICtrlCreateLabel("Bitte warten", 8, 32, 446, 17)
    GUISetState(@SW_SHOW)

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

    _GUICtrlProgressSetMarquee($Progress)
    ConsoleWrite($sProtokoll & @CRLF)
    ConsoleWrite($sRootFolder & " wird durchsucht ..." & @CRLF)
    $aReturnfolderlist = _ReFileListToString($sRootFolder & "\")
    ConsoleWrite(UBound($aReturnfolderlist) & " Ordner gefunden" & @CRLF)
    Local $aAllGoupsandUsers[1]
    FileWrite($sProtokoll, "== Auflistung der Berechtigungen für " & $sRootFolder & " ==" & @CRLF & @CRLF)
    For $i3 = 0 To UBound($aReturnfolderlist) - 1
    If StringRight($aReturnfolderlist[$i3], 1) = "\" Then $aReturnfolderlist[$i3] = StringTrimRight($aReturnfolderlist[$i3], 1)
    $aReturnRights = _geteffberechtigungen($aReturnfolderlist[$i3])
    For $i2 = 1 To UBound($aReturnRights) - 1
    For $i = 0 To UBound($aReturnRights, 2) - 7
    If $aReturnRights[$i2][1] = $aReturnfolderlist[$i3] And Not $aReturnRights[$i2][19] = "INHERIT_ONLY_ACE" ANd $i = 0 Then FileWrite($sProtokoll, @CRLF)
    If Not $aReturnRights[$i2][19] = "INHERIT_ONLY_ACE" And Not $aReturnRights[$i2][$i] = "" And Not $aReturnRights[$i2][20] = "INHERIT_ACE" Then
    If $aReturnRights[$i2][1] = $aReturnfolderlist[$i3] Then FileWrite($sProtokoll, $aReturnRights[$i2][$i] & @CRLF)
    ElseIf Not $aReturnRights[$i2][19] = "INHERIT_ONLY_ACE" And Not $aReturnRights[$i2][$i] = "" And $sRootFolder = $aReturnRights[$i2][1] Then
    If $aReturnRights[$i2][1] = $aReturnfolderlist[$i3] Then FileWrite($sProtokoll, $aReturnRights[$i2][$i] & @CRLF)
    EndIf
    Next
    _ArrayAdd($aAllGoupsandUsers, $aReturnRights[$i2][0])
    Next
    Next
    _ArrayDelete($aAllGoupsandUsers, 0)
    $aAllGoupsandUsers = _ArrayUnique($aAllGoupsandUsers)
    _ArrayDelete($aAllGoupsandUsers, 0)
    $aReturnGroups = _getGroupsAndMembers($aAllGoupsandUsers)
    ConsoleWrite("...Done" & @CRLF)

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

    FileWrite($sProtokoll, @CRLF & "== Auflistung der Benutzergruppen ==" & @CRLF & @CRLF)
    ConsoleWrite("Durchsuchen der Benutzergruppen in der Domäne: " & @CRLF)
    For $i = 0 To UBound($aReturnGroups) - 1
    If Not $aReturnGroups[$i][0] = "" Then
    For $i2 = 0 To UBound($aReturnGroups, 2) - 1
    If Not $aReturnGroups[$i][$i2] = "" Then FileWrite($sProtokoll, $aReturnGroups[$i][$i2] & @CRLF)
    Next
    FileWrite($sProtokoll, @CRLF)
    EndIf
    Next
    ConsoleWrite("...Done" & @CRLF)
    GUIDelete($hGui)
    ShellExecute("notepad.exe", '"' & $sProtokoll & '"')

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

    Func _getGroupsAndMembers($aGroup)
    $aGroup = _getAllGroupsinGroups($aGroup)
    Local $aUsersinGroup[1][1]
    _AD_Open()
    Local $iMembers = 0
    For $iGroup = 0 To UBound($aGroup) - 1
    $aMembers = _AD_GetGroupMembers($aGroup[$iGroup])
    If Not @error > 0 Then
    If Not $aMembers[0] = 0 Then
    If $iMembers < UBound($aMembers + 1) Then $iMembers = UBound($aMembers) + 1
    ReDim $aUsersinGroup[UBound($aGroup)][$iMembers + 1]
    _ArraySort($aMembers, 0, 1)
    $aMembers = _ArrayUnique($aMembers)
    _ArrayDelete($aMembers, 0)
    $aUsersinGroup[$iGroup][0] = "Gruppe: " & $aGroup[$iGroup]
    For $x = 1 To UBound($aMembers) - 1
    $aUsersinGroupRegex = StringRegExp($aMembers[$x], "(?i)^CN=(.*?),", 1)
    If Not @error Then $aUsersinGroup[$iGroup][$x] = $aUsersinGroupRegex[0]
    Next
    EndIf
    EndIf
    Next
    _AD_Close()
    Return $aUsersinGroup
    EndFunc ;==>_getGroupsAndMembers

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

    Func _getAllGroupsinGroups($aGroup)
    $countold = UBound($aGroup)
    $sGroup = _ArrayToString($aGroup)
    For $group In $aGroup
    _AD_Open()
    $aMembers = _AD_GetGroupMembers($group)
    If Not @error > 0 Then
    If Not $aMembers[0] = 0 Then
    _ArrayDelete($aMembers,0)
    For $member In $aMembers
    $areturnmember = StringRegExp($member, "(?i)^CN=(.*?),", 1)
    If Not UBound($areturnmember) = 0 Then
    $aGroupMembers = _AD_GetGroupMembers($areturnmember[0])
    If Not @error > 0 Then
    If Not $aGroupMembers[0] = 0 Then
    $sGroup &= "|" & $areturnmember[0]
    EndIf
    EndIf
    EndIf
    Next
    EndIf
    EndIf
    _AD_Close()
    Next
    $aGroup = StringSplit($sGroup, "|", 2)
    _ArraySort($aGroup)
    $aGroup = _ArrayUnique($aGroup)
    _ArrayDelete($aGroup, 0)
    If $countold < UBound($aGroup) Then _getAllGroupsinGroups($aGroup)
    Return $aGroup
    EndFunc ;==>_getAllGroupsinGroups

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

    Func _geteffberechtigungen($sFolder)
    Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_LogicalFileSecuritySetting WHERE Path="' & StringReplace($sFolder, "\", "\\") & '"', "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $objItem.GetSecurityDescriptor($objSD)
    $colDacl = $objSD.DACL
    For $objDacl In $colDacl
    ReDim $aRights2dArray[UBound($aRights2dArray) + 1][21]
    $iRights2dArray = 0
    $aRights2dArray[UBound($aRights2dArray) - 1][$iRights2dArray] = $objDacl.Trustee.Name
    $iRights2dArray += 1
    $aRights2dArray[UBound($aRights2dArray) - 1][$iRights2dArray] = $objItem.Path
    $iRights2dArray += 1
    For $RightFlag In $aRightFlags
    If BitAND($objDacl.AccessMask, $RightFlag) Then $aRights2dArray[UBound($aRights2dArray) - 1][$iRights2dArray] = _makerightflagsreadable($RightFlag)
    $iRights2dArray += 1
    Next
    For $Aceflag In $aAceflags
    If BitAND($objDacl.AceFlags, $Aceflag) Then $aRights2dArray[UBound($aRights2dArray) - 1][$iRights2dArray] = _makeaceflagsreadable($Aceflag)
    $iRights2dArray += 1
    Next
    Next
    Next
    Return $aRights2dArray
    Else
    Return SetError(0)
    EndIf
    EndFunc ;==>_geteffberechtigungen

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

    Func _makerightflagsreadable($sFlag)
    Switch $sFlag
    Case $FILE_READ_DATA__FILE_LIST_DIRECTORY
    Return "Ordner auflisten / Daten lesen"
    Case $FILE_WRITE_DATA__FILE_ADD_FILE
    Return "Dateien erstellen / Daten schreiben"
    Case $FILE_APPEND_DATA__FILE_ADD_SUBDIRECTORY
    Return "Ordner erstellen / Daten anhängen"
    Case $FILE_READ_EA
    Return "Erweiterte Attribute lesen"
    Case $FILE_WRITE_EA
    Return "Erweiterte Attribute schreiben"
    Case $FILE_EXECUTE__FILE_TRAVERSE
    Return "Ordner durchsuchen / Dateien ausführen"
    Case $FILE_DELETE_CHILD
    Return "Unterordner und Dateien löschen"
    Case $FILE_READ_ATTRIBUTES
    Return "Attribute lesen"
    Case $FILE_WRITE_ATTRIBUTES
    Return "Attribute schreiben"
    Case $DELETE
    Return "Löschen"
    Case $READ_CONTROL
    Return "Berechtigungen lesen"
    Case $WRITE_DAC
    Return "Berechtigungen ändern"
    Case $WRITE_OWNER
    Return "Besitz übernehmen"
    Case $SYNCHRONIZE
    Return "Synchronisiert den Zugriff und erlaubt einem Prozess auf einem bestimmten Status eines Objektes zu warten"
    EndSwitch
    EndFunc ;==>_makerightflagsreadable

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

    Func _makeaceflagsreadable($sFlag)
    Switch $sFlag
    Case $OBJECT_INHERIT_ACE
    Return "OBJECT_INHERIT_ACE"
    Case $CONTAINER_INHERIT_ACE
    Return "CONTAINER_INHERIT_ACE"
    Case $NO_PROPAGATE_INHERIT_ACE
    Return "NO_PROPAGATE_INHERIT_ACE"
    Case $INHERIT_ONLY_ACE
    Return "INHERIT_ONLY_ACE"
    Case $INHERITED_ACE
    Return "INHERITED_ACE"
    EndSwitch
    EndFunc ;==>_makeaceflagsreadable

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

    Func _ReFileListToString($path) ;by Oscar (Autoit.de)
    Local $count, $Files
    Local $dFileList = _FileListToArray($path, '*', 2)
    $pathall &= $path & "|"
    If IsArray($dFileList) Then
    For $i = 1 To $dFileList[0]
    Local $hSearch, $sFile
    $hSearch = FileFindFirstFile($path & $dFileList[$i] & "\" & '*.*')
    If $hSearch <> -1 Then
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then
    SetError(0)
    ExitLoop
    EndIf
    If StringInStr(FileGetAttrib($path & $dFileList[$i] & "\" & $sFile), "D") <> 0 Then ContinueLoop
    $count += 1
    $Files &= $path & $dFileList[$i] & "\" & $sFile & '|'
    WEnd
    FileClose($hSearch)
    EndIf
    _ReFileListToString($path & $dFileList[$i] & '\')
    Next
    EndIf
    Return StringSplit(StringTrimRight($pathall, 1), "|", 2)
    EndFunc ;==>_ReFileListToString

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

    Func _GUICtrlProgressSetMarquee($h_Progress, $f_Mode = 1, $i_Time = 100)

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

    Local Const $WM_USER = 0x0400
    Local Const $PBM_SETMARQUEE = ($WM_USER + 10)

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

    Local $var = GUICtrlSendMsg($h_Progress, $PBM_SETMARQUEE, $f_Mode, Number($i_Time))
    If $var = 0 Then
    SetError(1)
    Return 0
    Else
    SetError(0)
    Return $var
    EndIf

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

    EndFunc ;==>_GUICtrlProgressSetMarquee

    [/autoit]


    PS: Script ist noch lang nicht fertig ;)

  • Domänen-Benutzer auflisten AD.au3

    • Mahagon
    • 17. Februar 2011 um 16:27

    Hi,
    Habe ein seltsames Problem

    Wenn ich versuche mit

    Spoiler anzeigen
    [autoit]

    _AD_Open()
    $qased = _AD_GetGroupMembers("CN=Domänen-Benutzer,CN=Users,DC=DOMAINXY,DC=de")
    _ArrayDisplay($qased)
    _AD_Close()

    [/autoit]

    bzw. mit

    Spoiler anzeigen
    [autoit]

    _AD_Open()
    $qased = _AD_GetGroupMembers("Domänen-Benutzer")
    _ArrayDisplay($qased)
    _AD_Close()

    [/autoit]

    die Benutzer auszulesen, erhalte ich immer $qased[0] = 0, obwohl ~150 Benutzer sich darin befinden sollten.
    Andere Benutzergruppen in der Domäne funktionieren einwandfrei (sind aber auch nicht so groß)

    Jemand eine Idee woran das liegen könnte? (am ä vermutlich nicht, da Domänen-Admins aufgelistet werden)

  • _FTP_Connect schägt fehl

    • Mahagon
    • 16. Februar 2011 um 21:58

    Habe schon mal was ähnliches gebastelt :)

    Spoiler anzeigen
    [autoit]

    #include <FTPEx.au3>

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

    Opt("MustDeclareVars", 1)

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

    Local $nMsg, $hGui, $hFtpOpen, $cFile, $cDurchsuchen, $cUpload, $sReturnPath, $Percentage, $cFortschritt, $hFtpCon, $sUploadFile, $sRemotePath, $aLocalPath
    Local Const $sServerName = "DEINFTPSERVER" ;FTP Server z.B. ftp.xyz.de
    Local Const $sServerUsername = "DEINBENUTZERNAME" ;FTP Benutzername
    Local Const $sServerPassword = "DEINFTPPASSWORT" ;FTP Passwort
    Local Const $iMode = 0 ;Active = 1 Passive = 0
    Local Const $sFTPPath = "" ;Falls die Datei in einen unterordner geschrieben werden soll, kann dieser hier angegeben werden z.B. /unterordner1/unterordner2/

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

    $hGui = GUICreate("FTP Upload", 320, 95, 192, 124)
    $cFile = GUICtrlCreateInput("", 8, 8, 217, 21)
    $cDurchsuchen = GUICtrlCreateButton("Durchsuchen", 232, 6, 75, 25)
    $cUpload = GUICtrlCreateButton("Upload", 8, 64, 75, 25)
    $cFortschritt = GUICtrlCreateProgress(8, 32, 297, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $cDurchsuchen
    $sReturnPath = FileOpenDialog("Durchsuchen", @UserProfileDir, "Alle Dateien (*.*)")
    If $sReturnPath <> "" Then GUICtrlSetData($cFile, $sReturnPath)
    Case $cUpload
    $sUploadFile = GUICtrlRead($cFile)
    If FileExists($sUploadFile) Then
    $aLocalPath = StringSplit($sUploadFile, "\")
    $hFtpOpen = _FTP_Open("Dateiupload" & Random(10, 1000, 1));eröffnet eine neue FTP Session
    $hFtpCon = _FTP_Connect($hFtpOpen, $sServerName, $sServerUsername, $sServerPassword,$iMode);Verbindung zum FTP wird hergestellt
    If @error Then
    MsgBox(16, "Error", "Verbindung zum FTP fehlgeschlagen")
    Else
    _FTP_ProgressUpload($hFtpCon, $sUploadFile, $sFTPPath & $aLocalPath[$aLocalPath[0]], "_ProgressRefresh") ;läd die Datei hoch und führt die Funktion _ProgressRefresh aus
    If @error Then
    MsgBox(16, "Error", "Upload fehlgeschlagen")
    Else
    MsgBox(64, "Success", "Upload erfolgreich durchgeführt")
    EndIf
    EndIf
    _FTP_Close($hFtpOpen);FTP Session wird geschlossen
    Else
    MsgBox(16, "Error", "Datei konnte nicht gefunden werden")
    EndIf
    EndSwitch
    WEnd
    Func _ProgressRefresh($Percentage)
    GUICtrlSetData($cFortschritt, $Percentage) ;Setzt den Fortschrittsbalken auf X Prozent ($Percentage wird von _FTP_ProgressUpload übergeben)
    Return 1 ;führt den Upload fort
    EndFunc ;==>_ProgressRefresh

    [/autoit]

    Aber hier nochmal dein Script verbessert ;o

    Spoiler anzeigen
    [autoit]

    #include <FTPEx.au3>

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

    $server = 'ftp://dominik-p.net/public_ftp/'
    $username = "AutoBert"
    $pass ="4711"
    $FTPFile = "FTP_TreeViewShowDirs2.au3"
    $ULFile = @ScriptDir & "\FTP_TreeViewShowDirs2.au3"

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

    $Open = _FTP_Open('MyFTP Control')
    $bOpen = @error
    If Not $bOpen Then
    $Conn = _FTP_Connect($Open, $server, $username, $pass)
    $bCon = @error
    If Not $bCon Then
    If _FTP_FilePut($Conn, $ULFile, $FTPFile) Then ;du hast Uploadfile und Ftp file vertauscht :)
    MsgBox(0, "Upload", "erfolgreich")
    $Ftpc = _FTP_Close($Open)
    Else
    MsgBox(0, "Upload", "fehlgeschlagen")
    ConsoleWrite("Upload: " & $bCon & " " & @extended & @CRLF)
    EndIf
    Else
    MsgBox(0, "Connect", "fehlgeschalagen")
    ConsoleWrite("Connect: " & $bCon & " " & @extended & @CRLF)
    EndIf
    Else
    MsgBox(0, "OPen", "fehlgeschalagen")
    ConsoleWrite("Open " & $bOpen & " " & @extended & @CRLF)
    EndIf

    [/autoit]
  • Netzwerk Tunnel

    • Mahagon
    • 16. Februar 2011 um 20:24

    Die Frage ist was du verbinden willst. 2 Netzwerke? 1 Pc und ein Netzwerk? oder 2 PCs?

  • Effektive Ordnerberechtigungen auslesen

    • Mahagon
    • 16. Februar 2011 um 09:02

    Danke für die Antworten (habe schon gedacht der Thread wäre gestorben :D)

    Bin aber auch schon einen erheblichen Schritt weiter :)

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    Local _
    $FILE_READ_DATA__FILE_LIST_DIRECTORY = 1, _;Grants the right to read data from the file. For a directory, this value grants the right to list the contents of the directory.
    $FILE_WRITE_DATA__FILE_ADD_FILE = 2, _;Grants the right to write data to the file. For a directory, this value grants the right to create a file in the directory.
    $FILE_APPEND_DATA__FILE_ADD_SUBDIRECTORY = 4, _;Grants the right to append data to the file. For a directory, this value grants the right to create a subdirectory.
    $FILE_READ_EA = 8, _;Grants the right to read extended attributes.
    $FILE_WRITE_EA = 16, _;Grants the right to write extended attributes.
    $FILE_EXECUTE__FILE_TRAVERSE = 32, _;Grants the right to execute a file. For a directory, the directory can be traversed.
    $FILE_DELETE_CHILD = 64, _;Grants the right to delete a directory and all the files it contains (its children), even if the files are read-only.
    $FILE_READ_ATTRIBUTES = 128, _;Grants the right to read file attributes.
    $FILE_WRITE_ATTRIBUTES = 256, _;Grants the right to change file attributes.
    $DELETE = 65536, _;Grants delete access.
    $READ_CONTROL = 131072, _;Grants read access to the security descriptor and owner.
    $WRITE_DAC = 262144, _;Grants write access to the discretionary access control list (ACL).
    $WRITE_OWNER = 524288, _;Assigns the write owner.
    $SYNCHRONIZE = 1048576, _;Synchronizes access and allows a process to wait for an object to enter the signaled state.
    $OBJECT_INHERIT_ACE = 1, _;Noncontainer child objects inherit the ACE as an effective ACE. For child objects that are containers, the ACE is inherited as an inherit-only ACE unless the NO_PROPAGATE_INHERIT_ACE bit flag is also set.
    $CONTAINER_INHERIT_ACE = 2, _ ; Child objects that are containers, such as directories, inherit the ACE as an effective ACE. The inherited ACE is inheritable unless the NO_PROPAGATE_INHERIT_ACE bit flag is also set.
    $NO_PROPAGATE_INHERIT_ACE = 4, _ ;If the ACE is inherited by a child object, the system clears the OBJECT_INHERIT_ACE and CONTAINER_INHERIT_ACE flags in the inherited ACE. This prevents the ACE from being inherited by subsequent generations of objects.
    $INHERIT_ONLY_ACE = 8, _ ;Indicates an inherit-only ACE which does not control access to the object to which it is attached. If this flag is not set, the ACE is an effective ACE which controls access to the object to which it is attached. Both effective and inherit-only ACEs can be inherited depending on the state of the other inheritance flags.
    $INHERITED_ACE = 16, _ ;The system sets this bit when it propagates an inherited ACE to a child object.
    $wbemFlagReturnImmediately = 0x10, _
    $wbemFlagForwardOnly = 0x20, _
    $colItems = "", _
    $strComputer = "localhost", _
    $objSD, _
    $Output = "", _
    $objDaclAccessmask
    Local $aRights2dArray[1][21]
    Local $aRightFlags[14] = [$FILE_READ_DATA__FILE_LIST_DIRECTORY, $FILE_WRITE_DATA__FILE_ADD_FILE, $FILE_APPEND_DATA__FILE_ADD_SUBDIRECTORY, $FILE_READ_EA, $FILE_WRITE_EA, $FILE_EXECUTE__FILE_TRAVERSE, $FILE_DELETE_CHILD, $FILE_READ_ATTRIBUTES, $FILE_WRITE_ATTRIBUTES, $DELETE, $READ_CONTROL, $WRITE_DAC, $WRITE_OWNER, $SYNCHRONIZE]
    Local $aAceflags[5] = [$OBJECT_INHERIT_ACE, $CONTAINER_INHERIT_ACE, $NO_PROPAGATE_INHERIT_ACE, $INHERIT_ONLY_ACE, $INHERITED_ACE]
    Local $sRootFolder = FileSelectFolder("Verzeichnis zum auslesen der Berechtigungen auswählen", "C:\Vol1")
    Local $pathall
    ConsoleWrite($sRootFolder & " wird durchsucht ..." & @CRLF)
    $aReturnfolderlist = _ReFileListToString($sRootFolder & "\")
    ConsoleWrite(UBound($aReturnfolderlist) & " Ordner gefunden" & @CRLF & @CRLF)
    For $i3 = 0 To UBound($aReturnfolderlist) - 1
    If StringRight($aReturnfolderlist[$i3], 1) = "\" Then $aReturnfolderlist[$i3] = StringTrimRight($aReturnfolderlist[$i3], 1)
    $aReturnRights = _geteffberechtigungen($aReturnfolderlist[$i3])
    For $i2 = 1 To UBound($aReturnRights) - 1
    For $i = 0 To UBound($aReturnRights, 2) - 6
    If Not $aReturnRights[$i2][19] = "INHERIT_ONLY_ACE" And Not $aReturnRights[$i2][$i] = "" And Not $aReturnRights[$i2][20] = "INHERIT_ACE" Then
    If $aReturnRights[$i2][1] = $aReturnfolderlist[$i3] Then ConsoleWrite($aReturnRights[$i2][$i] & @CRLF)
    EndIf
    Next
    If Not $aReturnRights[$i2][19] = "INHERIT_ONLY_ACE" And $aReturnRights[$i2][1] = $aReturnfolderlist[$i3] And Not $aReturnRights[$i2][20] = "INHERIT_ACE" Then ConsoleWrite(@CRLF)
    Next
    Next

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

    ConsoleWrite(@CRLF & "...Done" & @CRLF)

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

    Func _geteffberechtigungen($sFolder)
    Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_LogicalFileSecuritySetting WHERE Path="' & StringReplace($sFolder, "\", "\\") & '"', "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $objItem.GetSecurityDescriptor($objSD)
    $colDacl = $objSD.DACL
    For $objDacl In $colDacl
    ReDim $aRights2dArray[UBound($aRights2dArray) + 1][21]
    $iRights2dArray = 0
    $aRights2dArray[UBound($aRights2dArray) - 1][$iRights2dArray] = $objDacl.Trustee.Name
    $iRights2dArray += 1
    $aRights2dArray[UBound($aRights2dArray) - 1][$iRights2dArray] = $objItem.Path
    $iRights2dArray += 1
    For $RightFlag In $aRightFlags
    If BitAND($objDacl.AccessMask, $RightFlag) Then $aRights2dArray[UBound($aRights2dArray) - 1][$iRights2dArray] = _makerightflagsreadable($RightFlag)
    $iRights2dArray += 1
    Next
    For $Aceflag In $aAceflags
    If BitAND($objDacl.AceFlags, $Aceflag) Then $aRights2dArray[UBound($aRights2dArray) - 1][$iRights2dArray] = _makeaceflagsreadable($Aceflag)
    $iRights2dArray += 1
    Next
    Next
    Next
    Return $aRights2dArray
    Else
    Return SetError(0)
    EndIf
    EndFunc ;==>_geteffberechtigungen

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

    Func _makerightflagsreadable($sFlag)
    Switch $sFlag
    Case $FILE_READ_DATA__FILE_LIST_DIRECTORY
    Return "Ordner auflisten / Daten lesen"
    Case $FILE_WRITE_DATA__FILE_ADD_FILE
    Return "Dateien erstellen / Daten schreiben"
    Case $FILE_APPEND_DATA__FILE_ADD_SUBDIRECTORY
    Return "Ordner erstellen / Daten anhängen"
    Case $FILE_READ_EA
    Return "Erweiterte Attribute lesen"
    Case $FILE_WRITE_EA
    Return "Erweiterte Attribute schreiben"
    Case $FILE_EXECUTE__FILE_TRAVERSE
    Return "Ordner durchsuchen / Dateien ausführen"
    Case $FILE_DELETE_CHILD
    Return "Unterordner und Dateien löschen"
    Case $FILE_READ_ATTRIBUTES
    Return "Attribute lesen"
    Case $FILE_WRITE_ATTRIBUTES
    Return "Attribute schreiben"
    Case $DELETE
    Return "Löschen"
    Case $READ_CONTROL
    Return "Berechtigungen lesen"
    Case $WRITE_DAC
    Return "Berechtigungen ändern"
    Case $WRITE_OWNER
    Return "Besitz übernehmen"
    Case $SYNCHRONIZE
    Return "Synchronisiert den Zugriff und erlaubt einem Prozess auf einem bestimmten Status eines Objektes zu warten"
    EndSwitch
    EndFunc ;==>_makerightflagsreadable

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

    Func _makeaceflagsreadable($sFlag)
    Switch $sFlag
    Case $OBJECT_INHERIT_ACE
    Return "OBJECT_INHERIT_ACE"
    Case $CONTAINER_INHERIT_ACE
    Return "CONTAINER_INHERIT_ACE"
    Case $NO_PROPAGATE_INHERIT_ACE
    Return "NO_PROPAGATE_INHERIT_ACE"
    Case $INHERIT_ONLY_ACE
    Return "INHERIT_ONLY_ACE"
    Case $INHERITED_ACE
    Return "INHERITED_ACE"
    EndSwitch
    EndFunc ;==>_makeaceflagsreadable

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

    Func _ReFileListToString($path) ;by Oscar (Autoit.de)
    Local $count, $Files
    Local $dFileList = _FileListToArray($path, '*', 2)
    $pathall &= $path & "|"
    If IsArray($dFileList) Then
    For $i = 1 To $dFileList[0]
    Local $hSearch, $sFile
    $hSearch = FileFindFirstFile($path & $dFileList[$i] & "\" & '*.*')
    If $hSearch <> -1 Then
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then
    SetError(0)
    ExitLoop
    EndIf
    If StringInStr(FileGetAttrib($path & $dFileList[$i] & "\" & $sFile), "D") <> 0 Then ContinueLoop
    $count += 1
    $Files &= $path & $dFileList[$i] & "\" & $sFile & '|'
    WEnd
    FileClose($hSearch)
    EndIf
    _ReFileListToString($path & $dFileList[$i] & '\')
    Next
    EndIf
    Return StringSplit(StringTrimRight($pathall, 1), "|", 2)
    EndFunc ;==>_ReFileListToString

    [/autoit]
  • [ gelöst ]Powershell Problem

    • Mahagon
    • 14. Februar 2011 um 16:38

    Mach es doch einfach per if exist und dann ein ren in *.vhd -> *.vh1 -> *.vh2 -> *.vh3
    Danach kannst du mit if exist auf *.vh3 prüfen und mit Del entfernen

  • Automatische Installation (Sammlung gesucht)

    • Mahagon
    • 14. Februar 2011 um 11:58

    Hm das beste ist meiner Meinung nach immernoch das ganze über MSI Pakete / Silentschalter zu machen
    Mit Auto It ist das auf verschiedenen Systemen manchmal recht unzuverlässig :/

    http://www.appdeploy.com/ ist da z.B. ne gute Adresse
    Und zum MSI Pakete erstellen ist WinInstall LE ganz gut :)
    Eine Sammlung von Auto It Scripten habe ich dafür schon mal auf ner unattend Seite gesehen... aber vergessen wo das war ^^

  • FileCopy mit Progressbar

    • Mahagon
    • 12. Februar 2011 um 11:15

    Ein bischen Eigenleistung solltest du schon zeigen ;)
    Programmieranfragen kannst du hier stellen https://autoit.de/index.php?page=Board&amp;boardID=51
    Aber du hast doch schon eigentlich den richtigen Thread erwischt.
    Lesen und daraus lernen

  • Effektive Ordnerberechtigungen auslesen

    • Mahagon
    • 8. Februar 2011 um 13:39

    Hi,

    ich bin im Moment dabeit ein kleines Tool zu basteln, welches die Ordnerbrechtigungen (später rekursiv) auslesen soll. Nur scheitert es bei mir im Moment an der AccessMask. Das Programm soll jedoch nicht die Accessmask ausspucken sondern die eigentlichen Berechtigungen (Hier was zur AccessMask von MS). Mein Problem besteht darin das ich einfach nicht drauf komme, wie ichs umwandeln soll... . Eventuell ist mein Ansatz mit der AccessMask auch falsch.... Von euch hat da nicht zufällig noch Jemand eine Idee? :/ Wollte mit dem Tool meine arbeiten abschließend protkollieren. Habe leider kein Programm gefunden, welches es so macht, dass es auch der Kunde nachvollziehen kann.

    EDIT: http://itknowledgeexchange.techtarget.com/powershell/sha…he-access-mask/ das könnte auch was sein. Nur bin ich nicht gerade bewandert in der Powershell mit BitAND hat es bei mir nicht geklappt.

    Spoiler anzeigen
    [autoit]

    Local _
    $FILE_READ_DATA__FILE_LIST_DIRECTORY = 1, _;Grants the right to read data from the file. For a directory, this value grants the right to list the contents of the directory.
    $FILE_WRITE_DATA__FILE_ADD_FILE = 2, _;Grants the right to write data to the file. For a directory, this value grants the right to create a file in the directory.
    $FILE_APPEND_DATA__FILE_ADD_SUBDIRECTORY = 4, _;Grants the right to append data to the file. For a directory, this value grants the right to create a subdirectory.
    $FILE_READ_EA = 8, _;Grants the right to read extended attributes.
    $FILE_WRITE_EA = 16, _;Grants the right to write extended attributes.
    $FILE_EXECUTE__FILE_TRAVERSE = 32, _;Grants the right to execute a file. For a directory, the directory can be traversed.
    $FILE_DELETE_CHILD = 64, _;Grants the right to delete a directory and all the files it contains (its children), even if the files are read-only.
    $FILE_READ_ATTRIBUTES = 128, _;Grants the right to read file attributes.
    $FILE_WRITE_ATTRIBUTES = 256, _;Grants the right to change file attributes.
    $DELETE = 65536, _;Grants delete access.
    $READ_CONTROL = 131072, _;Grants read access to the security descriptor and owner.
    $WRITE_DAC = 262144, _;Grants write access to the discretionary access control list (ACL).
    $WRITE_OWNER = 524288, _;Assigns the write owner.
    $SYNCHRONIZE = 1048576, _;Synchronizes access and allows a process to wait for an object to enter the signaled state.
    $OBJECT_INHERIT_ACE = 1, _;Noncontainer child objects inherit the ACE as an effective ACE. For child objects that are containers, the ACE is inherited as an inherit-only ACE unless the NO_PROPAGATE_INHERIT_ACE bit flag is also set.
    $CONTAINER_INHERIT_ACE = 2, _ ; Child objects that are containers, such as directories, inherit the ACE as an effective ACE. The inherited ACE is inheritable unless the NO_PROPAGATE_INHERIT_ACE bit flag is also set.
    $NO_PROPAGATE_INHERIT_ACE = 4, _ ;If the ACE is inherited by a child object, the system clears the OBJECT_INHERIT_ACE and CONTAINER_INHERIT_ACE flags in the inherited ACE. This prevents the ACE from being inherited by subsequent generations of objects.
    $INHERIT_ONLY_ACE = 8, _ ;Indicates an inherit-only ACE which does not control access to the object to which it is attached. If this flag is not set, the ACE is an effective ACE which controls access to the object to which it is attached. Both effective and inherit-only ACEs can be inherited depending on the state of the other inheritance flags.
    $INHERITED_ACE = 16, _ ;The system sets this bit when it propagates an inherited ACE to a child object.
    $wbemFlagReturnImmediately = 0x10, _
    $wbemFlagForwardOnly = 0x20, _
    $colItems = "", _
    $strComputer = "localhost", _
    $objSD, _
    $Output = "", _
    $sFolderRights = ""

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

    Local $sRootFolder = FileSelectFolder("Verzeichnis zum auslesen der Berechtigungen auswählen", "C:\Xampp")
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_LogicalFileSecuritySetting WHERE Path="' & StringReplace($sRootFolder, "\", "\\") & '"', "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $objItem.GetSecurityDescriptor($objSD)
    $Output = $Output & "Pfad: " & @TAB & @TAB & @TAB & $objItem.Path & @CRLF
    $colDacl = $objSD.DACL ; discretionary access control list(Array)
    For $objDacl In $colDacl
    $Output = $Output & "Benutzer/Gruppe: " & @TAB & $objDacl.Trustee.Name & @CRLF
    $Output = $Output & "Flags: " & @TAB & @TAB & @TAB & $objDacl.AceFlags & @CRLF
    $Output = $Output & "Rechte: " & $objDacl.AccessMask & @CRLF
    $Output = $Output & $sFolderRights
    Next
    Next
    ConsoleWrite($Output)
    Else
    MsgBox(1, "Error", "Pfad nicht gefunden")
    EndIf

    [/autoit]

    Danke schonmal im Voraus :)

  • Netzwerkadapter Starten und auschalten

    • Mahagon
    • 24. Januar 2011 um 21:43

    https://autoit.de/index.php?page…5253#post185253

    Das sollte denke ich das sein was du suchst ;)

  • SQL-Statement DELETE

    • Mahagon
    • 19. Januar 2011 um 11:47

    Persönlich arbeite ich zwar nicht mit SQLite, aber anscheinend gibt es einen weg Fremdschlüssel zu erstellen:
    http://www.sqlite.org/foreignkeys.html#fk_basics

    Und zum löschen gibt es dann ja Cascade :)
    http://www.sqlite.org/foreignkeys.html#fk_actions

  • hilfe - Dienst beendet sich

    • Mahagon
    • 17. Januar 2011 um 21:02

    ich würde es einmal mit Malewarebytes versuchen (unter Windows PE wenn es geht) bzw Knopcillin drüberjagen :)
    Ansonsten -> for maijor problems reinstall (hilft bei Windows immer :D)

  • FTP Upload

    • Mahagon
    • 17. Januar 2011 um 12:59

    Warum eigentlich nicht die Standard UDF?

    [autoit]

    $sServer = "FTPSERVER"
    $sUsername = "FTPUSER"
    $sPass = "FTPPASSWORT"

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

    $hOpen = _FTP_Open("ftpsession" & Random(0,100,0))
    $hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass,1)
    _FTP_DirCreate($hConn,"testordner")
    _FTP_DirSetCurrent($hConn, "testordner")
    _FTP_FilePut($hConn,"C:\test.txt","test.txt")
    _FTP_Close($hOpen)

    [/autoit]
  • Gui in einer Gui

    • Mahagon
    • 27. Dezember 2010 um 22:08
    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    $IE = _IECreateEmbedded()
    Global $html
    $home = IniRead("Browser.ini", "Seite", "Startseite", "google.de")
    #Region ### START Koda GUI section ###
    $Form1 = GUICreate("Webbrower", @DesktopWidth - 100, @DesktopHeight - 100)
    $Menu_Datei = GUICtrlCreateMenu("&Datei")
    $Menu_Einstellungen = GUICtrlCreateMenuItem("Einstellungen", $Menu_Datei)
    $Menu_beenden = GUICtrlCreateMenuItem("Beenden", $Menu_Datei)
    $GUI_url = GUICtrlCreateInput("http://", 92, 8, 801, 21)
    $Label1 = GUICtrlCreateLabel("Adresse:", 8, 8, 67, 24)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $GUI_go = GUICtrlCreateButton("Go!", 900, 6, 65, 25, $WS_GROUP)
    $GUI_home = GUICtrlCreateButton("HOME", 1072, 6, 89, 25, $WS_GROUP)
    $browser = GUICtrlCreateObj($IE, 0, 40, 1217, 673)
    GUISetState(@SW_SHOW, $Form1)

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

    $form2 = GUICreate("Einstellungen", 250, 250)
    GUICtrlCreateLabel("Startseite", 5, 18)
    $startseite = GUICtrlCreateInput($home, 70, 15, 170)
    $bestaetigen = GUICtrlCreateButton("Bestätigen", 10, 220, 230)
    GUISetState(@SW_HIDE, $form2)
    #EndRegion ### END Koda GUI section ###

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

    _IENavigate($IE, $home)
    GUICtrlSetData($GUI_url, $home)

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

    While True
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[1]
    Case $Form1
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_go
    $html = GUICtrlRead($GUI_url)
    _IENavigate($IE, $html)
    Case $GUI_home
    $home = IniRead("Browser.ini", "Seite", "Startseite", "google.de")
    _IENavigate($IE, $home)
    GUICtrlSetData($GUI_url, $home)
    Case $Menu_Einstellungen
    GUISetState(@SW_SHOW, $form2)
    EndSwitch
    Case $form2
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE, $form2)
    Case $bestaetigen
    IniWrite("Browser.ini", "Seite", "Startseite", GUICtrlRead($startseite))
    $home = IniRead("Browser.ini", "Seite", "Startseite", "google.de")
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]

    Habe ein wenig entwirrt das ganze ^^
    So sollte es klappen
    Du solltest aber deinen Variablen eindeutigere Namen geben $startseite war z.B. 2 mal vergeben

  • Administartor hinzufügen?

    • Mahagon
    • 6. Dezember 2010 um 12:46

    Ich denke er will einen lokalen Administrator hinzufügen.

    Das geht mit:

    net user Billi PASSWORT /ADD /FULLNAME:"Billi Meyer" ;Erstellt den User Billi mit vollen Namen Billi Meyer
    net localgroup Administratoren Billi /ADD ; Fügt den User zu den Administratoren hinzu
    net localgroup Benutzer Billi /DELETE ;Löscht ihn aus der Gruppe Benutzer


    Ich hoffe, das hilft dir weiter ;)

  • Kennwort geschützte Dokumente nicht öffnen

    • Mahagon
    • 30. November 2010 um 22:21

    Habe ich auch gerade feststellen müssen, als ich einfach mal "None" als Passwort eingegeben habe.,.. oh man.

    Naja vielen Dank :)

    Hier noch einmal das vollständige Script, falls es jemand braucht:

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.1
    Author: Daniel Jacobs

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

    Script Function:
    löscht den Vorlagepfad (dieser verlangsamt oft den start in neuen Umgebungen)
    Speichert die Dokumente in der aktuellen Office Version erneut, um Kompatibilitätsprobleme bei älteren Dokumenten beheben
    (Beispielsweise, wenn die Dokumente aus einer Office 97 *.dot erstellt worden sind)

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

    #ce ----------------------------------------------------------------------------

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

    Opt("TrayAutoPause", 0)
    Opt("TrayIconHide", 1)
    #include <Word.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <Timers.au3>
    Local $pathall = ""
    Local $iAllFilecounter = 0
    Local $iCurrentFile = 0
    Local $endtimeopendoc = 0
    Local $aDocFormate[2] = ["*.doc", "*.dot"]
    $hGui = GUICreate("Word Repair", 526, 78, 192, 114)
    $cPath = GUICtrlCreateInput("C:\", 8, 8, 505, 21)
    $cStarten = GUICtrlCreateButton("Starten", 8, 40, 75, 25)
    GUISetState(@SW_SHOW, $hGui)
    _WordErrorHandlerRegister("MyErrFunc")
    _WordErrorNotify(True)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $cStarten
    $sPath = GUICtrlRead($cPath)
    If FileExists($sPath) Then
    If StringInStr(StringRight($sPath, 1), "\") = 0 Then $sPath &= "\"
    $starttime = _Timer_Init()
    GUISetState(@SW_HIDE, $hGui)
    GUICtrlSetState($cStarten, $GUI_DISABLE)
    ProgressOn("Worddateien in " & StringTrimRight($sPath, 1) & " werden repariert", $sPath, "Ordner werden durchsucht", Default, 0, 16)
    $aPaths = _ReFileListToString($sPath)
    ToolTip("")
    $sProtokoll = @ScriptDir & "\Protokoll_" & @MDAY & "." & @MON & "." & @YEAR & "_" & @HOUR & "-" & @MIN & "-" & @SEC & "-" & @MSEC & ".log"
    $aVersion = _Word_VersionInfo()
    FileWrite($sProtokoll, "Office Version: " & $aVersion[0] & $aVersion[1] & $aVersion[2] & @CRLF)
    $oWordApp = _WordCreate("", 0, 0)
    For $iPaths = 0 To UBound($aPaths) - 1
    For $iFormat = 0 To UBound($aDocFormate) - 1
    $aDateien = _FileListToArray($aPaths[$iPaths], $aDocFormate[$iFormat], 1)
    If UBound($aDateien) <> 0 Then
    FileWrite($sProtokoll, "-------------------------------------------------------" & @CRLF)
    FileWrite($sProtokoll, " " & @CRLF)
    FileWrite($sProtokoll, "Pfad: " & $aPaths[$iPaths] & @CRLF)
    FileWrite($sProtokoll, " " & @CRLF)
    FileWrite($sProtokoll, " " & @CRLF)
    For $i = 1 To $aDateien[0]
    If StringInStr(FileGetAttrib($aPaths[$iPaths] & $aDateien[$i]), "T") = 0 And StringLeft($aDateien[$i],2) <> "~$" Then ;Temporäre Dateien werden ausgeschlossen
    FileSetAttrib($aPaths[$iPaths] & $aDateien[$i], "-R") ;Schreibschutz (falls vorhanden) wird entfernt)
    FileWrite($sProtokoll, "Dokument: " & @TAB & @TAB & $aDateien[$i] & @CRLF)
    $iCurrentFile += 1
    ProgressSet($iCurrentFile * 100 / $iAllFilecounter, StringTrimLeft($aPaths[$iPaths], StringLen($sPath) - 1) & $aDateien[$i] & @CRLF _
    & "~" & $endtimeopendoc & " Minuten verbleibend.", $iCurrentFile & " von " & $iAllFilecounter & " verarbeitet")
    $oWordApp.Visible = False ; Setzt das Fenster auf Unsichtbar, falls es durch irgendwelche Einflüsse sichtbar wurde
    $starttimeopendoc = _Timer_Init()
    $oDoc = _WordDocOpen($oWordApp, $aPaths[$iPaths] & $aDateien[$i], 0, 0, 0, 0, 0, "None") ;Das Passwort "None" verhindert den Passwortdialog
    If Not @error Then
    If $aDocFormate[$iFormat] = "*.doc" Then
    FileWrite($sProtokoll, "Alte Vorlage: " & @TAB & $oDoc.AttachedTemplate.FullName & @CRLF)
    $oDoc.AttachedTemplate = "";Vorlage wird entfernt
    FileWrite($sProtokoll, "Neue Vorlage: " & @TAB & $oDoc.AttachedTemplate.FullName & @CRLF)
    EndIf
    $oDoc.SaveAs($aPaths[$iPaths] & $aDateien[$i]);Wird erneut gespeichert
    _WordDocClose($oDoc)
    $endtimeopendoc = Round(_Timer_Diff($starttimeopendoc) * ($iAllFilecounter - $iCurrentFile) / 60000, 2)
    EndIf
    Else
    $iCurrentFile += 1
    EndIf
    If $iFormat <> 1 Then FileWrite($sProtokoll, " " & @CRLF)
    Next
    FileWrite($sProtokoll, " " & @CRLF)
    FileWrite($sProtokoll, "Anzahl " & $aDocFormate[$iFormat] & " Dateien: " & $aDateien[0] & " Dauer bisher: " & Round(_Timer_Diff($starttime) / 60000, 2) & " Minuten" & @CRLF)
    $aDateien = _FileListToArray($aPaths[$iPaths], "*.wbk", 1);entfernen der Sicherungsdateien
    If UBound($aDateien) <> 0 Then
    For $i = 1 To $aDateien[0]
    ProgressSet($i * 100 / $aDateien[0], $i & " von " & $aDateien[0] & " Sicherungsdateien entfernt", $aDateien[$i])
    FileDelete($aPaths[$iPaths] & $aDateien[$i])
    Next
    EndIf
    EndIf
    Next
    Next
    FileWrite($sProtokoll, "-------------------------------------------------------" & @CRLF)
    FileWrite($sProtokoll, "-------------------------------------------------------" & @CRLF)
    FileWrite($sProtokoll,$iAllFilecounter & " Dateien von " & $iCurrentFile & " Dateien sind in " & Round(_Timer_Diff($starttime) / 60000, 2) & " Minuten bearbeitet worden.")
    ProgressOff()
    _WordQuit($oWordApp)
    GUISetState(@SW_SHOW, $hGui)
    MsgBox(0, "", "Fertig")
    GUICtrlSetState($cStarten, $GUI_ENABLE)
    ShellExecute($sProtokoll)
    Else
    MsgBox(16, "", GUICtrlRead($cPath) & @CRLF & "Pfad konnte nicht gefunden werden")
    EndIf
    EndSwitch
    WEnd
    _WordErrorHandlerDeRegister()
    _WordErrorNotify(False)

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

    Func _ReFileListToString($path) ;by Oscar (Autoit.de)
    Local $count, $Files
    Local $dFileList = _FileListToArray($path, '*', 2)
    For $i = 0 To UBound($aDocFormate) - 1
    $aDateien = _FileListToArray($path, $aDocFormate[$i], 1)
    If UBound($aDateien) <> 0 Then $iAllFilecounter += $aDateien[0]
    ProgressSet(0, $iAllFilecounter & " Word Dokumente gefunden.", $path)
    Next
    $pathall &= $path & "|"
    If IsArray($dFileList) Then
    For $i = 1 To $dFileList[0]
    Local $hSearch, $sFile
    $hSearch = FileFindFirstFile($path & $dFileList[$i] & "\" & '*.*')
    If $hSearch <> -1 Then
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then
    SetError(0)
    ExitLoop
    EndIf
    If StringInStr(FileGetAttrib($path & $dFileList[$i] & "\" & $sFile), "D") <> 0 Then ContinueLoop
    $count += 1
    $Files &= $path & $dFileList[$i] & "\" & $sFile & '|'
    WEnd
    FileClose($hSearch)
    EndIf
    _ReFileListToString($path & $dFileList[$i] & '\')
    Next
    EndIf
    Return StringSplit(StringTrimRight($pathall, 1), "|", 2)
    EndFunc ;==>_ReFileListToString
    Func MyErrFunc()
    ; Wichtig: Die Fehler-Objektvariable muss $oWordErrorHandler genannt werden!
    $ErrorDescription = StringStripWS($oWordErrorHandler.description, 2)
    FileWrite($sProtokoll, "COM-Fehler: " & $ErrorDescription & @CRLF)
    SetError(1)
    Return
    EndFunc ;==>MyErrFunc

    [/autoit]
  • Kennwort geschützte Dokumente nicht öffnen

    • Mahagon
    • 30. November 2010 um 21:46

    Da das Script erst fortfährt sobald man auf OK oder Abbrechen beim Passwortdialog klickt ist das ziemlich schwierig ;)
    deswegen muss ich es wohl irgendwie über eine Methode, die feststellt, ob das ganze passwortgeschützt ist.

  • Kennwort geschützte Dokumente nicht öffnen

    • Mahagon
    • 30. November 2010 um 14:57

    Hi, ich habe noch ein kleines Problem mit einem Script.
    Und zwar gibt es Probleme bei Worddokumenten die mit sehr alten Vorlagen erstellt worden sind, wenn sie aus externen Anwendungen gestartet werden. (MS Sicherheitseinstellungen in 2010 sind "Schuld", nur wollte ich diese nicht herunterschrauben). Gelöst habe ich es schon. Nur werden auch Passwortgeschützte Dateien geöffnet (was er natürlich Aufgrund des Passwortes nicht kann) und das ganze Script steht. Da es knapp 30k Worddokumente sind wollte ich nicht die ganze Zeit davor sitzen und Abbrechen klicken ;). Hat Jemand eine Idee wie man dies lösen kann? Habe schon mit _WordDocPropertyGet($oDoc, 6) versucht die Passwortgeschützten auszuschließen (leider erfolglos, da es keinen eindeutigen Rückgabewert gab).

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    Opt("TrayAutoPause",0)
    Opt("TrayIconHide",1)
    #include <Word.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <Timers.au3>
    Local $pathall = ""
    Local $aDocFormate[5] = ["*.doc", "*.docx", "*.dot", "*.dotx", "*.dotm"]
    $hGui = GUICreate("Word Repair", 526, 78, 192, 114)
    $cPath = GUICtrlCreateInput("C:\Dokumente", 8, 8, 505, 21)
    $cStarten = GUICtrlCreateButton("Starten", 8, 40, 75, 25)
    GUISetState(@SW_SHOW, $hGui)
    _WordErrorHandlerRegister("MyErrFunc")
    _WordErrorNotify(1)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $cStarten
    $sPath = GUICtrlRead($cPath)
    If FileExists($sPath) Then
    If StringInStr(StringRight($sPath,1),"\") = 0 Then $sPath &= "\"
    $aPaths = _ReFileListToString($sPath)
    $starttime = _Timer_Init()
    GUISetState(@SW_HIDE, $hGui)
    GUICtrlSetState($cStarten, $GUI_DISABLE)
    $sProtokoll = @ScriptDir & "\Protokoll_" & @MDAY & "." & @MON & "." & @YEAR & "_" & @HOUR & "-" & @MIN & ".log"
    FileWrite($sProtokoll, "=======================================================" & @CRLF)
    FileWrite($sProtokoll, "=======================================================" & @CRLF)
    FileWrite($sProtokoll, "=======================================================" & @CRLF)
    $aVersion = _Word_VersionInfo()
    FileWrite($sProtokoll, "Office Version: " & $aVersion[0] & $aVersion[1] & $aVersion[2] & @CRLF)
    FileWrite($sProtokoll, "=======================================================" & @CRLF)
    $oWordApp = _WordCreate("", 0, 0)
    For $iPaths = 0 To UBound($aPaths) - 1
    FileWrite($sProtokoll, "-------------------------------------------------------" & @CRLF)
    FileWrite($sProtokoll, "Pfad: " & $aPaths[$iPaths] & @CRLF)
    FileWrite($sProtokoll, "-------------------------------------------------------" & @CRLF)
    For $iFormat = 0 To UBound($aDocFormate) - 1
    FileWrite($sProtokoll, "=======================================================" & @CRLF)
    $aDateien = _FileListToArray($aPaths[$iPaths], $aDocFormate[$iFormat], 1)
    If UBound($aDateien) = 0 Then
    FileWrite($sProtokoll, "=======================================================" & @CRLF)
    FileWrite($sProtokoll, "Keine " & $aDocFormate[$iFormat] & " Dokumente gefunden" & @CRLF)
    Else
    ProgressOn($aDocFormate[$iFormat], "", "0 von " & $aDateien[0], Default, 0, 1)
    For $i = 1 To $aDateien[0]
    If StringInStr(FileGetAttrib($aPaths[$iPaths] & $aDateien[$i]),"T") = 0 Then
    ConsoleWrite($aPaths[$iPaths] & $aDateien[$i] & @CRLF)
    FileSetAttrib($aPaths[$iPaths] & $aDateien[$i],"-R")
    ProgressSet($i * 100 / $aDateien[0], $i & " von " & $aDateien[0], $aDateien[$i])
    FileWrite($sProtokoll, "=======================================================" & @CRLF)
    FileWrite($sProtokoll, "Dokument: " & $aDateien[$i] & @CRLF)
    $oDoc = _WordDocOpen($oWordApp, $aPaths[$iPaths] & $aDateien[$i])
    If @error = 1 Then
    FileWrite($sProtokoll, "Datei konnte nicht geöffnet werden" & @CRLF)
    Else
    FileWrite($sProtokoll, "Alte Vorlage: " & _WordDocPropertyGet($oDoc, 6) & @CRLF)
    $oDoc.AttachedTemplate = ""
    FileWrite($sProtokoll, "Neue Vorlage: " & _WordDocPropertyGet($oDoc, 6) & @CRLF)
    FileWrite($sProtokoll, "Sicherheit: " & _WordDocPropertyGet($oDoc, 17) & @CRLF)
    _WordDocSaveAs($oDoc, $aPaths[$iPaths] & $aDateien[$i])
    EndIf
    _WordDocClose($oDoc)
    EndIf
    Next

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

    FileWrite($sProtokoll, "=======================================================" & @CRLF)
    FileWrite($sProtokoll, "Anzahl " & $aDocFormate[$iFormat] & " Dateien: " & $aDateien[0] & " Dauer bisher: " & Round(_Timer_Diff($starttime) / 60000, 2) & " Minuten" & @CRLF)
    FileWrite($sProtokoll, "=======================================================" & @CRLF)
    ProgressOff()
    EndIf
    Next
    Next
    _WordQuit($oWordApp)
    GUISetState(@SW_SHOW, $hGui)
    MsgBox(0, "", "Fertig")
    GUICtrlSetState($cStarten, $GUI_ENABLE)
    ShellExecute($sProtokoll)
    Else
    MsgBox(16, "", GUICtrlRead($cPath) & @CRLF & "Pfad konnte nicht gefunden werden")
    EndIf
    EndSwitch
    WEnd
    _WordErrorHandlerDeRegister()
    _WordErrorNotify(0)
    Func _ReFileListToString($path) ;by Oscar (Autoit.de)
    Local $count, $Files
    Local $dFileList = _FileListToArray($path, '*', 2)
    $pathall &= $path & "|"
    If IsArray($dFileList) Then
    For $i = 1 To $dFileList[0]
    Local $hSearch, $sFile
    $hSearch = FileFindFirstFile($path & $dFileList[$i] & "\" & '*.*')
    If $hSearch <> -1 Then
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then
    SetError(0)
    ExitLoop
    EndIf
    If StringInStr(FileGetAttrib($path & $dFileList[$i] & "\" & $sFile), "D") <> 0 Then ContinueLoop
    $count += 1
    $Files &= $path & $dFileList[$i] & "\" & $sFile & '|'
    WEnd
    FileClose($hSearch)
    EndIf
    _ReFileListToString($path & $dFileList[$i] & '\')
    Next
    EndIf
    Return StringSplit(StringTrimRight($pathall, 1), "|", 2)
    EndFunc ;==>_ReFileListToString
    Func MyErrFunc()
    ; Wichtig: Die Fehler-Objektvariable muss $oWordErrorHandler genannt werden!
    $ErrorDescription = StringStripWS($oWordErrorHandler.description, 2)
    FileWrite($sProtokoll, "COM-Fehler: " & $ErrorDescription & @CRLF)
    SetError(1)
    Return
    EndFunc ;==>MyErrFunc

    [/autoit]
  • Setup Automatisierung

    • Mahagon
    • 27. November 2010 um 14:26

    Versuch es doch einmal auf diese Weise :)

    [autoit]

    ShellExecute(@MyDocumentsDir & "\Source\AutoRun.exe")
    _controlclick("Need for Speed","","[CLASS:BUTTON; INSTANCE:1]")

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

    Func _controlclick(Const $sTitle, Const $sText, Const $cContolID, Const $sButton = "left",Const $iClicks = 1)
    WinWait($sTitle,$sText)
    ControlClick($sTitle,$sText,$cContolID,$sButton,$iClicks)
    EndFunc

    [/autoit]

    WinWaitActive ist bei Controlclick eigentlich nicht notwendig.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™