Uso de PowerShell para administrar directorios y archivos en Azure Data Lake Storage Gen2
En este artículo se explica cómo usar PowerShell para crear y administrar directorios y archivos en cuentas de almacenamiento que tengan habilitado un espacio de nombres jerárquico.
Para obtener información sobre cómo obtener, establecer y actualizar las listas de control de acceso (ACL) de directorios y archivos, consulte Uso de PowerShell para administrar listas de control de acceso en Azure Data Lake Storage Gen2.
Referencia | Asignación de Gen1 a Gen2 | Envíenos su comentarios
Requisitos previos
Suscripción a Azure. Para obtener más información, vea Obtención de una evaluación gratuita de Azure.
Una cuenta de almacenamiento que tenga habilitado un espacio de nombres jerárquico. Siga estas instrucciones para crear uno.
Debe tener instalada la versión de .NET Framework 4.7.2 o superior. Para obtener más información, vea Descarga de .NET Framework.
La versión de PowerShell
5.1
o posterior.
Instalación del módulo de PowerShell
Use el siguiente comando para comprobar que la versión de PowerShell que ha instalado es
5.1
o posterior.echo $PSVersionTable.PSVersion.ToString()
Para actualizar la versión de PowerShell, vea Actualización de Windows PowerShell existente.
Instale el módulo Az.Storage.
Install-Module Az.Storage -Repository PSGallery -Force
Para más información sobre cómo instalar módulos de PowerShell, vea Instalación del módulo de Azure PowerShell.
Conexión con la cuenta
Elija cómo quiere que sus comandos obtengan autorización para la cuenta de almacenamiento.
Opción 1: Obtener autorización mediante el Microsoft Entra ID
Con este enfoque, el sistema garantiza que su cuenta de usuario tiene los permisos de ACL y las asignaciones de control de acceso basado en rol de Azure (Azure RBAC) apropiados.
Abra una ventana de comandos de Windows PowerShell y, a continuación, inicie sesión en su suscripción de Azure con el comando
Connect-AzAccount
y siga las instrucciones de la pantalla.Connect-AzAccount
Si su identidad está asociada a más de una suscripción, establezca la suscripción activa en la suscripción de la cuenta de almacenamiento en la que quiere crear y administrar directorios. En este ejemplo, reemplace el valor de marcador de posición
<subscription-id>
por el identificador de la suscripción.Select-AzSubscription -SubscriptionId <subscription-id>
Obtenga el contexto de la cuenta de almacenamiento.
$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -UseConnectedAccount
Opción 2: Obtención de autorización mediante la clave de cuenta de almacenamiento
Con este enfoque, el sistema no comprueba los permisos ACL o de RBAC. Obtenga el contexto de la cuenta de almacenamiento mediante una clave de cuenta.
$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -StorageAccountKey '<storage-account-key>'
Crear un contenedor
Un contenedor actúa como sistema de archivos para sus archivos. Puede crear uno con el cmdlet New-AzStorageContainer
.
En este ejemplo se crea un contenedor denominado my-file-system
.
$filesystemName = "my-file-system"
New-AzStorageContainer -Context $ctx -Name $filesystemName
Creación de un directorio
Cree una referencia de directorio con el cmdlet New-AzDataLakeGen2Item
.
En este ejemplo se agrega un directorio denominado my-directory
a un contenedor.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
New-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Directory
En este ejemplo se agrega el mismo directorio, pero también se establecen los permisos, la máscara de permisos, los valores de propiedad y los valores de metadatos.
$dir = New-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Directory -Permission rwxrwxrwx -Umask ---rwx--- -Property @{"ContentEncoding" = "UDF8"; "CacheControl" = "READ"} -Metadata @{"tag1" = "value1"; "tag2" = "value2" }
Visualización de las propiedades de directorio
En este ejemplo se obtiene un directorio con el cmdlet Get-AzDataLakeGen2Item
y, después, se imprimen los valores de propiedad en la consola.
$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 obtener el directorio raíz del contenedor, omita el parámetro -Path
.
Cambio de nombre o traslado de un directorio
Cambie el nombre de un directorio o muévalo con el cmdlet Move-AzDataLakeGen2Item
.
En este ejemplo se cambia el nombre de un subdirectorio de my-directory
a 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 el parámetro -Force
si desea sobrescribir sin preguntar.
En este ejemplo se mueve un directorio denominado my-directory
a un subdirectorio de my-directory-2
denominado 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
Eliminación de un directorio
Elimine un directorio con el cmdlet Remove-AzDataLakeGen2Item
.
En este ejemplo se elimina un directorio denominado my-directory
.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
Remove-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
Puede usar el parámetro -Force
para quitar el archivo sin preguntar.
Descarga de un directorio
Descargue un archivo de un directorio con el cmdlet Get-AzDataLakeGen2ItemContent
.
En este ejemplo se descarga un archivo denominado upload.txt
de un directorio denominado my-directory
.
$filesystemName = "my-file-system"
$filePath = "my-directory/upload.txt"
$downloadFilePath = "download.txt"
Get-AzDataLakeGen2ItemContent -Context $ctx -FileSystem $filesystemName -Path $filePath -Destination $downloadFilePath
Lista del contenido del directorio
Muestre el contenido de un directorio con el cmdlet Get-AzDataLakeGen2ChildItem
. Puede usar el parámetro opcional -OutputUserPrincipalName
para obtener el nombre (en lugar del identificador de objeto) de los usuarios.
En este ejemplo se muestra el contenido de un directorio denominado my-directory
.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem $filesystemName -Path $dirname -OutputUserPrincipalName
En el ejemplo siguiente se enumeran las propiedades ACL
, Permissions
, Group
y Owner
de cada elemento del directorio. Se necesita el parámetro -FetchProperty
para obtener los valores de la propiedad 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
Nota:
Para mostrar el contenido del directorio raíz del contenedor, omita el parámetro -Path
.
Carga de un archivo en un directorio
Cargue un archivo en un directorio con el cmdlet New-AzDataLakeGen2Item
.
En este ejemplo se carga un archivo denominado upload.txt
en un directorio denominado 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
En este ejemplo se carga el mismo archivo, pero después se establecen los permisos, la máscara de permisos, los valores de propiedad y los valores de metadatos del archivo de destino. En este ejemplo también se imprimen estos valores en la consola.
$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 cargar un archivo en el directorio raíz del contenedor, omita el parámetro -Path
.
Visualización de las propiedades del archivo
En este ejemplo se obtiene un archivo con el cmdlet Get-AzDataLakeGen2Item
y, después, se imprimen los valores de propiedad en la consola.
$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
Eliminación de un archivo
Elimine un archivo con el cmdlet Remove-AzDataLakeGen2Item
.
En este ejemplo se elimina un archivo denominado upload.txt
.
$filesystemName = "my-file-system"
$filepath = "upload.txt"
Remove-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filepath
Puede usar el parámetro -Force
para quitar el archivo sin preguntar.
Asignación de Gen1 a Gen2
En la siguiente tabla se refleja la asignación de cmdlets usados con Data Lake Storage Gen1 a cmdlets de Data Lake Storage Gen2.
Nota:
Azure Data Lake Storage Gen1 ahora se ha retirado. Consulte el anuncio de retirada aquí. Ya no se puede acceder a los recursos de Data Lake Storage Gen1. Si necesita asistencia especial, por favor póngase en contacto con nosotros.
Cmdlet de Data Lake Storage Gen1 | Cmdlet de Data Lake Storage Gen2 | Notas |
---|---|---|
Get-AzDataLakeStoreChildItem | Get-AzDataLakeGen2ChildItem | De forma predeterminada, el cmdlet Get-AzDataLakeGen2ChildItem solo muestra los elementos secundarios de primer nivel. El parámetro -Recurse muestra elementos secundarios de forma recursiva. |
Get-AzDataLakeStoreItem Get-AzDataLakeStoreItemAclEntry Get-AzDataLakeStoreItemOwner Get-AzDataLakeStoreItemPermission |
Get-AzDataLakeGen2Item | Los elementos de salida del cmdlet Get-AzDataLakeGen2Item tienen estas propiedades: Acl, Owner, Group y Permission. |
Get-AzDataLakeStoreItemContent | Get-AzDataLakeGen2FileContent | El cmdlet Get-AzDataLakeGen2FileContent descarga el contenido del archivo en el archivo local. |
Move-AzDataLakeStoreItem | Move-AzDataLakeGen2Item | |
New-AzDataLakeStoreItem | New-AzDataLakeGen2Item | Este cmdlet carga el contenido del archivo nuevo desde un archivo local. |
Remove-AzDataLakeStoreItem | Remove-AzDataLakeGen2Item | |
Set-AzDataLakeStoreItemOwner Set-AzDataLakeStoreItemPermission Set-AzDataLakeStoreItemAcl |
Update-AzDataLakeGen2Item | El cmdlet Update-AzDataLakeGen2Item actualiza solo un único elemento, y no de forma recursiva. Si desea actualizar de forma recursiva, muestre los elementos mediante el cmdlet Get-AzDataLakeStoreChildItem y, a continuación, canalice al cmdlet Update-AzDataLakeGen2Item. |
Test-AzDataLakeStoreItem | Get-AzDataLakeGen2Item | El cmdlet Get-AzDataLakeGen2Item notifica un error si el elemento no existe. |