我无法使用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
答案 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)
看起来您的文件正由另一个进程使用。因此,检查正在运行的进程列表,如果有任何进程您怀疑可能正在使用此文件终止该进程。 文件锁定选项也可用,您可以确保只为您的文件或资源建立了一个连接。
希望这会有所帮助......