Jump to content

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"
}

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

 

  • Like 1

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hi Nils,

 

Vielen Dank. Ich bin absolut kein Scripter oder Programmierer, wüsste nicht wie ich das einbauen könnte das es funktioniert :lol3:.

Aber spuckt google was raus, danke auf jeden Fall für den Tip.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden

Werbepartner:



×