2017-02-10 7 views
0

上でスクリプトを実行している「アクセス許可が拒否されました」:私はそれを見つけた私は次のバッチファイルを実行しているチェックサムを作成するために、PowerShellで監視フォルダを設定しているファイル

pushd \\server\folder 
for %%a in (*.wav) do if not exist "%%a.md5" md5sum "%%a" >> "%%a.md5" 
popd 

私はそれは大丈夫実行したフォルダにファイルを移動するが、ファイルをフォルダにコピーすると、ファイルの一部で「許可が拒否されました」という結果が得られ、その結果、チェックサムが空白になります。それは一貫しているようには見えず、問題なくフォルダから手動でバッチスクリプトを実行できます。私は管理者(Win7)としてシステムにいます。何か案は?

EDIT:これは、PowerShellスクリプトです:

$folder = '\\server\folder' 
$filter = '*.wav' 

$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'} 

Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 
$name = $Event.SourceEventArgs.Name 
$changeType = $Event.SourceEventArgs.ChangeType 
$timeStamp = $Event.TimeGenerated 
Write-Host "The file '$name' was $changeType at $timeStamp" -fore green 
write-host "test" 
Invoke-Item '\\server\folder\checksum.bat' 
+0

あなたのローカルマシンの管理者としてスクリプトを実行する、またはドメインのためにしていますか? –

+1

FileSystemWatcher(私はそれを使用すると仮定します)ファイルコピーが完了する前にイベントが複数回シンクすることがあるので、「md5sum」は使用中のファイルを読み込めます。同様に、AV製品は新しいファイルをロックします。あなたのオプションは、将来のある時点で処理するために新しいファイルをキューに入れる再試行戦略またはTTLシステムを実装することです。 –

+0

私はネットワーク管理者ではないので、おそらくローカルマシンです。私は、サーバーへの完全な読み取り/書き込みアクセスを持っている必要があります... – Tom

答えて

1

あなたはあなたがドライブ上のファイルへのフルアクセスを持っていないことを特定することはできません、ドメイン管理者ではありませんので。

あなたのPowerShellスクリプトに必要な修正(残念ながら、そこには役に立たない)に加えて、あなたはファイルへの完全なアクセス権を与えるべきです。

は、バッチファイルでこれを試してみてください:

PUSHD \\server\folder 
FOR %%F IN (*.wav) DO @TAKEOWN /F "%%F" 
FOR %%F IN (*.wav) DO @CACLS "%%F" /E /P <YourUsernameHere>:F 
FOR %%F IN (*.wav) DO @IF NOT EXIST "%%F.md5" md5sum "%%F" >> "%%F.md5" 
POPD 
+0

助けてくれてありがとう。私はまだ同じ問題を抱えていますが、あなたが提案したようにドメイン管理者かもしれません。 – Tom

関連する問題