Usar o PowerShell para gerenciar diretórios e arquivos no Azure Data Lake Storage Gen2

Este artigo mostra como usar o PowerShell para criar e gerenciar diretórios e arquivos em contas de armazenamento que têm um namespace hierárquico.

Para saber como obter, definir e atualizar as listas de controle de acesso (ACL) de diretórios e arquivos, consulte Usar o PowerShell para gerenciar ACLs no Azure Data Lake Storage Gen2.

Referência | Gen1 ao mapeamento | Gen2 Enviar comentários

Pré-requisitos

  • Uma subscrição do Azure. Para obter mais informações, consulte Obter avaliação gratuita do Azure.

  • Uma conta de armazenamento com namespace hierárquico habilitado. Siga estas instruções para criar um.

  • O .NET Framework é 4.7.2 ou superior instalado. Para obter mais informações, consulte Baixar o .NET Framework.

  • 5.1 Versão do PowerShell ou superior.

Instalar o módulo do PowerShell

  1. 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, consulte Atualizando o Windows PowerShell existente

  2. Instale o módulo Az.Storage .

    Install-Module Az.Storage -Repository PSGallery -Force  
    

    Para obter mais informações sobre como instalar módulos do PowerShell, consulte Instalar o módulo do Azure PowerShell

Conecte-se à conta

Escolha como deseja que seus 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 de controle de acesso baseado em função (Azure RBAC) e permissões de ACL do Azure.

  1. Abra uma janela de comando do Windows PowerShell e, em seguida, inicie sessão na sua subscrição do Azure com o Connect-AzAccount comando e siga as instruções no ecrã.

    Connect-AzAccount
    
  2. Se sua identidade estiver associada a mais de uma assinatura, defina sua assinatura ativa como assinatura da conta de armazenamento na qual você deseja criar e gerenciar diretórios. Neste exemplo, substitua o valor do <subscription-id> espaço reservado pela ID da sua assinatura.

    Select-AzSubscription -SubscriptionId <subscription-id>
    
  3. Obtenha o contexto da conta de armazenamento.

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

Opção 2: Obter autorização usando a chave da conta de armazenamento

Com essa abordagem, o sistema não verifica as permissões de RBAC ou ACL 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 contentor

Um contêiner atua como um sistema de arquivos para seus arquivos. Você pode criar um usando o New-AzStorageContainer cmdlet.

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 New-AzDataLakeGen2Item cmdlet.

Este exemplo adiciona um diretório nomeado 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" }

Mostrar propriedades do diretório

Este exemplo obtém um diretório usando o Get-AzDataLakeGen2Item cmdlet e, em seguida, 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

Nota

Para obter o diretório raiz do contêiner, omita o -Path parâmetro.

Renomear ou mover um diretório

Renomeie ou mova um diretório usando o Move-AzDataLakeGen2Item cmdlet.

Este exemplo renomeia um diretório do nome my-directory para o 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

Use o -Force parâmetro se quiser substituir sem prompts.

Este exemplo move um diretório nomeado my-directory para um subdiretório de my-directory-2 named 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

Eliminar um diretório

Exclua um diretório usando o Remove-AzDataLakeGen2Item cmdlet.

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 -Force parâmetro para remover o arquivo sem um prompt.

Download de um diretório

Baixe um arquivo de um diretório usando o Get-AzDataLakeGen2ItemContent cmdlet.

Este exemplo baixa um arquivo nomeado 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 Get-AzDataLakeGen2ChildItem cmdlet. Você pode usar o parâmetro -OutputUserPrincipalName opcional para obter o nome (em vez do ID do objeto) dos usuários.

Este exemplo lista o conteúdo de um diretório 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 ACLpropriedades , Permissions, Group, e Owner de cada item no diretório. O -FetchProperty parâmetro é necessário para obter valores para a ACL propriedade.

$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

Para listar o conteúdo do diretório raiz do contêiner, omita o -Path parâmetro.

Carregar um ficheiro para um diretório

Carregue um arquivo em um diretório usando o New-AzDataLakeGen2Item cmdlet.

Este exemplo carrega um arquivo nomeado upload.txt para 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 define as 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

Nota

Para carregar um arquivo no diretório raiz do contêiner, omita o -Path parâmetro.

Mostrar propriedades do ficheiro

Este exemplo obtém um arquivo usando o Get-AzDataLakeGen2Item cmdlet e, em seguida, 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

Eliminar um ficheiro

Exclua um arquivo usando o Remove-AzDataLakeGen2Item cmdlet.

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 -Force parâmetro para remover o arquivo sem um prompt.

Mapeamento de Gen1 para Gen2

A tabela a seguir mostra como os cmdlets usados para o Data Lake Storage Gen1 são mapeados para os cmdlets do Data Lake Storage Gen2.

Nota

O Azure Data Lake Storage Gen1 foi desativado. Veja o anúncio da aposentadoria aqui. Os recursos do Data Lake Storage Gen1 não estão mais acessíveis. Se necessitar de assistência especial, por favor contacte-nos.

Cmdlet Data Lake Storage Gen1 Cmdlet Data Lake Storage Gen2 Notas
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 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, Owner, Group, Permission.
Get-AzDataLakeStoreItemContent Get-AzDataLakeGen2FileContent O cmdlet Get-AzDataLakeGen2FileContent baixa o conteúdo do arquivo para o arquivo local.
Move-AzDataLakeStoreItem Move-AzDataLakeGen2Item
New-AzDataLakeStoreItem New-AzDataLakeGen2Item Este cmdlet carrega o novo conteúdo do arquivo de um arquivo local.
Remover-AzDataLakeStoreItem Remover-AzDataLakeGen2Item
Set-AzDataLakeStoreItemOwner
Set-AzDataLakeStoreItemPermission
Set-AzDataLakeStoreItemAcl
Update-AzDataLakeGen2Item O cmdlet Update-AzDataLakeGen2Item atualiza apenas um único item, e não recursivamente. Se você quiser atualizar recursivamente, liste itens usando o cmdlet Get-AzDataLakeStoreChildItem e, em seguida, faça o pipeline para o cmdlet Update-AzDataLakeGen2Item.
Test-AzDataLakeStoreItem Get-AzDataLakeGen2Item O cmdlet Get-AzDataLakeGen2Item relata um erro se o item não existir.

Consulte também