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:
- AWS AccessKey automatisch auslesen
- Dynamisches Menü automatisch erstellen
- Lokalen Ordner auswählen und ggf. erstellen
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