Управление каталогами и файлами в Azure Data Lake Storage 2-го поколения с помощью PowerShell

В этой статье показано, как использовать PowerShell для создания каталогов и файлов в учетных записях хранения с иерархическим пространством имен, а также управления ими.

Дополнительные сведения о получении, установке и обновлении списков управления доступом (ACL) для каталогов и файлов см. в разделе Использование PowerShell для управления списками ACL в Azure Data Lake Storage 2-го поколения.

Ссылка | Сопоставление 1-го и 2-го поколения | Отправка отзывов

Предварительные требования

  • Подписка Azure. Дополнительные сведения см. в статье получение бесплатной пробной версии Azure.

  • В учетной записи хранения включено иерархическое пространство имен. Выполните эти инструкции, чтобы создать учетную запись.

  • Установлена платформа .NET Framework 4.7.2 или больше. дополнительные сведения см. в разделе Download платформа .NET Framework.

  • PowerShell версии 5.1 или выше.

Установка модуля PowerShell

  1. Убедитесь, что установлена версия PowerShell 5.1 или выше, выполнив следующую команду.

    echo $PSVersionTable.PSVersion.ToString()
    

    Сведения об обновлении версии PowerShell см. в разделе Обновление существующей версии Windows PowerShell.

  2. Установите модуль Az.Storage.

    Install-Module Az.Storage -Repository PSGallery -Force  
    

    Дополнительные сведения об установке модулей PowerShell см. в разделе Установка модуля Azure PowerShell.

Подключение к учетной записи

Выберите способ получения командами прав доступа к учетной записи хранения.

Вариант 1. Авторизация с помощью Azure Active Directory (Azure AD)

При таком подходе система гарантирует, что ваша учетная запись пользователя имеет соответствующие разрешения доступа на основе ролей Azure (Azure RBAC) и ACL.

  1. Откройте окно управления Windows PowerShell, затем войдите в свою подписку Azure с помощью команды Connect-AzAccount и следуйте инструкциям на экране.

    Connect-AzAccount
    
  2. Если удостоверение связано с несколькими подписками, установите в качестве активной подписку учетной записи хранения, в которой нужно создавать папки и управлять ими. В этом примере замените значение заполнителя <subscription-id> идентификатором своей подписки.

    Select-AzSubscription -SubscriptionId <subscription-id>
    
  3. Получите объект контекста учетной записи хранения.

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

Вариант 2. Авторизация с помощью ключа учетной записи хранения

При таком подходе система не проверяет разрешения Azure RBAC или ACL. Получите контекст учетной записи хранения с помощью ключа учетной записи.

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

Создание контейнера

Контейнер выступает в качестве файловой системы для файлов. Вы можете создать ее с помощью командлета New-AzStorageContainer.

В этом примере создается контейнер с именем my-file-system.

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

Создание каталога

Создайте ссылку на каталог с помощью командлета New-AzDataLakeGen2Item.

В этом примере в контейнер добавляется каталог с именем my-directory.

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

В этом примере добавляется тот же каталог, но также устанавливаются разрешения, значения umask, значения свойств и значения метаданных.

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

Отображение свойств каталога

В этом примере с помощью командлета Get-AzDataLakeGen2Item получается каталог, а затем значения свойств выводятся на консоль.

$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

Примечание

Чтобы получить корневой каталог контейнера, опустите параметр -Path.

Переименование или перемещение каталога

Переименуйте или переместите каталог с помощью командлета Move-AzDataLakeGen2Item.

В этом примере папка my-directory переименовывается на 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

Примечание

Используйте параметр -Force, если требуется перезаписать без запросов.

В этом примере каталог с именем my-directory перемещается в подкаталог 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

Удаление каталога

Удалите каталог с помощью командлета Remove-AzDataLakeGen2Item.

В этом примере удаляется каталог my-directory.

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

С помощью параметра -Force можно удалить файл без запроса.

Скачивание из каталога

Скачайте файл из каталога, используя командлет Get-AzDataLakeGen2ItemContent.

В этом примере из каталога my-directory скачивается файл upload.txt.

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

Вывод содержимого каталогов

Выведите содержимое каталога с помощью командлета Get-AzDataLakeGen2ChildItem. Можно использовать необязательный параметр -OutputUserPrincipalName, чтобы получать имена (вместо идентификатора объекта) пользователей.

В этом примере перечисляется содержимое каталога с именем my-directory.

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

В следующем примере перечисляются свойства ACL, Permissions, Group и Owner для каждого элемента в каталоге. Параметр -FetchProperty необходим для получения значений для свойства 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

Примечание

Чтобы получить список содержимого корневого каталога контейнера, не указывайте параметр -Path.

Отправка файла в каталог

Отправьте файл в каталог с помощью командлета New-AzDataLakeGen2Item.

В этом примере в каталог my-directory отправляется файл upload.txt.

$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

В этом примере загружается тот же файл, а затем задаются разрешения, значения umask, значения свойств и значения метаданных целевого файла. В этом примере эти значения также выводятся на консоль.

$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

Примечание

Чтобы передать файл в корневой каталог контейнера, опустите параметр -Path.

Отображение свойств файла

В этом примере с помощью командлета Get-AzDataLakeGen2Item получается файл, а затем значения свойств выводятся на консоль.

$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

Удаление файла

Удалите файл, выполнив командлет Remove-AzDataLakeGen2Item.

В этом примере удаляется файл с именем upload.txt.

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

С помощью параметра -Force можно удалить файл без запроса.

Сопоставление 1-го и 2-го поколения

В следующей таблице показано, как командлеты, используемые для Data Lake Storage 1-го поколения, сопоставляются с командлетами для Data Lake Storage 2-го поколения.

Командлет Data Lake Storage 1-го поколения Командлет Data Lake Storage 2-го поколения Примечания
Get-AzDataLakeStoreChildItem Get-AzDataLakeGen2ChildItem По умолчанию командлет Get-AzDataLakeGen2ChildItem перечисляет только дочерние элементы первого уровня. Параметр -Recurse рекурсивно перечисляет дочерние элементы.
Get-AzDataLakeStoreItem
Get-AzDataLakeStoreItemAclEntry
Get-AzDataLakeStoreItemOwner
Get-AzDataLakeStoreItemPermission
Get-AzDataLakeGen2Item Выходные элементы командлета Get-AzDataLakeGen2Item имеют следующие свойства: ACL, владелец, группа, разрешение.
Get-AzDataLakeStoreItemContent Get-AzDataLakeGen2FileContent Командлет Get-AzDataLakeGen2FileContent загружает содержимое файла в локальный файл.
Move-AzDataLakeStoreItem Move-AzDataLakeGen2Item
New-AzDataLakeStoreItem New-AzDataLakeGen2Item Этот командлет загружает новое содержимое файла из локального файла.
Remove-AzDataLakeStoreItem Remove-AzDataLakeGen2Item
Set-AzDataLakeStoreItemOwner
Set-AzDataLakeStoreItemPermission
Set-AzDataLakeStoreItemAcl
Update-AzDataLakeGen2Item Командлет Update-AzDataLakeGen2Item обновляет только один элемент, не рекурсивно. Если требуется рекурсивное обновление, перечислите элементы с помощью командлета Get-AzDataLakeStoreChildItem, а затем передайте в командлет Update-AzDataLakeGen2Item.
Test-AzDataLakeStoreItem Get-AzDataLakeGen2Item Если элемент не существует, командлет Get-AzDataLakeGen2Item сообщит об ошибке.

См. также раздел