스크립팅_권한 강제 재설정
소개
※어디까지나 개인적 비망록입니다※
VDI 환경의 증축 대응으로, 이동 유저 프로파일의 삭제가 필요했습니다.
하지만 이때 절차를 잘못하여 프로필 영역을 삭제할 수 없었습니다.
이로 인해 개인 사용자 이외의 액세스 권한이 없는 파일 폴더가 대량으로 남아 버렸습니다.
통상, 유저 프로파일에 대해서 관리자만 액세스권을 부여해 둡니다만, 이번 대응한 환경에서는 그것이 실시되고 있지 않습니다.
앞으로 자신 이외의 인간이 같은 일을 할 가능성도 있으므로, 대량의 데이터에 대해서 ACL의 재기록을 실시하는 스크립트를 만들어 두려고 했습니다.
스크립트 사양 정보
◆ 플로우 차트 다이어그램 ◆
조금 손을 뽑았습니다. . .
어디까지나 개요이므로 거친 이미지도로 진행합니다.
개요
◆명령 픽업◆
takeown 명령rem ファイル(フォルダ)の所有者をAdministratorsに変更する
takeown /F %FOLDER% /A
icacls 명령rem ファイル(フォルダ)のNTFS権限をリセットし、継承しているACEだけに変更する
icacls %FOLDER% /reset
dir 명령rem 指定フォルダ配下のフォルダ名のみ表示
dir /a-d /s /b %FOLDER%
rem 指定フォルダ配下のファイル名のみ表示
dir /a:h /s /b %FOLDER%
rem 指定フォルダ配下の隠しファイル名のみ表示
dir /ad /s /b %FOLDER%
실제로 만들어 보았다.
main.bat@echo off
setlocal EnableDelayedExpansion
rem ------------------------------------------
rem ファイル一括削除スクリプト
rem (所有者,権限リセットスクリプト)
rem ------------------------------------------
rem ------------------------------------------
rem YYYY.MM.DD 新規作成
rem ------------------------------------------
rem ログ出力
set TODAY=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
set LOG=H:\tmp\%TODAY%_LOG.log
rem rootディレクトリ
set ROOT=H:\Profile\test01.V6
rem 一時ファイル作成
set TMP_FILE=H:\tmp\tmp_file.txt
set TMP_HIDE=H:\tmp\tmp_hide.txt
set TMP_DIR=H:\tmp\tmp_dir.txt
set CUR_DIR=H:\tmp\cur_dir.txt
rem rootディレクトリの所有権,権限リセット
takeown /F %ROOT% /A >> %LOG% 2>&1
icacls %ROOT% /reset >> %LOG% 2>&1
rem ファイル,フォルダ,隠しファイル情報の一覧取得
dir /a-d /s /b %ROOT% > %TMP_FILE%
dir /a:h /s /b %ROOT% > %TMP_HIDE%
dir /ad /s /b %ROOT% > %TMP_DIR%
rem ファイル,フォルダの権限リセット(ループ処理)
:ACLLOOP
set TMP1=0
set TMP2=0
set TMP3=0
set TMP4=0
set CNT=0
type nul > %CUR_DIR%
rem カレントディレクトリ行数のカウント
for /f "delims=" %%a in ( %TMP_DIR% ) do (
set /a CNT=CNT+1
)
rem ファイル権限リセット
for /f "delims=" %%a in ( %TMP_FILE% ) do (
set TMP1=%%a
takeown /F "!TMP1!" /A >> %LOG% 2>&1
icacls "!TMP1!" /reset >> %LOG% 2>&1
)
rem 隠しファイル権限リセット
for /f "delims=" %%a in ( %TMP_HIDE% ) do (
set TMP2=%%a
takeown /F "!TMP2!" /A >> %LOG% 2>&1
icacls "!TMP2!" /reset >> %LOG% 2>&1
)
rem フォルダ権限リセット
for /f "delims=" %%a in ( %TMP_DIR% ) do (
set TMP3=%%a
takeown /F "!TMP3!" /A >> %LOG% 2>&1
icacls "!TMP3!" /reset /t>> %LOG% 2>&1
)
rem 一時ファイルの初期化
type %TMP_DIR% > %CUR_DIR%
type nul > %TMP_FILE%
type nul > %TMP_HIDE%
type nul > %TMP_DIR%
if %CNT% neq 0 (
for /f "delims=" %%a in ( %CUR_DIR% ) do (
set TMP4=%%a
dir /a-d /s /b !TMP4! >> %TMP_FILE%
dir /a:h /s /b !TMP4! >> %TMP_HIDE%
dir /ad /s /b !TMP4! >> %TMP_DIR%
)
goto ACLLOOP
)
rem 警告メッセージ
echo ----- WARNING -----
echo ----- WARNING -----
echo ----- WARNING -----
rem 領域の削除
rd /s /q %ROOT%
del %TMP_FILE%
del %TMP_HIDE%
del %TMP_DIR%
del %CUR_DIR%
endlocal
결론
반성점으로
・아래의 계층에 숨어가는 사양을 이미지했지만, 숨겨진 파일 설정에 대해서 잘 기능하지 않았다
→ 스크립트를 재실행하면 최하층까지 리셋이 적용되므로 일단 OK
・임시 파일, 숨겨진 파일, 폴더의 픽업이 그다지 좋지 않다
→센스와 경험의 문제이므로 앞으로 노력하겠습니다
Reference
이 문제에 관하여(스크립팅_권한 강제 재설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ryoma0218/items/36bc927c9517c886defa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
◆ 플로우 차트 다이어그램 ◆
조금 손을 뽑았습니다. . .
어디까지나 개요이므로 거친 이미지도로 진행합니다.
개요
◆명령 픽업◆
takeown 명령
rem ファイル(フォルダ)の所有者をAdministratorsに変更する
takeown /F %FOLDER% /A
icacls 명령
rem ファイル(フォルダ)のNTFS権限をリセットし、継承しているACEだけに変更する
icacls %FOLDER% /reset
dir 명령
rem 指定フォルダ配下のフォルダ名のみ表示
dir /a-d /s /b %FOLDER%
rem 指定フォルダ配下のファイル名のみ表示
dir /a:h /s /b %FOLDER%
rem 指定フォルダ配下の隠しファイル名のみ表示
dir /ad /s /b %FOLDER%
실제로 만들어 보았다.
main.bat@echo off
setlocal EnableDelayedExpansion
rem ------------------------------------------
rem ファイル一括削除スクリプト
rem (所有者,権限リセットスクリプト)
rem ------------------------------------------
rem ------------------------------------------
rem YYYY.MM.DD 新規作成
rem ------------------------------------------
rem ログ出力
set TODAY=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
set LOG=H:\tmp\%TODAY%_LOG.log
rem rootディレクトリ
set ROOT=H:\Profile\test01.V6
rem 一時ファイル作成
set TMP_FILE=H:\tmp\tmp_file.txt
set TMP_HIDE=H:\tmp\tmp_hide.txt
set TMP_DIR=H:\tmp\tmp_dir.txt
set CUR_DIR=H:\tmp\cur_dir.txt
rem rootディレクトリの所有権,権限リセット
takeown /F %ROOT% /A >> %LOG% 2>&1
icacls %ROOT% /reset >> %LOG% 2>&1
rem ファイル,フォルダ,隠しファイル情報の一覧取得
dir /a-d /s /b %ROOT% > %TMP_FILE%
dir /a:h /s /b %ROOT% > %TMP_HIDE%
dir /ad /s /b %ROOT% > %TMP_DIR%
rem ファイル,フォルダの権限リセット(ループ処理)
:ACLLOOP
set TMP1=0
set TMP2=0
set TMP3=0
set TMP4=0
set CNT=0
type nul > %CUR_DIR%
rem カレントディレクトリ行数のカウント
for /f "delims=" %%a in ( %TMP_DIR% ) do (
set /a CNT=CNT+1
)
rem ファイル権限リセット
for /f "delims=" %%a in ( %TMP_FILE% ) do (
set TMP1=%%a
takeown /F "!TMP1!" /A >> %LOG% 2>&1
icacls "!TMP1!" /reset >> %LOG% 2>&1
)
rem 隠しファイル権限リセット
for /f "delims=" %%a in ( %TMP_HIDE% ) do (
set TMP2=%%a
takeown /F "!TMP2!" /A >> %LOG% 2>&1
icacls "!TMP2!" /reset >> %LOG% 2>&1
)
rem フォルダ権限リセット
for /f "delims=" %%a in ( %TMP_DIR% ) do (
set TMP3=%%a
takeown /F "!TMP3!" /A >> %LOG% 2>&1
icacls "!TMP3!" /reset /t>> %LOG% 2>&1
)
rem 一時ファイルの初期化
type %TMP_DIR% > %CUR_DIR%
type nul > %TMP_FILE%
type nul > %TMP_HIDE%
type nul > %TMP_DIR%
if %CNT% neq 0 (
for /f "delims=" %%a in ( %CUR_DIR% ) do (
set TMP4=%%a
dir /a-d /s /b !TMP4! >> %TMP_FILE%
dir /a:h /s /b !TMP4! >> %TMP_HIDE%
dir /ad /s /b !TMP4! >> %TMP_DIR%
)
goto ACLLOOP
)
rem 警告メッセージ
echo ----- WARNING -----
echo ----- WARNING -----
echo ----- WARNING -----
rem 領域の削除
rd /s /q %ROOT%
del %TMP_FILE%
del %TMP_HIDE%
del %TMP_DIR%
del %CUR_DIR%
endlocal
결론
반성점으로
・아래의 계층에 숨어가는 사양을 이미지했지만, 숨겨진 파일 설정에 대해서 잘 기능하지 않았다
→ 스크립트를 재실행하면 최하층까지 리셋이 적용되므로 일단 OK
・임시 파일, 숨겨진 파일, 폴더의 픽업이 그다지 좋지 않다
→센스와 경험의 문제이므로 앞으로 노력하겠습니다
Reference
이 문제에 관하여(스크립팅_권한 강제 재설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ryoma0218/items/36bc927c9517c886defa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@echo off
setlocal EnableDelayedExpansion
rem ------------------------------------------
rem ファイル一括削除スクリプト
rem (所有者,権限リセットスクリプト)
rem ------------------------------------------
rem ------------------------------------------
rem YYYY.MM.DD 新規作成
rem ------------------------------------------
rem ログ出力
set TODAY=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
set LOG=H:\tmp\%TODAY%_LOG.log
rem rootディレクトリ
set ROOT=H:\Profile\test01.V6
rem 一時ファイル作成
set TMP_FILE=H:\tmp\tmp_file.txt
set TMP_HIDE=H:\tmp\tmp_hide.txt
set TMP_DIR=H:\tmp\tmp_dir.txt
set CUR_DIR=H:\tmp\cur_dir.txt
rem rootディレクトリの所有権,権限リセット
takeown /F %ROOT% /A >> %LOG% 2>&1
icacls %ROOT% /reset >> %LOG% 2>&1
rem ファイル,フォルダ,隠しファイル情報の一覧取得
dir /a-d /s /b %ROOT% > %TMP_FILE%
dir /a:h /s /b %ROOT% > %TMP_HIDE%
dir /ad /s /b %ROOT% > %TMP_DIR%
rem ファイル,フォルダの権限リセット(ループ処理)
:ACLLOOP
set TMP1=0
set TMP2=0
set TMP3=0
set TMP4=0
set CNT=0
type nul > %CUR_DIR%
rem カレントディレクトリ行数のカウント
for /f "delims=" %%a in ( %TMP_DIR% ) do (
set /a CNT=CNT+1
)
rem ファイル権限リセット
for /f "delims=" %%a in ( %TMP_FILE% ) do (
set TMP1=%%a
takeown /F "!TMP1!" /A >> %LOG% 2>&1
icacls "!TMP1!" /reset >> %LOG% 2>&1
)
rem 隠しファイル権限リセット
for /f "delims=" %%a in ( %TMP_HIDE% ) do (
set TMP2=%%a
takeown /F "!TMP2!" /A >> %LOG% 2>&1
icacls "!TMP2!" /reset >> %LOG% 2>&1
)
rem フォルダ権限リセット
for /f "delims=" %%a in ( %TMP_DIR% ) do (
set TMP3=%%a
takeown /F "!TMP3!" /A >> %LOG% 2>&1
icacls "!TMP3!" /reset /t>> %LOG% 2>&1
)
rem 一時ファイルの初期化
type %TMP_DIR% > %CUR_DIR%
type nul > %TMP_FILE%
type nul > %TMP_HIDE%
type nul > %TMP_DIR%
if %CNT% neq 0 (
for /f "delims=" %%a in ( %CUR_DIR% ) do (
set TMP4=%%a
dir /a-d /s /b !TMP4! >> %TMP_FILE%
dir /a:h /s /b !TMP4! >> %TMP_HIDE%
dir /ad /s /b !TMP4! >> %TMP_DIR%
)
goto ACLLOOP
)
rem 警告メッセージ
echo ----- WARNING -----
echo ----- WARNING -----
echo ----- WARNING -----
rem 領域の削除
rd /s /q %ROOT%
del %TMP_FILE%
del %TMP_HIDE%
del %TMP_DIR%
del %CUR_DIR%
endlocal
반성점으로
・아래의 계층에 숨어가는 사양을 이미지했지만, 숨겨진 파일 설정에 대해서 잘 기능하지 않았다
→ 스크립트를 재실행하면 최하층까지 리셋이 적용되므로 일단 OK
・임시 파일, 숨겨진 파일, 폴더의 픽업이 그다지 좋지 않다
→센스와 경험의 문제이므로 앞으로 노력하겠습니다
Reference
이 문제에 관하여(스크립팅_권한 강제 재설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryoma0218/items/36bc927c9517c886defa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)