Получение РК пользователей из Amazon S3 и распаковка с помощью PowerShell и 7Zip

Задача: получить из Amazon S3 резервные копии пользовательских папок и распаковать их

Для решения задачи будем использовать скрипт PowerShell

$array = @("user1", "user2", "user3","user4")
$userFolders = @("Documents", "Desktop");
$7ZipPath = '"C:\Program Files\7-Zip\7z.exe"'
$zipFilePassword = "PassToArc"
$usersPath = "C:\Users\";
$accessKey = "ACCESSKEY"
$secretKey = "SECRETKEY"
$tmpFolder = "X:\tmp\"
$bucketName = "MyBucket"

foreach ($username in $array) {
    foreach ($folder in $userFolders) {
        $uf = "users\" + $username + "-" + $folder
        $userPath = $usersPath + $username + "\" + $folder + "\"
        $var = Get-S3Object -BucketName $bucketName -AccessKey $accessKey -SecretKey $secretKey -Key $uf | Sort-Object LastModified -Descending | Select-Object -First 1 | Read-S3Object -Folder $tmpFolder -AccessKey $accessKey -SecretKey $secretKey
        if ($var -is [System.IO.FileInfo]) {
            Write-Host $var.FullName
            $FullPathArc = $var.FullName 
            Get-ChildItem -Path $userPath -Include * -Recurse | foreach { Remove-Item $_ -Recurse -Force }       
            $command = "& $7ZipPath x -o$userPath -y -aoa -p$zipFilePassword $FullPathArc"
            iex $command
        }
    }
}

В этом скрипте:

  • массив $array содержит строковые имена пользователей, для которых нужно сделать бэкап пользовательских папок
  • массив $userFolders - строковые имена папок (в нашем случае мы делаем копию рабочего стола (Desktop) и Мои Документы (Documents))
  • $7ZipPath - путь к архиватору 7Zip
  • $zipFilePassword - пароль, который будет использовать архиватор для шифрования архива
  • $usersPath - путь к папкам пользовательских профилей (тут C:\Users\)
  • $tmpFolder - путь ко временной папке, куда будут загружаться архивы

Для работы PowerShell с хранилищем Amazon S3 необходимо установить Инструменты AWS для Windows PowerShell. Для программного доступа к хранилищу Amazon с помощью PowerShell понадобятся 2 ключа: AccessKey и SecretKey. С помощью Amazon IAM создан отдельный пользователь. Для избежания потенциальной потери данных при программной ошибке, новому пользователю даем права "Только чтение" AmazonS3ReadOnlyAccess (подробнее). Для этого пользователя возможно сгенерировать AccessKey и SekretKey и использовать его в скрипте PowerShell.

$var = Get-S3Object -BucketName $bucketName -AccessKey $accessKey -SecretKey $secretKey -Key $uf | Sort-Object LastModified -Descending | Select-Object -First 1 | Read-S3Object -Folder $tmpFolder -AccessKey $accessKey -SecretKey $secretKey

Сначала при помощи командлеты Get-S3Object получаем файлы из корзины $bucketName. Если не указывать параметр -Key она вернет список всех файлов в корзине Amazon S3, но мы укажем в -Key часть имени чтобы отсеять не нужные файлы. Далее производится сортировка по убыванию даты LastModified (командлета Sort-Object). Выбираем последний объект с помощью Select-Object и передаем его в командлету Read-S3Object, которая произведет загрузку объекта в папку $tmpFolder.

После загрузки файла из облачного хранилища, производим предварительную очистку папки назначения $userPath:

Get-ChildItem -Path $userPath -Include * -Recurse | foreach { Remove-Item $_ -Recurse -Force }

и распаковываем с помощью архиватора 7Zip с ключом -aoa (замена файлов без подтверждения):

$command = "& $7ZipPath x -o$userPath -y -aoa -p$zipFilePassword $FullPathArc"
iex $command

 


Похожие материалы

Комментарии