前回、下記の記事を記載しました。
icaclsには/Tオプションがありますが、指定したフォルダ配下をすべて表示するので膨大な量になると整形するのが大変です。
そこで今回はicaclsでフォルダのACL一覧を階層指定で表示するバッチファイルです。
- 検証フォルダ階層
- 検証バッチファイル
- 1階層
- 2階層
- 3階層
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
C:\TEST │ test.txt │ ├─1 │ │ 1.txt │ │ │ └─1-1 │ └─1-1-1 │ └─1-1-1-1 ├─2 │ │ 2.txt │ │ │ └─2-1 │ └─2-1-1 │ └─2-1-1-1 └─3 │ 3.txt │ └─3-1 └─3-1-1 └─3-1-1-1 |
取り敢えずicaclsdir.batとします。
・起点となるフォルダのACL表示
・1階層から3階層まで対応
・第一引数にフォルダを指定、第二引数に階層を指定
・作業ファイルtmp.txtを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
@echo off : by rootlinks co., Ltd. 08/26/2017 set folder=%1 set depth=%2 set strDir= if not defined folder ( echo usage: icaclsdir.bat folder depth goto end ) if not defined depth ( echo usage: icaclsdir.bat folder depth goto end ) dir /s %folder% | findstr /r /c:"^ .:\\*[^\\]*\\*[^\\]*\\*[^\\]*\\*[^\\]*$" > tmp.txt for /f "tokens=1,2 delims= " %%i in (tmp.txt) do ( call :acl %%i ) goto end :acl set strDir=%1 set result= if %depth%==1 ( for /f "tokens=* usebackq" %%i in (`echo "%strDir%" ^| findstr /r /c:"^[^\\]*\\*[^\\]*\\*[^\\]*$"`) do ( set result=%%i ) if defined result ( icacls %strDir% | findstr /v /l "個のファイルが正常に処理されました" ) ) if %depth%==2 ( for /f "tokens=* usebackq" %%i in (`echo "%strDir%" ^| findstr /r /c:"^[^\\]*\\*[^\\]*\\*[^\\]*\\*[^\\]*$"`) do ( set result=%%i ) if defined result ( icacls %strDir% | findstr /v /l "個のファイルが正常に処理されました" ) ) if %depth%==3 ( for /f "tokens=* usebackq" %%i in (`echo "%strDir%" ^| findstr /r /c:"^[^\\]*\\*[^\\]*\\*[^\\]*\\*[^\\]*\\*[^\\]*$"`) do ( set result=%%i ) if defined result ( icacls %strDir% | findstr /v /l "個のファイルが正常に処理されました" ) ) :end |
1 2 3 4 5 6 7 8 9 10 11 12 |
C:\>icaclsdir.bat c:\test 1 c:\test BUILTIN\Administrators:(OI)(CI)(F) BUILTIN\Users:(OI)(CI)(RX) c:\test\1 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\2 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\3 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
C:\>icaclsdir.bat c:\test 2 c:\test BUILTIN\Administrators:(OI)(CI)(F) BUILTIN\Users:(OI)(CI)(RX) c:\test\1 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\1\1-1 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\2 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\2\2-1 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\3 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\3\3-1 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
C:\>icaclsdir.bat c:\test 3 c:\test BUILTIN\Administrators:(OI)(CI)(F) BUILTIN\Users:(OI)(CI)(RX) c:\test\1 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\1\1-1 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\1\1-1\1-1-1 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\2 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\2\2-1 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\2\2-1\2-1-1 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\3 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\3\3-1 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) c:\test\3\3-1\3-1-1 BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) |
icaclsの/Qで”1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした”が抑制できるかと思ったのですができませんでした。ヘルプに”成功のメッセージを抑制”とあるのですが、なんだろう?
あとフォルダ名に()が使用されているとエラーになります。
その他記号を使用したフォルダでもエラーが発生する可能性はあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
C:\>icacls /? ICACLS <名前> /save <ACL ファイル> [/T] [/C] [/L] [/Q] 名前が一致するすべてのファイルとフォルダーの DACL を <ACL ファイル> に 格納して、後で /restore で指定できるようにします。SACL、所有者、整合性 ラベルは保存されません。 ICACLS <ディレクトリ> [/substitute <旧 SID> <新 SID> [...]] /restore:<ACL ファ イル> [/C] [/L] [/Q] 格納されている DACL を <ディレクトリ> 内のファイルに適用します。 ICACLS <名前> /setowner <ユーザー> [/T] [/C] [/L] [/Q] すべての一致する名前の所有者を変更します。このオプションは所有権の変更を 強制しません。所有権の変更を行うには、takeown.exe ユーティリティを使用し ます。 ICACLS <名前> /findsid <SID> [/T] [/C] [/L] [/Q] <SID> が明示されている ACL を含むすべての一致する名前を検索します。 ICACLS <名前> /verify [/T] [/C] [/L] [/Q] ACL が正規の形式ではないか長さが ACE 数と一致しないすべてのファイルを 検索します。 ICACLS <名前> /reset [/T] [/C] [/L] [/Q] すべての一致するファイルについて、ACL を継承された既定の ACL と置換します。 ICACLS <名前> [/grant[:r] <SID>:perm[...]] [/deny <SID>:perm [...]] [/remove[:g|:d]] <SID>[...]] [/T] [/C] [/L] [/Q] [/setintegritylevel Level:policy[...]] /grant[:r] <SID>:perm は、指定されたユーザー アクセス権を付与します。 :r を指定すると、以前に付与されたすべての明示的なアクセス許可は新しい アクセス許可に置き換えられます。 :r を指定しない場合、新しいアクセス許可は以前に付与された明示的な アクセス許可に追加されます。 /deny <SID>:perm は、指定されたユーザー アクセス権を明示的に否定します。 指定されたアクセス許可の明示的な否定 ACE が追加され、明示的な許可内容 に含まれた同じアクセス許可は削除されます。 /remove[:[g|d]] <SID> は、ACL 内にあるすべての <SID> を削除します。 :g を指定すると、その SID に対して許可されたすべての権限を ACL から 削除します。 :d を指定すると、その SID に対して否定されたすべての権限を ACL から 削除します。 /setintegritylevel [(CI)(OI)] レベルは、すべての一致するファイルに整合性 ACE を追加します。このレベルは次の 1 つとして指定されます。 L[ow] M[edium] H[igh] 整合性 ACE の継承オプションは、レベルの前に配置でき、 ディレクトリに対してのみ適用されます。 /inheritance:e|d|r e - 継承を有効にします。 d - 継承を無効にし、ACE をコピーします。 r - 継承された ACE をすべて削除します。 注意: <SID> は数値形式またはフレンドリ名形式で指定できます。数値形式の場合は、 SID の始めに * を付けます。 /T は、<名前> で指定されたディレクトリ以下のすべての一致するファイルと ディレクトリに対してこの処理が実行されることを指定します。 /C は、どのようなファイル エラーが発生してもこの処理が続行されることを 指定します。ただしエラー メッセージは表示されます。 /L は、この処理がターゲットではなくシンボリック リンク自体に対して実行 されることを指定します。 /Q は、icacls が成功のメッセージを抑制することを指定します。 ICACLS は、ACE エントリの正規の順序を維持します: 明示的な否定内容 明示的な許可内容 継承された否定内容 継承された許可内容 perm はアクセス許可マスクであり、次の 2 種類の方法で指定できます: 単純な権限を列挙: N - アクセス権なし F - フル アクセス権 M - 変更アクセス権 RX - 読み取りと実行のアクセス権 R - 読み取り専用アクセス権 W - 書き込み専用アクセス権 D - 削除アクセス権 特定の権限をコンマ区切りでかっこ内に列挙: DE - 削除 RC - 読み取り制御 WDAC - DAC の書き込み WO - 所有者の書き込み S - 同期 AS - システム セキュリティへのアクセス MA - 無制限 GR - 一般的な読み取り GW - 一般的な書き込み GE - 一般的な実行 GA - 一般的なすべての操作 RD - データ読み取り/ディレクトリの一覧表示 WD - データ書き込み/ファイルの追加 AD - データの追加/サブディレクトリの追加 REA - 拡張属性の読み取り WEA - 拡張属性の書き込み X - 実行/スキャン DC - 子の削除 RA - 属性の読み取り WA - 属性の書き込み 継承権限はどちらの形式の前にも配置でき、ディレクトリにのみ適用され ます: (OI) - オブジェクト継承 (CI) - コンテナー継承 (IO) - 継承のみ (NP) - 継承を適用しない (I) - 親コンテナーから継承した権限 例: icacls c:\windows\* /save <ACL ファイル> /T - c:\windows より下にあるすべてのファイルとサブディレクトリの ACL を <ACL ファイル> に保存します。 icacls c:\windows\ /restore <ACL ファイル> - <ACL ファイル> 内のファイルのうち c:\windows とそのサブディレクトリ 内に存在するすべてのファイルの ACL を復元します。 icacls <ファイル> /grant Administrator:(D,WDAC) - Administrator ユーザーに、<ファイル> に対する削除および DAC 書き込み のアクセス許可を与えます。 icacls <ファイル> /grant *S-1-1-0:(D,WDAC) - SID S-1-1-0 によって定義されたユーザーに、<ファイル> に対する削除 および DAC 書き込みのアクセス許可を与えます。 |