2017-02-10 2 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

Смежные вопросы