2017-02-10 145 views
0

我在PowerShell中监视文件夹的设置来创建一个运行以下批处理文件校验和行书:“权限被拒绝”的文件

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

,我找到了我将文件移动到文件夹中运行不错,但如果我将文件复制到文件夹中,则会在某些导致空白校验和的文件中获得“权限被拒绝”。它似乎没有一致,但我可以毫无问题地从文件夹手动运行批处理脚本。我以管理员身份登录系统(Win7)。有任何想法吗?

编辑:这是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