Управление каталогами и файлами в Azure Data Lake Storage с помощью PowerShell
В этой статье показано, как использовать PowerShell для создания каталогов и файлов в учетных записях хранения с иерархическим пространством имен, а также управления ими.
Сведения о том, как получить, задать и обновить списки управления доступом (ACL) каталогов и файлов, см. в статье "Использование PowerShell для управления списками управления доступом" в Azure Data Lake Storage.
Ссылка | Сопоставление 1-го и 2-го поколения | Отправка отзывов
Необходимые компоненты
Подписка Azure. См. дополнительные сведения о бесплатной пробной версии Azure.
Учетная запись хранения, в которой включено иерархическое пространство имен. Выполните эти инструкции, чтобы создать учетную запись.
Установлена платформа .NET Framework 4.7.2 или больше. Подробнее см. в разделе Загрузка .NET Framework.
PowerShell версии
5.1
или выше.
Установка модуля PowerShell
Убедитесь, что установленная
5.1
версия PowerShell или более поздняя с помощью следующей команды.echo $PSVersionTable.PSVersion.ToString()
Сведения об обновлении версии PowerShell см. в разделе Обновление существующей версии Windows PowerShell
Установите модуль Az.Storage.
Install-Module Az.Storage -Repository PSGallery -Force
Дополнительные сведения об установке модулей PowerShell см. в статье Установка модуля Azure PowerShell.
Подключение к учетной записи
Выберите способ получения командами прав доступа к учетной записи хранения.
Вариант 1. Получение авторизации с помощью идентификатора Microsoft Entra
При таком подходе система гарантирует, что ваша учетная запись пользователя имеет соответствующие разрешения доступа на основе ролей Azure (Azure RBAC) и ACL.
Откройте окно управления Windows PowerShell, затем войдите в свою подписку Azure с помощью команды
Connect-AzAccount
и следуйте инструкциям на экране.Connect-AzAccount
Если удостоверение связано с несколькими подписками, установите в качестве активной подписку учетной записи хранения, в которой нужно создавать папки и управлять ими. В этом примере замените значение заполнителя
<subscription-id>
идентификатором своей подписки.Select-AzSubscription -SubscriptionId <subscription-id>
Получите объект контекста учетной записи хранения.
$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.
Примечание.
Azure Data Lake Storage 1-го поколения теперь прекращена. Ознакомьтесь с объявлением о выходе на пенсию здесь. Data Lake Storage 1-го поколения ресурсы больше не доступны. Если вам нужна специальная помощь, обратитесь к нам.
Командлет Data Lake Storage 1-го поколения | Командлет Data Lake Storage | Примечания. |
---|---|---|
Get-AzDataLakeStoreChildItem | Get-AzDataLakeGen2ChildItem | По умолчанию командлет Get-AzDataLakeGen2ChildItem перечисляет только дочерние элементы первого уровня. Параметр -Recurse рекурсивно перечисляет дочерние элементы. |
Get-AzDataLakeStoreItem Get-AzDataLakeStoreItemAclEntry Get-AzDataLakeStoreItemOwner Get-AzDataLakeStoreItemPermission |
Get-AzDataLakeGen2Item | Выходные элементы командлета Get-AzDataLakeGen2Item имеют следующие свойства: Acl, Owner, Group, Permission. |
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 сообщает об ошибке, если элемент не существует. |