電子書籍の厳選無料作品が豊富!

こんにちは、
Windows2000serverを管理しています。
200ぐらいのフォルダとそのフォルダへのアクセス権を設定しないといけないのですが、簡単にできるソフトなどないでしょうか?
例えば、EXCELでフォルダ名の列、アクセス権を設定するユーザの列を書いておいてそれを読み込んで作ってくれるなど。

何かお分かりの方がいましたらお願いします。

A 回答 (6件)

色々実験してみましたら,普通にCACLSで出来ました。



◎単にEveryoneを削除したい(チェックはついたまま)
→#5の方法もしくは,バッチの:MD_AND_CACLSを以下に変更。

---ここから---
:MD_AND_CACLS
For /F "usebackq eol=; tokens=1 delims=," %%i in (acl.txt) DO md %%i
For /F "usebackq eol=; tokens=1,2 delims=," %%i in (acl.txt) DO cacls %%i /e /g %%j
REM Everyoneのアクセス権を削除
For /F "usebackq eol=; tokens=1 delims=," %%i in (acl.txt) DO cacls %%i /e /r everyone
---ここまで---

◎Everyoneを削除して,チェックも外したい
→バッチの:MD_AND_CACLSを以下に変更。

---ここから---
:MD_AND_CACLS
For /F "usebackq eol=; tokens=1 delims=," %%i in (acl.txt) DO md %%i
REM Everyoneのアクセス権を削除
For /F "usebackq eol=; tokens=1 delims=," %%i in (acl.txt) DO cacls %%i /e /r everyone
For /F "usebackq eol=; tokens=1,2 delims=," %%i in (acl.txt) DO cacls %%i /e /g %%j
---ここまで---

上記は,
ディレクトリ作成→アクセス権設定→everyone削除
ディレクトリ作成→evryone削除→アクセス権設定
という違いでしかありません。

ただし後者においても,新たに設定したアクセス権が
一階層上のフォルダのアクセス権を完全に含む場合,
チェックがつきます。(多分そういう仕様)

例)
DIR_1…Use1:F,User2:C,Group1:F
|
|--DIR_2…Use1:F,User2:C,Group1:F,User3:F
|  |
|  |----DIR_2.1…Use1:F,User2:C,Group1:F
|
|--DIR_2…Use1:F,C,Group1:F,User3:F

この場合DIR_2にチェックがつく。
DIR2.1は一階層上のDIR_2のアクセス権を完全に含まない
(User3がない)のでチェックはつかない。
    • good
    • 0
この回答へのお礼

返信が遅れました。大変すみません。
バッチファイルの書き方など大変参考になりました。

本当にありがとうございます。

お礼日時:2004/11/03 16:14

単にEveryoneフルコントロールを削除するだけであれば,


ルート(D:)上でEveryoneのアクセス権を消すと,
下位のフォルダから消えると思います。
(念のため,事前にD:にAdministratorをフルコントロールで
入れておいたほうがいいかもしれませんが)

ただ,
「継承可能なアクセス許可を親からこのオブジェクトに継承できるようにする。」
のチェックを外す方法となると……CACLSでは無理ですので
別の手を考えないといけませんね。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。非常に参考になりました。

お礼日時:2004/08/28 17:36

ああああ,acls.txtに余計な"が。



"c:\test_dir1_depth1",users:w guest:r administrator:f"

"c:\test_dir1_depth1",users:w guest:r administrator:f

この回答への補足

こんにちは、
d:にフォルダを作ろうとしています。
d:everyone フルコントロール

フォルダのセキュリティで
「継承可能なアクセス許可を親からこのオブジェクトに継承できるようにする。」にチェックが入っているため、batを行うと、everyoneフルコントロールが残ってしまいます。
BATファイルにこれを削除するように書き換えたいのですが、どうすればいいのでしょうか?
よろしくお願いします。

補足日時:2004/08/27 12:25
    • good
    • 0
この回答へのお礼

何度も送っていただいて恐縮です。
ありがとうございます。

お礼日時:2004/08/27 11:52

む。

しまった。
これではユーザ名/グループ名に空白があるとダメだ。

acls.txtとバッチファイルを以下に差し替えて下さい。

---acls.txtここから---
"c:\test_dir1_depth1",users:w guest:r administrator:f"
"c:\test_dir1_depth1\depth2",users:w administrator:f
"c:\test_dir2","creator owner:f"
---acls.txtここまで---
◎変更点
ユーザ名に空白があるばあいは""で括る。
めんどくさければ全て""で括ってもOK。

---バッチファイルここから---
@echo フォルダ作成とACLの設定を行います。
@echo よろしいですか?(y/n) ※yキー以外で実行を中止。
@echo off

Set /p ret=

If %ret%==y goto MD_AND_CACLS
goto END

:MD_AND_CACLS
For /F "usebackq eol=; tokens=1 delims=," %%i in (acl.txt) DO md %%i
For /F "usebackq eol=; tokens=1,2 delims=," %%i in (acl.txt) DO cacls %%i /e /g %%j

:END
---バッチファイルここまで--
◎変更点
For に usebackq を追加。
(""で括られた値を正しく処理するため)
    • good
    • 0
この回答へのお礼

返信ありがとうございます。非常に参考になりました。

お礼日時:2004/11/03 16:10

#1です。



*******考慮しなければいけない点*********
その1
バッチファイルは下位のフォルダにACLを継承しないため,
馬鹿正直にacl.txtでアクセス権を列挙しなければいけません。
継承させたいときは cacls %%i /e /g %%j を cacls %%i /e /t /g %%j
としてやればいいのですが,その場合は acl.txtを
上位のフォルダ→下位のフォルダとなるように並べかえる
必要があるかもしれません。(未検証)

その2
アクセス権は追加される形になります。(置き換えではない)
このあたりはコマンドプロンプトから cacls /? で
/e についての記述を読んで下さい。
置き換えたい場合は /e を外せばよいのですが,その際は
全てのフォルダに Administrator:f を与えないと
ダメかもしれません。(未検証)

その3
caclsコマンドは,読みとり・書き込み・変更・フルコントロール
の4種類しか設定できません。
ファイルの作成・編集はOKだけどフォルダはNGなんていう
細かい制御をしたいときは
http://members.jcom.home.ne.jp/unimaru/software/ …
の UniCacls.exe を使うとよいかもしれません。
その場合は以下が必要となります。
・UniCacls.exeをバッチファイルと同じフォルダに保存
・acls.txt のアクセス権の記述をUniCacls用に変更
・バッチファイルの DO cacls を DO unicacls.exe に変更

なお UniCacls の書式はコマンドプロンプトから
UniCaclsのあるフォルダに移動して, unicacls と
入力すると参照できます。

バッチファイルで何をしているかは,
For /?
をデスクトップが透けて見えるまで読み倒して下さい。

参考URL
http://www.monyo.com/technical/windows/20.html
http://www.monyo.com/technical/windows/11.html
http://members.jcom.home.ne.jp/unimaru/software/ …
    • good
    • 0
この回答へのお礼

返信ありがとうございます。非常に参考になりました。

お礼日時:2004/11/03 16:09

コマンドでcaclsってのがあります。



色々考慮しなければいけない点はさておき,とりあえず
一番簡単な例として。

1.フォルダのパスとユーザ名とアクセス権のリストを作り
 acl.txt として保存する。
◎書式: フォルダのフルパス,ユーザ名:アクセス権
ユーザを複数指定する場合は,半角スペースを開けて列挙。
(グループ名とユーザ名は特に意識しなくもいいみたい)
アクセス権の書式は caclsコマンドを参照。
---サンプルここから---
"c:\test_dir1_depth1",users:w guest:r administrator:f
"c:\test_dir1_depth1\depth2",users:w administrator:f
"c:\test_dir2",y_noda:f
---サンプルここまで---

2.acl.txtと同じフォルダに以下のバッチファイルを作成。
---バッチファイルここから---
@echo フォルダ作成とACLの設定を行います。
@echo よろしいですか?(y/n) ※yキー以外で実行を中止。
@echo off

Set /p ret=

If %ret%==y goto MD_AND_CACLS
goto END

:MD_AND_CACLS
For /F "eol=; tokens=1 delims=," %%i in (acl.txt) DO md %%i
For /F "eol=; tokens=1,2 delims=," %%i in (acl.txt) DO cacls %%i /e /g %%j

:END

---バッチファイルここまで---

バッチを実行するとacl.txtで指定したフォルダを作成し
ACLを設定します。

その他の説明が長くなりそうなんで一旦ここで切ります。
    • good
    • 0
この回答へのお礼

返信が遅れました。アドバイスありがとうございます。

お礼日時:2004/08/27 11:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報