Condividi tramite


Usare PowerShell per gestire directory e file in Azure Data Lake Storage

Questo articolo illustra come usare PowerShell per creare e gestire directory e file negli account di archiviazione con uno spazio dei nomi gerarchico.

Per informazioni su come ottenere, impostare e aggiornare gli elenchi di controllo di accesso (ACL) di directory e file, vedere Usare PowerShell per gestire gli elenchi di controllo di accesso in Azure Data Lake Storage.

Mapping | da Gen1 a Gen2 | Fornire commenti e suggerimenti

Prerequisiti

  • Una sottoscrizione di Azure. Per altre informazioni, vedere Ottenere la versione di valutazione gratuita di Azure.

  • Un account di archiviazione con spazio dei nomi gerarchico abilitato. Per crearne uno, seguire queste istruzioni.

  • .NET Framework è installato 4.7.2 o versione successiva. Per altre informazioni, vedere Scaricare .NET Framework.

  • Versione 5.1 di PowerShell o successiva.

Installa il modulo PowerShell

  1. Verificare che la versione di PowerShell installata sia 5.1 o successiva usando il comando seguente.

    echo $PSVersionTable.PSVersion.ToString()
    

    Per aggiornare la versione di PowerShell, vedere Aggiornamento di Windows PowerShell esistente

  2. Installare il modulo Az.Storage .

    Install-Module Az.Storage -Repository PSGallery -Force  
    

    Per ulteriori informazioni su come installare i moduli di Azure PowerShell, vedere Installare il modulo Azure PowerShell

Effettuare la connessione all'account

Scegliere come si vuole che i comandi ottengano l'autorizzazione per l'account di archiviazione.

Opzione 1: Ottenere l'autorizzazione usando Microsoft Entra ID

Con questo approccio, il sistema garantisce che l'account utente disponga delle assegnazioni di controllo degli accessi in base al ruolo di Azure appropriate e delle autorizzazioni ACL.

  1. Aprire una finestra di comando di Windows PowerShell e quindi accedere alla sottoscrizione di Azure con il Connect-AzAccount comando e seguire le istruzioni visualizzate.

    Connect-AzAccount
    
  2. Se l'identità è associata a più sottoscrizioni, impostare la sottoscrizione attiva sulla sottoscrizione dell'account di archiviazione in cui si desidera creare e gestire le directory. In questo esempio sostituire il <subscription-id> valore segnaposto con l'ID della sottoscrizione.

    Select-AzSubscription -SubscriptionId <subscription-id>
    
  3. Ottenere il contesto dell'account di archiviazione.

    $ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -UseConnectedAccount
    

Opzione 2: Ottenere l'autorizzazione usando la chiave dell'account di archiviazione

Con questo approccio, il sistema non controlla le autorizzazioni di Controllo degli accessi in base al ruolo di Azure o ACL. Ottenere il contesto dell'account di archiviazione usando una chiave dell'account.

$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -StorageAccountKey '<storage-account-key>'

Creazione di un contenitore

Un contenitore funge da file system per i file. È possibile crearne uno usando il New-AzStorageContainer cmdlet .

In questo esempio viene creato un contenitore denominato my-file-system.

$filesystemName = "my-file-system"
New-AzStorageContainer -Context $ctx -Name $filesystemName

Creare una directory

Creare un riferimento alla directory usando il New-AzDataLakeGen2Item cmdlet .

In questo esempio viene aggiunta una directory denominata my-directory a un contenitore.

$filesystemName = "my-file-system"
$dirname = "my-directory/"
New-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Directory

Questo esempio aggiunge la stessa directory, ma imposta anche le autorizzazioni, umask, i valori delle proprietà e i valori dei metadati.

$dir = New-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Directory -Permission rwxrwxrwx -Umask ---rwx---  -Property @{"ContentEncoding" = "UDF8"; "CacheControl" = "READ"} -Metadata  @{"tag1" = "value1"; "tag2" = "value2" }

Mostrare le proprietà della directory

In questo esempio viene recuperata una directory usando il Get-AzDataLakeGen2Item cmdlet e quindi vengono stampati i valori delle proprietà nella console.

$filesystemName = "my-file-system"
$dirname = "my-directory/"
$dir =  Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL
$dir.Permissions
$dir.Group
$dir.Owner
$dir.Properties
$dir.Properties.Metadata

Nota

Per ottenere la directory radice del contenitore, omettere il -Path parametro .

Rinominare o spostare una directory

Rinominare o spostare una directory usando il Move-AzDataLakeGen2Item cmdlet .

In questo esempio viene rinominata una directory dal nome my-directory al nome my-new-directory.

$filesystemName = "my-file-system"
$dirname = "my-directory/"
$dirname2 = "my-new-directory/"
Move-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -DestFileSystem $filesystemName -DestPath $dirname2

Nota

Usare il -Force parametro se si desidera sovrascrivere senza prompt.

In questo esempio viene spostata una directory denominata my-directory in una sottodirectory denominata my-directory-2 my-subdirectory.

$filesystemName = "my-file-system"
$dirname = "my-directory/"
$dirname2 = "my-directory-2/my-subdirectory/"
Move-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -DestFileSystem $filesystemName -DestPath $dirname2

Eliminare una directory

Eliminare una directory usando il Remove-AzDataLakeGen2Item cmdlet .

Questo esempio illustra come eliminare una directory denominata my-directory.

$filesystemName = "my-file-system"
$dirname = "my-directory/"
Remove-AzDataLakeGen2Item  -Context $ctx -FileSystem $filesystemName -Path $dirname

È possibile usare il -Force parametro per rimuovere il file senza un prompt.

Scaricare da una directory

Scaricare un file da una directory usando il Get-AzDataLakeGen2ItemContent cmdlet .

Questo esempio illustra come scaricare un file denominato upload.txt da una directory denominata my-directory.

$filesystemName = "my-file-system"
$filePath = "my-directory/upload.txt"
$downloadFilePath = "download.txt"
Get-AzDataLakeGen2ItemContent -Context $ctx -FileSystem $filesystemName -Path $filePath -Destination $downloadFilePath

Elencare il contenuto della directory

Elencare il contenuto di una directory usando il Get-AzDataLakeGen2ChildItem cmdlet . È possibile usare il parametro -OutputUserPrincipalName facoltativo per ottenere il nome (anziché l'ID oggetto) degli utenti.

In questo esempio vengono elencati i contenuti di una directory denominata my-directory.

$filesystemName = "my-file-system"
$dirname = "my-directory/"
Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem $filesystemName -Path $dirname -OutputUserPrincipalName

Nell'esempio seguente vengono elencate le ACLproprietà , PermissionsGroup, e Owner di ogni elemento nella directory . Il -FetchProperty parametro è necessario per ottenere i valori per la ACL proprietà .

$filesystemName = "my-file-system"
$dirname = "my-directory/"
$properties = Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem $filesystemName -Path $dirname -Recurse -FetchProperty
$properties.ACL
$properties.Permissions
$properties.Group
$properties.Owner

Nota

Per elencare il contenuto della directory radice del contenitore, omettere il -Path parametro .

Caricare un file in una directory

Caricare un file in una directory usando il New-AzDataLakeGen2Item cmdlet .

Questo esempio illustra come caricare un file denominato upload.txt in una directory denominata my-directory.

$localSrcFile =  "upload.txt"
$filesystemName = "my-file-system"
$dirname = "my-directory/"
$destPath = $dirname + (Get-Item $localSrcFile).Name
New-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $destPath -Source $localSrcFile -Force

In questo esempio viene caricato lo stesso file, ma vengono quindi impostate le autorizzazioni, umask, i valori delle proprietà e i valori dei metadati del file di destinazione. In questo esempio vengono stampati anche questi valori nella console.

$file = New-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $destPath -Source $localSrcFile -Permission rwxrwxrwx -Umask ---rwx--- -Property @{"ContentEncoding" = "UDF8"; "CacheControl" = "READ"} -Metadata  @{"tag1" = "value1"; "tag2" = "value2" }
$file1
$file1.Properties
$file1.Properties.Metadata

Nota

Per caricare un file nella directory radice del contenitore, omettere il -Path parametro .

Mostrare le proprietà file

Questo esempio ottiene un file usando il Get-AzDataLakeGen2Item cmdlet e quindi stampa i valori delle proprietà nella console.

$filepath =  "my-directory/upload.txt"
$filesystemName = "my-file-system"
$file = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filepath
$file
$file.ACL
$file.Permissions
$file.Group
$file.Owner
$file.Properties
$file.Properties.Metadata

Eliminare un file

Eliminare un file usando il Remove-AzDataLakeGen2Item cmdlet .

In questo esempio viene eliminato un file denominato upload.txt.

$filesystemName = "my-file-system"
$filepath = "upload.txt"
Remove-AzDataLakeGen2Item  -Context $ctx -FileSystem $filesystemName -Path $filepath

È possibile usare il -Force parametro per rimuovere il file senza un prompt.

Mapping da Gen1 a Gen2

La tabella seguente illustra il mapping dei cmdlet usati per Data Lake Storage Gen1 ai cmdlet per Data Lake Storage.

Nota

Azure Data Lake Storage Gen1 è ora ritirato. Vedere l'annuncio di ritiro qui. Le risorse di Data Lake Storage Gen1 non sono più accessibili. Se hai bisogno di assistenza speciale, contattaci.

Cmdlet di Data Lake Storage Gen1 Cmdlet di Data Lake Storage Note
Get-AzDataLakeStoreChildItem Get-AzDataLakeGen2ChildItem Per impostazione predefinita, il cmdlet Get-AzDataLakeGen2ChildItem elenca solo gli elementi figlio di primo livello. Il parametro -Recurse elenca in modo ricorsivo gli elementi figlio.
Get-AzDataLakeStoreItem
Get-AzDataLakeStoreItemAclEntry
Get-AzDataLakeStoreItemOwner
Get-AzDataLakeStoreItemPermission
Get-AzDataLakeGen2Item Gli elementi di output del cmdlet Get-AzDataLakeGen2Item hanno queste proprietà: Acl, Owner, Group, Permission.
Get-AzDataLakeStoreItemContent Get-AzDataLakeGen2FileContent Il cmdlet Get-AzDataLakeGen2FileContent scarica il contenuto del file nel file locale.
Move-AzDataLakeStoreItem Move-AzDataLakeGen2Item
New-AzDataLakeStoreItem New-AzDataLakeGen2Item Questo cmdlet carica il nuovo contenuto del file da un file locale.
Remove-AzDataLakeStoreItem Remove-AzDataLakeGen2Item
Set-AzDataLakeStoreItemOwner
Set-AzDataLakeStoreItemPermission
Set-AzDataLakeStoreItemAcl
Update-AzDataLakeGen2Item Il cmdlet Update-AzDataLakeGen2Item aggiorna solo un singolo elemento e non in modo ricorsivo. Se si vuole aggiornare in modo ricorsivo, elencare gli elementi usando il cmdlet Get-AzDataLakeStoreChildItem, quindi eseguire la pipeline al cmdlet Update-AzDataLakeGen2Item.
Test-AzDataLakeStoreItem Get-AzDataLakeGen2Item Il cmdlet Get-AzDataLakeGen2Item segnala un errore se l'elemento non esiste.

Vedi anche