2013-12-09 4 views
1

Я пытаюсь написать сценарий PowerShell, который минимизирует каталог, полный файлов .js на веб-сервере. Файлы принадлежат мне; Я создал его; Я вошел в систему как я. Я могу открывать и сохранять файлы в текстовом редакторе или через пакетный файл. Сценарий PowerShell считает, что он работает как я ($env:username), и я запускаю его с консоли PowerShell, которую я запускал с помощью «Запуск от имени администратора».PowerShell UnauthorizedAccessException запись файла в сетевой ресурс

Цикл выглядит следующим образом. Утверждается, что файлы $ представляют собой коллекцию файловых объектов, представляющих файлы, которые я хочу.

$tool = "c:\Program Files (x86)\Microsoft\Microsoft Ajax Minifier\ajaxmin.exe"; 

foreach($ofile in $files) { 
    $outfile = $ofile.DirectoryName + "\" + $ofile.BaseName + ".min.js"; 

    & $tool $ofile.FullName > $outfile; 
} 

Я получаю следующее сообщение об ошибке на каждом файле:

Access to the path '\\webserver\inetpub\whatever\js\validation.min.js' is denied. 
At C:\minifyall.ps1:18 char:27 
+  & $tool $ofile.FullName > <<<< $outfile; 
    + CategoryInfo   : OpenError: (:) [], UnauthorizedAccessException 
    + FullyQualifiedErrorId : FileOpenFailure 

Файл есть файл он должен быть письменно, и Get-Acl говорит мне, что есть Разрешить FullControl. Он отлично читает файлы без .min.

Если изменить выходной каталог для текущего рабочего каталога (на моей машине), скрипт работает, как ожидалось:

# No prob 
$outfile = $ofile.BaseName + ".min.js"; 

Есть ли что-то еще мне нужно сделать, чтобы включить этот сценарий, чтобы написать удаленные файлы? Помимо перезаписи в Perl.

Подсказки по стилю кодирования PowerShell также приветствуются. Мой профессиональный опыт с PowerShell начался примерно через час после завтрака.

ответ

1

Попробуйте распечатать все полные пути, чтобы увидеть, что ничего смешного не происходит.

Другой причиной может быть то, что, поскольку целевые файлы являются Javascript, некоторые системы безопасности предотвращают доступ. Вы используете антивирус?

Если все остальное не работает, используйте Procmon, чтобы узнать, что именно происходит в файловой системе.

+0

Уже напечатаны все полные пути. Ничего неожиданного. У нас есть куча бешеных и враждебных средств защиты ... Спасибо. –

0

Имейте в виду, что ACL файлов на удаленной машине, которая предоставляет вам разрешение, недостаточно. Вам также необходимо разрешение на запись в общей папке. Перейдите на удаленный компьютер, щелкните правой кнопкой мыши папку, перейдите на вкладку «Общий доступ», «Расширенный доступ» и нажмите кнопку «Разрешения». Проверьте эти разрешения, чтобы убедиться, что у вас есть права на запись.

+0

Диалоги свойств папки на удаленном компьютере не имеют вкладки «Общий доступ». Помните, во всяком случае, я могу сохранить эти файлы в VS или Блокноте. –

+0

Вы можете сохранить их через сетевой ресурс? BTW проверяет свойства совместного доступа в папке, соответствующей ресурсу «inetpub». –

+0

Да, я могу сохранить их через общий сетевой ресурс. Я закончил тем, что просто написал командный файл с файлами .js, явно указанными в командной строке, с полными сетевыми путями для входных и выходных файлов. Работает отлично. Список не будет часто меняться; PowerShell был своего рода излишеством в этой задаче. Просто казалось оправданием, чтобы начать изучать его. Мне интересно, не может ли PS не иметь параноидальных предположений о потенциально вредоносных сценариях. –

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