Powershell: Out-File - 访问路径被拒绝

9
我有一个REST调用(POST)用于下载PDF文件。API调用响应二进制版本的PDF文件。我想将文件保存在我的机器上作为.pdf文件。但是,我遇到了一个错误:
Out-File:拒绝访问路径“C:\ Users \ my-name \ Documents \ Tests”。 在C:\ Users \ my-name \ Documents \ Tests \ TEST-WITH-LOOP.ps1的132个字符:149 + ... questBody | Out-File -FilePath(“C:\ Users \ my-name \ Documents \ Tests + 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 + CategoryInfo:OpenError:[Out-File],UnauthorizedAccessException + FullyQualifiedErrorId:FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand
POSTMAN的响应体头:
Content-Disposition →attachment; filename="Report-01_29_14-28.pdf" Content-Type →application/octet-stream DataServiceVersion →2.0 Date →Mon, 29 Jan 2018 21:51:31 GMT Date →Mon, 29 Jan 2018 21:51:31 GMT Server →Jetty(9.3.7.v20160115NeotysEdition.30) Transfer-Encoding →chunked
命令:
$DownloadReportResponse = Invoke-RestMethod -Method Post -Uri $DownloadReportUrl -ContentType "application/json" -Body $DownloadReportRequestBody |
    Out-File -FilePath ("C:\Users\my-name\Documents\Tests") -Force

问题: 如何将此文件保存为.pdf格式或作为附件包含在电子邮件中?


错误不够清楚吗?您在文件夹“C:\Users\my-name\Documents\Tests”缺少文件访问权限。 - Quality Catalyst
那么如何获得文件访问权限呢?我正在以管理员身份运行此脚本,并将执行策略设置为RemoteSigned。 - Shahboz
使用的账户是否具有访问该文件夹的权限?在Windows下,管理员权限并不授予用户特定文件夹的文件夹权限。请检查一下。更简单的方法是使用另一个(可能更合适)的文件夹,即使只是用于测试,以克服这个问题。 - Quality Catalyst
我不知道如何获取您建议的信息。但是我在C:目录中创建了一个新文件夹,但没有成功。出现了相同的错误。也许脚本正在查找目录中的文件,但找不到任何一个? - Shahboz
2个回答

14

好的,这个错误有些误导人。你试图将输出文件创建为C:\Users\my-name\Documents\Tests,但那已经存在作为一个目录,因此会出现访问冲突。请使用完整路径来创建文件:

Invoke-RestMethod ... |
    Out-File "C:\Users\my-name\Documents\Tests\Report-01_29_14-28.pdf"

谢谢Ansgar,问题已解决。但是当我打开保存的文件时,出现错误提示说它不是正确的PDF文件。也许解码二进制文件有问题?你认为呢?有没有办法在PowerShell中解码二进制PDF文件? - Shahboz
$DownloadReportResponse.GetType(); $DownloadReportResponse | Get-Member 这是正确的命令吗?因为我得到了“您无法在空值表达式上调用方法”的错误。 - Shahboz
你按照我告诉你的做法,把 Invoke-RestMethod 调用中的 | Out-File ... 删除了,对吧? - Ansgar Wiechers
我已经执行了,这是我的调用。$DownloadReportResponse = Invoke-RestMethod -Method Post -Uri $DownloadReportUrl -ContentType "application/json" -Headers $headers -Body $DownloadReportRequestBody - Shahboz
如果Invoke-RestMethod返回任何数据,则$DownloadReportResponse的值不会为$null,并且您将不会出现所述错误。请编辑您的问题,并显示$DownloadReportResponse的值和/或您的Invoke-RestMethod调用的输出。 - Ansgar Wiechers
显示剩余3条评论

2

当我使用Out-File命令将输出重定向到文件时,我也有同样的担忧。

我的命令如下:

Out-File -FilePath C:\MyFiles -InputObject "My text"

当我运行该命令时,出现了以下错误:
Out-File: Access to the path 'C:\MyFiles' is denied.

问题在于我将输出(“我的文本”)重定向到目录而不是文件中。
我必须通过指定文件(program.txt)来进行修改:
Out-File -FilePath C:\MyFiles\program.txt -InputObject "My text"

这次它很好地完成了。
就这样。
希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接