当我这样做时:
foreach ($f in (Get-ChildItem -filter "*.flv")){
Write-S3Object -BucketName bucket.example -File $f.fullName -Key $f.name -CannedACLName PublicRead
}
我收到此错误:
Write-S3Object :
At line:1 char:51
+ foreach ($f in (Get-ChildItem -filter "*.flv")){ Write-S3Object -BucketName xx. ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Amazon.PowerShe...eS3ObjectCmdlet:WriteS3ObjectCmdlet) [Write-S3Objec
t], InvalidOperationException
+ FullyQualifiedErrorId : Amazon.S3.AmazonS3Exception,Amazon.PowerShell.Cmdlets.S3.WriteS3ObjectCmdlet
我究竟做错了什么?我有什么办法可以看到更多错误,还是仅仅是语法问题?
如何使用Powershell将所有特定文件类型全部上传到存储桶?
我特意设置Set-DefaultAWSRegion
了一个没有桶的区域,并得到了
Write-S3Object : The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
作为错误消息,正如预期的那样,因此看起来它可以连接到存储桶,并且知道它不在特定区域中。
此外,如果我s3://
在存储桶名称之前输入前缀,则会收到一条消息,提示找不到存储桶,因此看起来我现在输入的内容是正确的。
我可以执行Get-S3Bucket并查看帐户中的所有存储桶,因此我知道它的配置正确。
如果我做:
> $f = Get-ChildItem -filter "*.flv"
> Write-S3Object
cmdlet Write-S3Object at command pipeline position 1
Supply values for the following parameters:
BucketName: bucket.name
Key: $f[0].name
File: $f[0].fullName
Write-S3Object : The file indicated by the FilePath property does not exist!
At line:1 char:1
+ Write-S3Object
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Amazon.PowerShe...eS3ObjectCmdlet:WriteS3ObjectCmdlet) [Write-S3Objec
t], InvalidOperationException
+ FullyQualifiedErrorId : System.ArgumentException,Amazon.PowerShell.Cmdlets.S3.WriteS3ObjectCmdlet
如果我$f[0].fullName
单独进行操作,则会获得该对象的完整路径。但是,其中有空格。这可能是个问题吗?
当您从命令行中填写缺少的参数时,需要指定其文字字符串值。当我在本地模仿您的问题时:
PS C:\> Write-S3Object
cmdlet Write-S3Object at command pipeline position 1
Supply values for the following parameters:
BucketName: MyTestBucketNameHere
Key: $testName
File: C:/test.txt
我最终在S3上找到了一个文件,该文件的键名为$testName
,因为未在该上下文中评估变量。同样,您得到的是“ FilePath属性指示的文件不存在!” 错误,因为您的文件系统中没有名为的文件$f[0].fullName
。
将单个文件写入S3的示例:
PS C:> Write-S3Object -BucketName "MyTestBucketName" -Key "file.txt" -File "C:/test.txt"
要将所有文件写入S3:
PS C:\> (Get-ChildItem -filter "*.flv") | % { Write-S3Object -BucketName "MyTestBucketName" -File $_ -Key $_.name}
这将首先获取当前目录中所有具有flv文件类型的文件,并且对于每个对象(用百分号表示),我们将$_
使用Key作为当前文件的name属性将文件(用表示)写入MyTestBucketName。文件被迭代。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句