Wie zum hochladen aller Dateien eines bestimmten Typs zu S3-Bucket?
Wenn ich dies tun:
foreach ($f in (Get-ChildItem -filter "*.flv")){
Write-S3Object -BucketName bucket.example -File $f.fullName -Key $f.name -CannedACLName PublicRead
}
Bekomme ich diesen Fehler:
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
Was mache ich falsch? Gibt es irgendetwas, was ich tun kann, um zu sehen, mehr von dem Fehler, oder ist das nur ein syntax-Problem?
Wie kann ich das sonst hochladen eines bestimmten Dateityps in einen Eimer mit powershell?
EDIT:
Ich absichtlich so eingestellt Set-DefaultAWSRegion
zu einer region, der Eimer war nicht in, und bekam
Write-S3Object : The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
als eine Fehlermeldung, wie erwartet, so wie es aussieht kann es eine Verbindung zu dem Eimer und es weiß, dass es nicht in einer bestimmten region.
Auch, wenn ich geben Sie die s3://
Präfix vor dem bucket-Namen ein, bekomme ich eine Meldung, dass der Eimer nicht gefunden werden konnte, so dass es aussieht wie das, was ich bin, betreten nun die richtige ist.
Kann ich tun, um-S3Bucket und sehen, all die Eimer auf mein Konto, damit ich weiß, dass es richtig konfiguriert.
EDIT2:
Wenn ich das Tue:
> $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
Wenn ich $f[0].fullName
separat, bekomme ich den vollständigen Pfad zu dem Objekt.
Das hat aber Leerzeichen. Könnte dies ein problem sein?
- Sieht alles gut aus außer vielleicht die -BucketName parameter. Ist das etwas, das Sie einrichten müssen, um in S3?
bucket.name
ist ein Beispiel. Es ist eigentlich die tatsächliche Eimer Namen, abzüglich ders3://
Präfix.- Ein weiteres Problem mit dieser Aussage (ist mir passiert), ist die CannedACLName option. In den docs wird es als "-CannedACLName PublicRead", aber diese Ergebnisse in die gleichen Fehler wie oben. Es Lesen muss "-CannedACLName public-read".
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die fehlenden Parameter, wie Sie von der Befehlszeile müssen Sie die Literale string-Werte. Wenn ich ahmte Ihre Ausgabe lokal:
Landete ich mit einer Datei auf S3, deren Schlüssel benannt wurde
$testName
, weil Variablen werden nicht ausgewertet, in diesem Zusammenhang. Ebenso, Sie bekommen dieses "Die Datei angegeben, die durch den FilePath-Eigenschaft nicht vorhanden!" Fehler, denn es ist keine Datei im Dateisystem namens$f[0].fullName
.Ein Beispiel zum schreiben einer einzigen Datei zu S3:
Schreiben Sie alle Ihre Dateien zu S3:
Dieser wird zunächst alle Dateien mit dem flv-Datei-Typ in Ihrem aktuellen Verzeichnis, und für jedes Objekt (dargestellt durch das Prozent-Zeichen) schreiben wir die Datei (vertreten durch
$_
) zu MyTestBucketName mit einem Schlüssel, den Sie die Eigenschaft name der aktuellen Datei iterieren.Den parameter -CannedACLName PublicRead ist nicht korrekt, korrekte parameter ist
foreach ($f in (Get-ChildItem -filter "*.flv")){
Write-S3Object -BucketName bucket.example -File $f.fullName -Key $f.name -CannedACLName public-read
}
Diese behoben das Problem für mich und sollte reparieren für Sie als gut.
Für mich, keine dieser Lösungen funktioniert, so, was ich gefunden habe ist dieses.
Wenn Sie in der Powershell ISE (4.0) ist es egal, wie Sie senden den lokalen Dateinamen, wird es wissen, seine Lage, was bedeutet, können Sie einfach tun dies, in meinem Beispiel, das ich versuche zum hochladen alle backups von einem Ordner mit dem Namen e:\Backups auf ein bucket in S3:
Wenn ich dieses in der Powershell ISE funktioniert alles einwandfrei, aber Wenn ich eine .ps1 und versuchen Sie es mit dem Task Scheduler habe ich erhalten: Die Datei angegeben, die durch den FilePath-Eigenschaft nicht vorhanden ist!
Es stellt sich heraus, dass, wenn Windows versucht zu laufen .ps1 spielt es im Grunde von der CLI, und wenn Sie es tut, hält es die Anerkennung der Pfad der Dateien, die Sie senden.
Also habe ich | % { $_.FullName } zu GetChildItem, um die fullpath jeder Datei und nun funktioniert alles wunderbar:
Hoffe, dies hilft jemand da draußen!
Anderen newbs gibt auf der Suche nach einem Skript, das dies tut, aber nicht für den öffentlichen Zugriff entfernen -CannedACLName public-Lesen insgesamt. Hat mich 2 frustrierenden Stunden, um das herauszufinden. 🙂