Jump to content

PS: Amazon S3 Bucket Script Anpassung


Direkt zur Lösung Gelöst von NilsK,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hi,

 

 

folgende Anforderung: 

 

Ein Ordner mit hunderten von Files sollen zum Amazon S3 Bucket kopiert  werden. Das Script habe ich soweit fertig.

Die Files bestehen aus "Datum_Personalnummer_......" zb. "20181218_123456_FILENAME.CSV"

 

Jetzt soll aus dem Filenamen das Datum herausgelesen werden und automatisch ein Ordner angelegt werden im S3 Bucket genau so wie Personalnummer.

D.h. unter jedem Datum die jeweilige Personalnummer und in den Ordner soll dann die Datei abgelegt werden.

 

Also

20181218

----------123456

----------1255

----------13252

----------23456

 

20181219

----------123456

----------1255

----------13252

----------23456

 

 

 

Es werden auf einem Netzlaufwerk alle Files (hunderte) in einem Ordner abgelegt, die sollen dann auf den S3 Bucket transferiert werden in dieser Ordnerstruktur.

 

 

Ich bin kein großer Programmierer oder Skripter deshalb meine Frage an euch was ich an meinem Script anpassen muss um das zu bewerkstelligen. 

Es müsste lediglich aus dem Dateinamen das Datum und die Personalnummer herausgelesen werden und im Bucket dann der jeweilige Ordner erstellt werden.

 

Mein bisheriges Script das alle *.csv Files rüber kopiert funktioniert auch.

 

Vielen Dank im Vorraus :) 

 

$bucket = 'bucketname'
$source = 'C:\Scripts\AmazonS3\Upload'
$AKey   = 'xxxxxxxxxxxxxxxx'
$SKey   = 'xxxxxxxxxxxxxxxx'
$region = 'us-west-2'

Initialize-AWSDefaultConfiguration -AccessKey $AKey -SecretKey $SKey -Region $region
 
Set-Location $source
$files = Get-ChildItem '*.csv' | Select-Object -Property Name
try {
   if(Test-S3Bucket -BucketName $bucket) {
      foreach($file in $files) {
         if(!(Get-S3Object -BucketName $bucket -Key $file.Name)) { ## verify if exist
            Write-Host "Copying file : $file "
            Write-S3Object -BucketName $bucket -File $file.Name -Key "Folder1/$($file.Name)" -CannedACLName private
         } 
      }
   } Else {
      Write-Host "The bucket $bucket does not exist."
   }
} catch {
   Write-Host "Error uploading file $file"
}

 

Link zu diesem Kommentar

Moin,

 

dieser Skriptschnipsel teilt die Dateinamen eines Ordners beim Unterstrich als Trennzeichen auf.

foreach ($File in $Folder.GetEnumerator()) {
  $Name = $File.Name
  $Prefix = $Name.Split('_')[0]
  # hier passiert was  
}

Hinterher steht der Teil vor dem ersten Unterstrich in $Prefix. Da der zweite Teil bei dir die Personalnummer ist, kannst du den mit $Name.Split('_')[1] in eine Variable stecken. Eleganter wäre es natürlich, die Teile in ein Array zu schreiben, deren Elemente du dann in ähnlicher Form direkt ansprechen kannst, das erspart den mehrfachen Aufruf der Split-Methode (wobei das kaum ins Gewicht fällt).

 

Dann nimmst du die beiden Variablen, um die Ordner anzulegen, falls sie noch nicht existieren. Dort kopierst du dann die Datei hin.

 

Gruß, Nils

 

Link zu diesem Kommentar
  • Beste Lösung

Moin,

 

üblicherweise schreiben wir hier keine vollständigen Skripte. Wir helfen dir gern aufs Pferd, aber Reiten musst du selbst.

 

Da ich gerade Lust drauf hatte, hier ein Skriptschnippsel, der dir die Ordnerstruktur auf einer lokalen Platte erzeugt. Wie du das in S3 umsetzt, musst du selbst sehen. Das Kopieren musst du dann auch noch einbauen.

 

$FolderPath = 'C:\Quelle\Pfad'
$TargetPath = 'E:\Ziel\Pfad\'
$Folder = Get-ChildItem -Path $FolderPath -Filter *.gz
foreach ($File in $Folder.GetEnumerator()) {
  $Name = $File.Name
  $Parts = $Name.Split('_')
  if(!(Test-Path -Path ($TargetPath + $Parts[0]) )){
    New-Item -ItemType directory -Path ($TargetPath + $Parts[0])
  }
  if(!(Test-Path -Path ($TargetPath + $Parts[0] + '\' + $Parts[1]) )){
    New-Item -ItemType directory -Path ($TargetPath + $Parts[0] + '\' + $Parts[1])
  }
}

Gruß, Nils

 

  • Like 1
  • Danke 1
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...