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
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
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.
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
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>
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 ACL
proprietà , Permissions
Group
, 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. |