hallo zusammen,
weiß jemand wie man sich die ACLs von einem Ordner oder Datei in ein Array speichern kann?
Mein Ziel alle Ornder durchzugehen und zu schauen, ob verweißte SIDs zurückgebieben sind....
Danke schonmal!
hallo zusammen,
weiß jemand wie man sich die ACLs von einem Ordner oder Datei in ein Array speichern kann?
Mein Ziel alle Ornder durchzugehen und zu schauen, ob verweißte SIDs zurückgebieben sind....
Danke schonmal!
Hallo GerhardSchr
Ich weiß nicht, wäre das etwas für dich?
#include <Array.au3>
Local $sPath = @DesktopDir
Local $sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1))
ConsoleWrite($sFile & @CRLF)
Local $sPSScript = "Get-Acl " & $sPath
Local $iPid = Run("PowerShell.exe " & $sPSScript, @ScriptDir, @SW_HIDE, 2)
ProcessWaitClose($iPid)
Local $sRet = StdoutRead($iPid)
ConsoleWrite($sRet & @CRLF)
Local $aArray = StringSplit(StringRegExp($sRet, "(?s)Path Owner Access(.*?)" & $sFile, 3)[0], @CRLF, 1)
_ArrayDisplay($aArray)
Alles anzeigen
Path, Owner und Access sind hier nicht weiter aufgedröselt. Aber ich kann das nicht elegant mit StringRegExp lösen und will mich hier nicht völlig entblößen.
ah ok über "Drittanbitersoftware" wie z.B. Powershell...
die Idee hatte ich auch schon....
dachte es gibt ein UDF für Autoit....
Ich habe noch das hier gefunden: https://www.autoitscript.com/forum/topic/13…ermissions-udf/
allerdings weiß ich nicht wie ich es benutzen soll...
PowerShell mit AutoIt:
Global $sPath = "C:\DEIN\VERZEICHNIS\"
Global $sInclude = '' ; z.B. '*.au3', leer lassen für alles
If $sInclude <> '' Then $sInclude = StringFormat(' -include "%s" ', $sInclude)
Global $sCmd = 'gci -Path ' & StringFormat('"%s"', StringReplace($sPath, ' ', '` ')) & $sInclude & _
' -r | % {Get-Acl $_.FullName|select path, Owner, Group, Sddl} | fl'
Global $sRet = _PowerShell_Run($sCmd, 1)
ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & " var: $sRet --> " & $sRet & @LF)
Func _PowerShell_Run($_sCmd, $_iOutput=0)
Local Const $sKey32 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
Local Const $sKey64 = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
Local Static $sKey = @CPUArch = 'X64' ? $sKey64 : $sKey32
Local Static $sPSexe = RegRead($sKey, 'Path')
Local $sPathTMP = StringFormat('%s\__%s%s%s%s%s%s%s.ps1', @TempDir, @YEAR, @MON, @MDAY, @HOUR, @MIN, @SEC, @MSEC)
Local $fH = FileOpen($sPathTMP, 2+8+128)
FileWrite($fH, $_sCmd)
FileClose($fH)
Local $sRun = StringFormat('%s -ExecutionPolicy UnRestricted -File %s', $sPSexe, $sPathTMP)
Local $sOut = '', $iPID = Run($sRun, @ScriptDir, @SW_HIDE, 0x2)
If $_iOutput = 1 Then
Do
$sOut &= StdoutRead($iPID)
Until @error
StdioClose($iPID)
Else
While ProcessExists($iPID)
Sleep(350)
WEnd
EndIf
FileDelete($sPathTMP)
Return ($_iOutput = 1 ? $sOut : 1)
EndFunc
Alles anzeigen
Ganz ehrlich GerhardSchr Wenn du die Idee auch hattest, aber es anders haben möchtest, dann schreib das doch bitte direkt im Eingangspost..
die idee hatte ich vorhher, dachte es gibt direkt was von autoit
Ich denke nicht, dass es mit nativen AutoIt Befehlen geht. Alternativ kannst du auch das CMD Tool CACLS.exe / ICACLS.exe benutzen.