Das mit den Benutzern ist echt nett gemacht
Da mach ich doch glatt Gebrauch von
Danke
Das mit den Benutzern ist echt nett gemacht
Da mach ich doch glatt Gebrauch von
Danke
Ah okay...Danke
Naja kurz und Bündig: ich will Berechtigungen inkl Benutzer auflisten
#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"
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)
_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)
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 & '"')
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
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
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
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
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
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 _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)
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
EndFunc ;==>_GUICtrlProgressSetMarquee
[/autoit]
PS: Script ist noch lang nicht fertig
Hi,
Habe ein seltsames Problem
Wenn ich versuche mit
_AD_Open()
$qased = _AD_GetGroupMembers("CN=Domänen-Benutzer,CN=Users,DC=DOMAINXY,DC=de")
_ArrayDisplay($qased)
_AD_Close()
bzw. mit
_AD_Open()
$qased = _AD_GetGroupMembers("Domänen-Benutzer")
_ArrayDisplay($qased)
_AD_Close()
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)
Habe schon mal was ähnliches gebastelt
#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/
$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)
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
Aber hier nochmal dein Script verbessert ;o
#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"
$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
Die Frage ist was du verbinden willst. 2 Netzwerke? 1 Pc und ein Netzwerk? oder 2 PCs?
Danke für die Antworten (habe schon gedacht der Thread wäre gestorben :D)
Bin aber auch schon einen erheblichen Schritt weiter
#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
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
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
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
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
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
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
Ein bischen Eigenleistung solltest du schon zeigen
Programmieranfragen kannst du hier stellen https://autoit.de/index.php?page=Board&boardID=51
Aber du hast doch schon eigentlich den richtigen Thread erwischt.
Lesen und daraus lernen
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.
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 = ""
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
Danke schonmal im Voraus
https://autoit.de/index.php?page…5253#post185253
Das sollte denke ich das sein was du suchst
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
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)
Warum eigentlich nicht die Standard UDF?
[autoit]$sServer = "FTPSERVER"
$sUsername = "FTPUSER"
$sPass = "FTPPASSWORT"
$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)
#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)
$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 ###
_IENavigate($IE, $home)
GUICtrlSetData($GUI_url, $home)
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
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
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
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:
#RequireAdmin
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: Daniel Jacobs
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)
#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)
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
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.
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).
#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
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
Versuch es doch einmal auf diese Weise
[autoit]ShellExecute(@MyDocumentsDir & "\Source\AutoRun.exe")
_controlclick("Need for Speed","","[CLASS:BUTTON; INSTANCE:1]")
Func _controlclick(Const $sTitle, Const $sText, Const $cContolID, Const $sButton = "left",Const $iClicks = 1)
WinWait($sTitle,$sText)
ControlClick($sTitle,$sText,$cContolID,$sButton,$iClicks)
EndFunc
WinWaitActive ist bei Controlclick eigentlich nicht notwendig.