Write-S3Object:进程无法访问该文件

时间:2016-11-29 21:13:43

标签: amazon-web-services

我无法使用powershell Write-S3Object命令从aws实例上传文件。我在'c:\ work \ log_instance2.txt'文件中打开句柄,因为我有一个正在运行的python脚本,这是日志文件。这是Write-S3Object的预期行为吗?如何在python应用程序仍在运行时上传文件?

Write-S3Object : The process cannot access the file
'c:\work\log_instance2.txt' because it is being used by another process.
At line:1 char:1
+ Write-S3Object -BucketName 'catcfs' -File 'c:\\work\\log_instance2.txt' -Key
'Un ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
    + CategoryInfo          : InvalidOperation: (Amazon.PowerShe...eS3ObjectCm
   dlet:WriteS3ObjectCmdlet) [Write-S3Object], InvalidOperationException
    + FullyQualifiedErrorId : System.IO.IOException,Amazon.PowerShell.Cmdlets.
   S3.WriteS3ObjectCmdlet

2 个答案:

答案 0 :(得分:0)

这是一个浮躁的人。将日志文件写回s3时,我自己遇到了同样的错误。

有趣的事实-如果使用Start-Transcript -path“ D:\ ServerSetupLog.txt” -append,则Write-Output在PS 5及更高版本中无法正常工作。它使脚本文件保持打开状态,因此您需要使用Write-Information。只是,Write-Information不会回显到控制台。但是,这不是问题/解决方法。

我使用了sysinternals util procexp64(从https://live.sysinternals.com/下载或运行它)并搜索日志文件以查看哪个进程对其进行了锁定。该进程是POWERSHELL.EXE。嗯最初,我以为可能是因为我正在当时打开的PS ISE中编写代码,并且ISE或sub / meta系统调用以某种方式锁定了。

所以我尝试在ISE关闭的情况下运行它。同样的错误。

我试图查看这次是什么进程将其锁定。是<Non-existent Process>。我的老朋友。但是,时间就是金钱,对不对?所以...

修复:

准备好保存日志时-将日志复制到新文件并将其写入存储桶:

Copy-Item -Path D:\TentacleInstallLog.txt -Destination D:\s3_TentacleInstallLog.txt -Force

Write-S3Object -bucketname mybucketnamehere -File D:\s3_TentacleInstallLog.txt -key ServerSetupLogs/$instanceId/TentacleInstallLog.txt

我现在很脏。

答案 1 :(得分:-2)

看起来您的文件正由另一个进程使用。因此,检查正在运行的进程列表,如果有任何进程您怀疑可能正在使用此文件终止该进程。 文件锁定选项也可用,您可以确保只为您的文件或资源建立了一个连接。

希望这会有所帮助......