web-dev-qa-db-ja.com

スケジュールされたタスクとしてicaclsを使用してバッチを実行する

ドコメンタムストレージのすべてのツリーのアクセス許可を修正するバッチファイルです。 UNC操作ディレクトリにあります。

goSetPriv.bat

@echo off   
set /a _cnt=0
set _docdir="UNC_DCTM_PATH_TO_SCAN\*"
if (%1) NEQ () set _docdir="%*"
set _start=%date:~4,10% %time%

pushd UNC_OF_OP_DIR
FOR /D %%I in (%_docdir%) DO (
    icacls %%I /grant:r ssis_admin:R /inheritance:e > nul
    call :counter
)
......

counter:
......

スケジュールされたタスクとしてgoSetPrivを実行すると(最高の特権、Windows 7 Server 2008R2)プログラム:\ O:\ goSetPriv.bat

サブディレクトリやその中のファイルのパーミッションを変更することなく、すべての親ディレクトリに対してすばやく実行されます。 cmdから直接(つまり、O:> goSetPriv.bat)バッチを実行すると、すべての親ディレクトリ内のすべてのサブフォルダーとファイルがゆっくりと変更されます。

問題はどこだ ?

ありがとうございました

2
Roey Peretz

解決しました

pushd UNC_OF_OP_DIR
FOR /D %%I in (%_docdir%) DO (
    icacls %%I /grant:r ssis_admin:R /inheritance:e /T
)

何らかの理由で、このバッチを手動で実行すると、すべてのファイルとサブフォルダーがトラバースされます(ファイルのプロンプトは表示されません)。スケジュールされたタスクとして実行する場合は、トラバーススイッチを暗黙的に追加する必要があります(プロンプトファイルを実行します)

0
Roey Peretz