Fermer

mars 13, 2020

Intégration d'AWS S3 et de Windows PowerShell pour télécharger et renommer des fichiers


De nos jours, de nombreuses entreprises migrent leurs données vers une solution de stockage cloud plutôt que sur un serveur physique. L'utilisation du cloud a été une solution de plus en plus populaire au cours des dernières années. Les avantages de l'utilisation du stockage dans le cloud par rapport au stockage physique incluent: rentabilité, disponibilité permanente, sécurité accrue, mobilité accrue, etc.

Une solution cloud populaire est appelée AWS (Amazon Web Services), qui est fournie par Amazon. AWS propose plusieurs solutions cloud pour divers besoins des entreprises. La solution de stockage en nuage, S3, «fournit le stockage d'objets via une interface de service Web. Amazon S3 utilise la même infrastructure de stockage évolutive qu'Amazon.com utilise pour gérer son réseau mondial de commerce électronique. »

De nombreuses organisations utilisent AWS pour connecter leurs systèmes d'information existants à AWS S3 pour stocker des données, archiver des données ou même pour une intégration plus poussée avec d'autres systèmes d'information (Ex. ERP Data -> AWS S3 -> OneStream).

Windows PowerShell est un shell de ligne de commande Windows qui utilise un langage de script propriétaire. PowerShell est utile pour diverses tâches, y compris la manipulation d'objets, que nous explorerons plus avant.

Importation des outils AWS pour PowerShell

  1. Ouvrez PowerShell à l'aide de «Exécuter en tant qu'administrateur» en cliquant avec le bouton droit sur PowerShell
  2. Vérifiez l'exécution du script n'est pas restreinte en exécutant la commande suivante:

Get-ExecutionPolicy

  1. Si l'exécution du script est restreinte, exécutez:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

  1. Tapez la commande suivante pour importer les outils AWS pour PowerShell

AWSPowerShell du module d'importation

Connexion à AWS S3 à l'aide de PowerShell

  1. Exécutez la commande suivante avec votre AccessKey et SecretKey pour vous connecter à votre stockage S3. Vous pouvez modifier le nom du profil comme vous le souhaitez.

Set-AWSCredential -AccessKey AKIA0123456787EXAMPLE –SecretKey wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY -StoresAs MyNewProfile

  1. Pour référence future, vous n'aurez plus de clé secrète pour définir votre clé secrète. , vous pouvez simplement exécuter la commande:

Set-AWSCredential -ProfileName MyNewProfile

Téléchargement et renommage de fichiers depuis AWS S3 à l'aide de PowerShell

  1. Définissez le compartiment à partir duquel vous souhaitez télécharger les fichiers [19659010] $ bucket = 'exampleBucket'

    1. Définissez le dossier dans le bucket à partir duquel vous souhaitez télécharger les fichiers. Dans mon cas, il se trouve dans le dossier Subfolder1 à l'intérieur du dossier Folder1. L'utilisation de la barre oblique à la fin sélectionne tous les fichiers de ce dossier

    $ objects = Get-S3Object -BucketName $ bucket -KeyPrefix 'Folder1 / Subfolder1 /'

    1. Définissez le chemin où vous souhaitez que les fichiers soient téléchargés

    $ localPath = 'C: Usersomar.abuzaherDesktopBlog'

    1. Exécutez une boucle qui extrait les fichiers et les noms de fichiers. Vous devez utiliser la fonction de sous-chaîne pour inclure uniquement le nom du fichier tel qu'il est dans S3.Pour trouver la position de départ des noms de fichier, vous comptez la quantité de caractères dans le KeyPrefix à partir de 0, puis ajoutez 1.

    foreach ($ object in $ objects) {

    $ fileName = $ object.Key.Substring (19)

    1. Exécutez une boucle imbriquée pour modifier les noms de fichier. J'ai inclus la valeur statique "nouveau" devant le nom du fichier d'origine. Vous pouvez ajouter n'importe quoi au nom de fichier ici, il peut même être dynamique (date, sous-chaîne du nom de fichier d'origine, etc.).

    foreach ($ file in $ fileName) {

    $ localFileName = ('NEW' + $ file)

    $ localFilePath = Join-Path $ localPath $ localFileName

    Copy-S3Object -BucketName $ bucket -Key $ object. Key -LocalFile $ localFilePath}

    }

    Le code terminé ressemble à ceci:

     $ bucket = 'exampleBucket'
    $ objects = Get-S3Object -BucketName
    $ bucket -KeyPrefix 'Folder1 / Subfolder1 /'
    $ localPath = 'C: Usersomar.abuzaherDesktopBlog'
    foreach ($ objet dans $ objets) {
    $ fileName = $ object.Key.Substring (19)
    foreach ($ file in $ fileName) {
    $ localFileName = ('NOUVEAU' + fichier $)
    $ localFilePath = Chemin d'accès-joint $ localPath $ localFileName
    Copy-S3Object -BucketName $ bucket -Key $ object.Key -LocalFile $ localFilePath}
    } 






Source link