Not battle-tested at all. Use at your own risk. Works for me though. You’ll need an $accessKey and $secretKey variables set outside the scope for this to work. The $bucketName is the bucket that the file is located in. The $fileName is the name of the file in said bucket. The $dest is where you want to write the file locally. The $logFile does nothing at this point.
function GetS3([string]$bucketName, [string]$fileName, [string]$dest, [string]$logFile) { $AmazonS3 = [Amazon.AWSClientFactory]::CreateAmazonS3Client($accessKey, $secretKey) $S3GetRequest = New-Object Amazon.S3.Model.GetObjectRequest $S3GetRequest.BucketName = $bucketName $S3GetRequest.Key = $fileName $S3Response = $AmazonS3.GetObject($S3GetRequest); if($S3Response -eq $null){ Write-Error "ERROR: Amazon S3 get requrest failed. Script halted." exit 1 } $stream = $S3Response.ResponseStream; $fileStream = new-object system.IO.FileStream($dest, [System.IO.FileMode]::Create, [System.IO.FileAccess]::Write); $byteArray = New-Object byte[] 32768 [int]$bytesRead = 0; do { $bytesRead = $stream.read($byteArray, 0, $byteArray.length); $fileStream.write($byteArray, 0, $bytesRead); } while($bytesRead -gt 0) $fileStream.flush(); $fileStream.close(); $stream.close() }