PowerShell UnauthorizedAccessException在网络共享上写入文件

时间:2013-12-09 18:09:13

标签: windows powershell permissions

我正在尝试编写一个PowerShell脚本,该脚本在web服务器上缩小了一个充满.js文件的目录。这些文件属于我;我创造了它;我是以我身份登录的。我可以在文本编辑器中或通过批处理文件打开并保存文件。 PowerShell脚本认为它正在以我的身份运行($env:username),我正在使用“以管理员身份运行”运行的PowerShell控制台运行它。

循环看起来像这样。 $ files被确认为表示我想要的文件的文件对象的集合。

$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告诉我我有Allow FullControl。它可以很好地读取非.min文件。

如果我将输出目录更改为当前工作目录(在我自己的机器上),脚本将按预期工作:

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

我是否还需要做其他事情才能使此脚本写入远程文件?除了在Perl中重写它。

欢迎使用PowerShell编码风格的提示。我今天早餐后大约一小时开始使用PowerShell的专业经验。

2 个答案:

答案 0 :(得分:1)

尝试并打印所有完整路径,以便看到没有任何有趣的事情发生。

另一个原因可能是,由于目标文件是Javascript,因此某些安全系统会阻止访问。你在运行防病毒软件吗?

如果所有其他方法都失败了,请使用Procmon查看文件系统上究竟发生了什么。

答案 1 :(得分:0)

请记住,授予您权限的远程计算机上的文件ACL是不够的。您还需要在共享上写入权限。转到远程计算机,右键单击该文件夹,转到“共享”选项卡,“高级共享”,然后单击“权限”按钮。检查这些权限以确保您具有写权限。