Hochladen aller Dateien eines bestimmten Typs in S3 mit Powershell

8

Wenn ich das tue:

%Vor%

Ich bekomme diesen Fehler:

%Vor%

Was mache ich falsch? Gibt es etwas, was ich tun kann, um mehr von dem Fehler zu sehen, oder ist das nur ein Syntaxproblem?

Wie kann ich sonst einen bestimmten Dateityp mit Powershell in einen Bucket hochladen?

BEARBEITEN:

Ich habe Set-DefaultAWSRegion absichtlich auf eine Region gesetzt, in der der Bucket nicht enthalten war, und habe

%Vor%

als eine Fehlermeldung, wie erwartet, so sieht es aus wie es mit dem Bucket verbinden kann und es weiß, dass es nicht in einer bestimmten Region ist.

Wenn ich außerdem das Präfix s3:// vor dem Bucket-Namen eintrage, erhalte ich die Meldung, dass der Bucket nicht gefunden werden konnte. Daher sieht es so aus, als ob das, was ich jetzt eintrage, korrekt ist.

Ich kann Get-S3Bucket machen und alle Buckets in meinem Account sehen, damit ich weiß, dass es korrekt konfiguriert ist.

EDIT2:

Wenn ich das tue:

%Vor%

Wenn ich $f[0].fullName separat mache, bekomme ich den vollständigen Pfad zum Objekt. Dies enthält jedoch Leerzeichen. Könnte das ein Problem sein?

    
Houseman 28.05.2014, 17:39
quelle

4 Antworten

2

Wenn Sie fehlende Parameter wie diese über die Befehlszeile eingeben, müssen Sie ihre literalen Zeichenfolgenwerte angeben. Wenn ich Ihr Problem lokal nachgeahmt habe:

%Vor%

Am Ende hatte ich eine Datei in S3, deren Schlüssel $testName hieß, weil Variablen in diesem Kontext nicht ausgewertet werden. Ebenso erhalten Sie Folgendes: "Die von der FilePath-Eigenschaft angegebene Datei existiert nicht!" Fehler, da in Ihrem Dateisystem keine Datei mit dem Namen $f[0].fullName vorhanden ist.

Ein Beispiel zum Schreiben einer einzelnen Datei in S3:

%Vor%

Um alle Ihre Dateien in S3 zu schreiben:

%Vor%

Damit werden zuerst alle Dateien mit dem FLV-Dateityp in Ihrem aktuellen Verzeichnis abgerufen, und für jedes Objekt (dargestellt durch das Prozentzeichen) werden wir die Datei (dargestellt durch $_ ) in MyTestBucketName mit einem Schlüssel schreiben die Eigenschaft name der aktuellen Datei, die iteriert wird.

    
Anthony Neace 28.05.2014, 20:35
quelle
2

Der Parameter -CannedACLName PublicRead ist nicht korrekt, korrekter Parameter ist

foreach ($f in (Get-ChildItem -filter "*.flv")){ Write-S3Object -BucketName bucket.example -File $f.fullName -Key $f.name -CannedACLName public-read }

Das hat das Problem für mich behoben und sollte auch für Sie behoben werden.

    
Pradeep Mishra 21.08.2015 08:11
quelle
0

Für andere newbs da draußen, die nach einem Skript suchen, das dies tut, aber nicht für den öffentlichen Zugriff, entfernen Sie den -CannedACLName public-read ganz. Ich habe zwei frustrierende Stunden gebraucht, um das herauszufinden. :)

    
Chris Whitaker 16.03.2017 15:42
quelle
0

Für mich hat keine dieser Lösungen funktioniert, also was ich gefunden habe ist das.

Wenn Sie in Powershell ISE (4.0) sind, ist es egal, wie Sie den lokalen Dateinamen senden, er wird seinen Standort kennen, was bedeutet, dass Sie das einfach tun können. In meinem Beispiel versuche ich alle hochzuladen Backups eines Ordners namens e: \ Backups auf einen Bucket in S3:

%Vor%

Wenn ich dies in Powershell ISE ausführe funktioniert alles gut, aber wenn ich ein .ps1 erstellen und versuche, es mit dem Taskplaner auszuführen, bekomme ich: Die von der FilePath-Eigenschaft angegebene Datei existiert nicht!

Es stellt sich heraus, dass, wenn Windows versucht, die .ps1 auszuführen, es grundsätzlich von der CLI kommt, und wenn es dies tut, hört es auf, den Pfad der Dateien zu erkennen, die Sie senden.

Also habe ich | % {$ _. FullName} zu GetChildItem, um den vollständigen Pfad jeder Datei abzurufen. Jetzt funktioniert alles:

%Vor%

Hoffe das hilft jemandem da draußen!

    
andres_est83 13.12.2017 15:30
quelle