Usar o PowerShell para gerenciar diretórios e arquivos no Azure Data Lake Storage
Este artigo mostra como usar o PowerShell para criar e gerenciar diretórios e arquivos nas contas de armazenamento que têm um namespace hierárquico.
Para saber mais sobre como obter, definir e atualizar as ACLs (listas de controle de acesso) de diretórios e arquivos, confira Usar o PowerShell para gerenciar ACLs no Azure Data Lake Storage.
Referência | Mapeamento de Gen1 para Gen2 | Dar feedback
Pré-requisitos
Uma assinatura do Azure. Para obter mais informações, confira Obter a avaliação gratuita do Azure.
Uma conta de armazenamento precisa ter o namespace hierárquico habilitado. Siga estas instruções para criar um.
.NET Framework é a versão 4.7.2 ou superior instalada. Para obter mais informações, confira Baixar o .NET Framework.
PowerShell versão
5.1
ou posterior.
Instalar o módulo do PowerShell
Verifique se a versão do PowerShell instalada é
5.1
ou superior usando o comando a seguir.echo $PSVersionTable.PSVersion.ToString()
Para atualizar sua versão do PowerShell, confira Atualizando o Windows PowerShell existente
Instale o módulo Az.Storage.
Install-Module Az.Storage -Repository PSGallery -Force
Para obter mais informações sobre como instalar os módulos PowerShell, confira Instalar e configurar o módulo Azure PowerShell
Conectar à conta
Escolha como você deseja que os comandos obtenham autorização para a conta de armazenamento.
Opção 1: obter autorização usando o Microsoft Entra ID
Com essa abordagem, o sistema garante que sua conta de usuário tenha as atribuições apropriadas do RBAC do Azure (controle de acesso baseado em função do Azure) e permissões de ACL.
Abra uma janela Comando do Windows PowerShell e entre em sua assinatura do Azure com o comando
Connect-AzAccount
e siga as instruções na tela.Connect-AzAccount
Se sua identidade estiver associada a mais de uma assinatura, defina a assinatura ativa para a assinatura da conta de armazenamento para na qual deseja criar e gerenciar diretórios. Neste exemplo, substitua o valor do espaço reservado
<subscription-id>
pela ID da sua assinatura.Select-AzSubscription -SubscriptionId <subscription-id>
Obtenha o contexto da conta de armazenamento.
$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -UseConnectedAccount
Opção 2: obter autorização usando a chave de conta de armazenamento
Com essa abordagem, o sistema não verifica as permissões de ACL ou RBAC do Azure. Obtenha o contexto da conta de armazenamento usando uma chave de conta.
$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -StorageAccountKey '<storage-account-key>'
Criar um contêiner
Um contêiner atua como um sistema de arquivos para seus arquivos. Você pode criar um usando o cmdlet New-AzStorageContainer
.
Este exemplo cria um contêiner chamado my-file-system
.
$filesystemName = "my-file-system"
New-AzStorageContainer -Context $ctx -Name $filesystemName
Criar um diretório
Crie uma referência de diretório usando o cmdlet New-AzDataLakeGen2Item
.
Este exemplo adiciona um diretório chamado my-directory
a um contêiner.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
New-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Directory
Este exemplo adiciona o mesmo diretório, mas também define as permissões, umask, valores de propriedade e valores de metadados.
$dir = New-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Directory -Permission rwxrwxrwx -Umask ---rwx--- -Property @{"ContentEncoding" = "UDF8"; "CacheControl" = "READ"} -Metadata @{"tag1" = "value1"; "tag2" = "value2" }
Obter propriedades do diretório
Este exemplo obtém um diretório usando o cmdlet Get-AzDataLakeGen2Item
e imprime valores de propriedade no 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
Observação
Para obter o diretório raiz do contêiner, omita o parâmetro -Path
.
Renomear ou mover um diretório
Renomeie ou mova um diretório usando o cmdlet Move-AzDataLakeGen2Item
.
Este exemplo renomeia um diretório de my-directory
para 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
Observação
Use o parâmetro -Force
se você quiser substituir sem prompts.
Este exemplo move um diretório chamado my-directory
para um subdiretório de my-directory-2
chamado 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
Excluir um diretório
Exclui um diretório usando o cmdlet Remove-AzDataLakeGen2Item
.
Este exemplo exclui um diretório chamado my-directory
.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
Remove-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
Você pode usar o parâmetro -Force
para remover o arquivo sem um prompt.
Baixar de um diretório
Baixe um arquivo de um diretório usando o cmdlet Get-AzDataLakeGen2ItemContent
.
Este exemplo baixa um arquivo chamado upload.txt
de um diretório chamado my-directory
.
$filesystemName = "my-file-system"
$filePath = "my-directory/upload.txt"
$downloadFilePath = "download.txt"
Get-AzDataLakeGen2ItemContent -Context $ctx -FileSystem $filesystemName -Path $filePath -Destination $downloadFilePath
Listar conteúdo do diretório
Liste o conteúdo de um diretório usando o cmdlet Get-AzDataLakeGen2ChildItem
. Você pode usar o parâmetro opcional -OutputUserPrincipalName
para obter o nome (em vez da ID de objeto) de usuários.
Este exemplo lista o conteúdo de um sistema de arquivos chamado my-directory
.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem $filesystemName -Path $dirname -OutputUserPrincipalName
O exemplo a seguir lista as propriedades ACL
, Permissions
, Group
e Owner
de cada item no diretório. O parâmetro -FetchProperty
é necessário para obter valores para a propriedade ACL
.
$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
Observação
Para listar o conteúdo do diretório raiz do contêiner, omita o parâmetro -Path
.
Carregar um arquivo em um diretório
Carregue um arquivo para um diretório usando o cmdlet New-AzDataLakeGen2Item
.
Este exemplo carrega um arquivo chamado upload.txt
em um diretório chamado 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
Este exemplo carrega o mesmo arquivo, mas, em seguida, define permissões, umask, valores de propriedade e valores de metadados do arquivo de destino. Este exemplo também imprime esses valores no 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
Observação
Para carregar um arquivo no diretório raiz do contêiner, omita o parâmetro -Path
.
Mostrar propriedades do arquivo
Este exemplo obtém um arquivo usando o cmdlet Get-AzDataLakeGen2Item
e imprime valores de propriedade no 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
Excluir um arquivo
Exclua um arquivo usando o cmdlet Remove-AzDataLakeGen2Item
.
Este exemplo exclui um arquivo chamado upload.txt
.
$filesystemName = "my-file-system"
$filepath = "upload.txt"
Remove-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filepath
Você pode usar o parâmetro -Force
para remover o arquivo sem um prompt.
Mapeamento de Gen1 para Gen2
A tabela a seguir mostra como os cmdlets usados para Data Lake Storage Gen1 são mapeados para os cmdlets para Data Lake Storage.
Observação
O Azure Data Lake Storage Gen1 foi desativado. Veja o anúncio da desativação aqui. Os recursos do Data Lake Storage Gen1 não estão mais acessíveis. Se precisar de assistência especial, entre em contato conosco.
cmdlet do Data Lake Storage Gen1 | cmdlet Data Lake Storage | Observações |
---|---|---|
Get-AzDataLakeStoreChildItem | Get-AzDataLakeGen2ChildItem | Por padrão, o cmdlet Get-AzDataLakeGen2ChildItem lista apenas os itens filho de primeiro nível. O parâmetro -Recurse lista os itens filho recursivamente. |
Get-AzDataLakeStoreItem Get-AzDataLakeStoreItemAclEntry Get-AzDataLakeStoreItemOwner Get-AzDataLakeStoreItemPermission |
Get-AzDataLakeGen2Item | Os itens de saída do cmdlet Get-AzDataLakeGen2Item têm estas propriedades: Acl, Proprietário, Grupo, Permissão. |
Get-AzDataLakeStoreItemContent | Get-AzDataLakeGen2FileContent | O cmdlet Get-AzDataLakeGen2FileContent baixar o conteúdo do arquivo para o arquivo local. |
Move-AzDataLakeStoreItem | Move-AzDataLakeGen2Item | |
New-AzDataLakeStoreItem | New-AzDataLakeGen2Item | Esse cmdlet carrega o novo conteúdo do arquivo de um arquivo local. |
Remove-AzDataLakeStoreItem | Remove-AzDataLakeGen2Item | |
Set-AzDataLakeStoreItemOwner Set-AzDataLakeStoreItemPermission Set-AzDataLakeStoreItemAcl |
Update-AzDataLakeGen2Item | O cmdlet Update-AzDataLakeGen2Item atualiza apenas um item e não recursivamente. Se você quiser atualizar recursivamente, liste os itens usando o cmdlet Get-AzDataLakeStoreChildItem e então use um pipeline para o cmdlet Update-AzDataLakeGen2Item. |
Test-AzDataLakeStoreItem | Get-AzDataLakeGen2Item | O cmdlet Get-AzDataLakeGen2Item reporta um erro se o item não existir. |