playaz 10 Geschrieben 18. Dezember 2018 Melden Teilen Geschrieben 18. Dezember 2018 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" } Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 18. Dezember 2018 Melden Teilen Geschrieben 18. Dezember 2018 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 1 Zitieren Link zu diesem Kommentar
playaz 10 Geschrieben 19. Dezember 2018 Autor Melden Teilen Geschrieben 19. Dezember 2018 Hi Nils, Vielen Dank. Ich bin absolut kein Scripter oder Programmierer, wüsste nicht wie ich das einbauen könnte das es funktioniert . Aber spuckt google was raus, danke auf jeden Fall für den Tip. Zitieren Link zu diesem Kommentar
Beste Lösung NilsK 2.957 Geschrieben 19. Dezember 2018 Beste Lösung Melden Teilen Geschrieben 19. Dezember 2018 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 1 1 Zitieren Link zu diesem Kommentar
playaz 10 Geschrieben 19. Dezember 2018 Autor Melden Teilen Geschrieben 19. Dezember 2018 Vielen Vielen Dank, funktioniert perfekt!! Danke! Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 19. Dezember 2018 Melden Teilen Geschrieben 19. Dezember 2018 Moin, gern, danke für die Rückmeldung. Gruß, Nils Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.