[BATCH] Change Owner and Modify DACL

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod subdivider 28. 9. 2017 11:36

Zdravim,
napisal som si skript na preberanie vlastnictva a modifikaciu pristupovych prav suboru alebo zlozky aj s celym jej podstromom.

Kód: Vybrat vše
@ECHO OFF

IF "%~1"=="" GOTO Syntax
IF "%~2"=="" GOTO Syntax

:: Keep variables local
SETLOCAL EnableDelayedExpansion

:: Determine/Check File System Object Type/Existence
SET "_FSObjType="

FOR /F "tokens=1,2 delims=d" %%A IN ("-%~a1") DO IF "%%B" NEQ "" (
   SET "_FSObjType=Folder"
) ELSE IF "%%A" NEQ "-" (
   SET "_FSObjType=File"
)

:: Check UserName Existence
SET "_UserExist=no"

FOR /F "tokens=1* delims=" %%A IN ('net user "%~2"') DO (
   IF "%%A" EQU "The command completed successfully." SET "_UserExist=yes"
)

IF "%_FSObjType%"=="" GOTO FSObjNotFound
IF "%_UserExist%"=="no" GOTO UserNotFound

IF "%_FSObjType%"=="Folder" (
   ECHO "Directory"
   ICACLS "%~1" /setowner "%~2" /C /T
   ICACLS "%~1\*" /reset /C /T
   ICACLS "%~1" /inheritance:r /grant:r "Administrators:(OI)(CI)F"
   ICACLS "%~1" /grant:r "SYSTEM:(OI)(CI)F" /C /T /grant:r "Administrators:(OI)(CI)F" /C /T /grant:r "Authenticated Users:(OI)(CI)M" /C /T /grant:r "Users:(OI)(CI)RX" /C /T
) ELSE (
   ECHO "NonDirectory"
   ICACLS "%~1" /setowner "%~2" /C
   ICACLS "%~1" /reset /C
   ICACLS "%~1" /grant:r SYSTEM:F /grant:r Administrators:F /grant:r "Authenticated Users:M" /grant:r Users:RX
)
GOTO Done

:FSObjNotFound
ECHO.
ECHO Specified File System Object %~1 was not found^^!
ECHO Please verify it and correct accordingly.
ECHO.
IF "%_UserExist%"=="yes" GOTO Done

:UserNotFound
ECHO.
ECHO Specified User %~2 was not found^^!
ECHO Please verify it and correct accordingly.
ECHO.

:Done
ENDLOCAL
GOTO :EOF

:Syntax
ECHO.
ECHO ChangeOwnerModifyDACL.cmd,  Version 1.0 for Windows NT
ECHO Change Owner of and Modify DACL for specified File or Folder.
ECHO.
ECHO Notes:  File or Folder must be specified as a first parameter of the script.
ECHO         User Name of the new Owner must be specified as a second parameter of the script.
ECHO         Specified path can be absolute or relative (to script location).
ECHO.
ECHO Written by Subdivider


Fungovat to funguje, ale u podadresarov su duplicitne permissions, teda ostali tam aj stare... Viac ukaze obrazok...
Permissions.png


Dalsim problemom samozrejme je, ze v takejto forme bude skript asi fungovat iba pre anglicku verziu windows, to ale teraz vobec neriesim...

Moze niekto skuseny poradit, co robim v tom skripte zle? Vopred vdaka za konstruktivne komentare!
subdivider
Junior

Odeslat příspěvekod Just_jo 28. 9. 2017 11:45

Mám dojem, že toto šlo napsat na cca 2 - 3 řádky ( možná je to jen jeden příkaz ) - potřeboval jsem nastavit si práva a vlastnictví pro externí hdd s jiným systémem.

Ale tobě asi nejde jen o triviální nastavení přístupu k datům co?
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod subdivider 28. 9. 2017 11:49

Mas na mysli prikaz takeown?
subdivider
Junior

Odeslat příspěvekod Just_jo 28. 9. 2017 11:52

Nejspíš ano. Víceméně se kolem píše jen o "takeown" a "icacls"

-- 28. 9. 2017 12:54 --

Kdybych nemusel teď do práce, tak na to mrknu.
Můžeš tam zkusit přidat "/reset" pro opravu
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod JanFiala 29. 9. 2017 08:38

Problém je v tom, že jsi neodpojil složku/soubor od děditelných práv. Proto se ti tam zobrazují i práva zděděná od nadřazeného objektu. Ty chceš natvrdo nahradit práva - zazázat dědění, při tom nepřenášet zděděná práva a nahradit je těmi, které si určíš.
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků