Jüngste Datei aus AWS-S3-Bucket kopieren

Da ich regelmäßig die jüngste Log-Datei aus einem bestimmten S3-Bucket herunterladen muss, habe ich dieses Skript geschrieben.

Es nutzt wiederum folgende Skripte:

Diese am besten herunterladen und die Pfade in folgendem Skript entsprechend anpassen.

Achtung:
Der Befehl „Copy-S3Object“ überschreibt die etwaig vorhandene lokale Datei einfach, ohne Rückfrage!

####################################################################
####################################################################
###### Hier die Parameter definieren. Den Rest in Ruhe lassen ######
###### Außer die Pfade zu den Skripten                        ######
param(
	$AccessKeyCSVPath = "C:\_Privat\AWS\Acceskey.csv", # Pfad zur Acceskey-CSV
	$AccessKey,
	$SecretKey,
	$BucketName = "s3-bucket-xyz", # Hier den Namen des Buckets eintragen
	$LocalPath = "C:\Temp\", # Lokaler Pfad, wo das letzte File vom Bucket hin soll
	$Region = "eu-central-1",
	$ProfileName = "TempProfile" # Profilname definieren
)
####################################################################
####################################################################

# Access- und SecretKey einlesen
if(!($AccessKey -and $SecretKey)){
	$AWSAccessKey = C:\_Skripte\AWS\Get-AWSAccessKey.ps1 -AccessKeyCSVPath $AccessKeyCSVPath
	$AccessKey = $AWSAccessKey.AccessKey
	$SecretKey = $AWSAccessKey.SecretKey
}

# Ggf. LocalPath erstellen wenn er nicht existiert oder angegeben wurde
$LocalPath = C:\_Skripte\Snippets\Select-LocalFolder.ps1 -LocalFolder $LocalPath

# AWS-Modul importieren
Import-Module "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.psd1"

# Credential für AWS erstellen
Set-AWSCredentials -AccessKey $AccessKey -SecretKey $SecretKey -StoreAs $ProfileName

# Wenn keine Region gewählt ist, Auswahlmenü für die Region erstellen
if(!$Region){
	$Question = "Welche AWS Region soll genommen werden?"
	$Command = "Get-AWSRegion"
	$Attributes = @("Region","Name")
	$Region = (C:\_Skripte\Snippets\Select-FromMenue.ps1 -Question $Question -Command $Command -Attributes $Attributes).Region
}
	
# Region initialisieren
Initialize-AWSDefaults -ProfileName $ProfileName -Region $Region

# Wenn kein BucketName gewähät ist, Bucket-Auswahl erstellen
if(!$BucketName){
	$Question = "Welcher AWS Bucket soll genommen werden?"
	$Command = "Get-S3Bucket"
	$Attributes = @("BucketName")
	$BucketName = (C:\_Skripte\Snippets\Select-FromMenue.ps1 -Question $Question -Command $Command -Attributes $Attributes).BucketName
}

# Die jüngste Datei im Bucket auslesen
$LatestObject = (Get-S3Object -BucketName $BucketName | Sort LastModified -Descending)[0].Key
# Lokalen Dateinamen erstellen
$LocalFile = $LocalPath + "\" + $LatestObject

# Datei lokal kopieren
# Eine evtl. vorhandene Datei mit dem selben Namen wird ohne Warnung überschrieben
Copy-S3Object -BucketName $BucketName -Key $LatestObject -LocalFile $LocalFile | Out-Null

# Credentials und Region wieder leeren
Clear-DefaultAWSRegion
Remove-AWSCredentialProfile -ProfileName $ProfileName -Force