使用 PowerShell 管理 Azure Data Lake Storage 中的目录和文件
本文介绍了如何使用 PowerShell 在具有分层命名空间的存储帐户中创建和管理目录与文件。
要了解如何获取、设置和更新目录和文件的访问控制列表 (ACL),请参阅使用 PowerShell 管理 Azure Data Lake Storage 中的 ACL。
先决条件
Azure 订阅。 有关详细信息,请参阅获取 Azure 试用版。
一个已启用分层命名空间的存储帐户。 按这些说明创建一个。
已安装 .NET Framework 4.7.2 或更高版本。 有关详细信息,请参阅下载 .NET Framework。
PowerShell
5.1
或更高版本。
安装 PowerShell 模块
使用以下命令验证安装的 PowerShell 版本是否为
5.1
或以上。echo $PSVersionTable.PSVersion.ToString()
若要升级 PowerShell 版本,请参阅升级现有的 Windows PowerShell
安装 Az.Storage 模块。
Install-Module Az.Storage -Repository PSGallery -Force
有关如何安装 PowerShell 模块的详细信息,请参阅安装 Azure PowerShell 模块
连接到帐户
选择希望命令如何获取存储帐户的授权。
选项 1:使用 Microsoft Entra ID 获取授权
如果使用此方法,系统可确保用户帐户具有适当的 Azure 基于角色的访问控制 (Azure RBAC) 分配和 ACL 权限。
打开 Windows PowerShell 命令窗口,使用
Connect-AzAccount
命令登录到 Azure 订阅,然后按照屏幕上的指示进行操作。Connect-AzAccount -Environment AzureChinaCloud
如果你的标识已关联到多个订阅,请将活动订阅设置为要在其中创建和管理目录的存储帐户的订阅。 在此示例中,请将
<subscription-id>
占位符值替换为你的订阅 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
cmdlet 创建一个文件系统。
此示例创建一个名为 my-file-system
的容器。
$filesystemName = "my-file-system"
New-AzStorageContainer -Context $ctx -Name $filesystemName
创建目录
使用 New-AzDataLakeGen2Item
cmdlet 创建目录引用。
此示例将名为 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
cmdlet 获取目录,然后将属性值输出到控制台。
$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
cmdlet 重命名或移动目录。
此示例将目录的名称 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-subdirectory
的 my-directory-2
子目录。
$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
cmdlet 删除目录。
此示例删除名为 my-directory
的目录。
$filesystemName = "my-file-system"
$dirname = "my-directory/"
Remove-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
可以使用 -Force
参数删除文件,而不会看到提示。
从目录下载
使用 Get-AzDataLakeGen2ItemContent
cmdlet 从目录中下载文件。
此示例从名为 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
cmdlet 列出目录的内容。 可以使用可选参数 -OutputUserPrincipalName
来获取用户的名称(而不是对象 ID)。
此示例列出名为 my-directory
的目录的内容。
$filesystemName = "my-file-system"
$dirname = "my-directory/"
Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem $filesystemName -Path $dirname -OutputUserPrincipalName
下面的示例列出目录中每个项的 ACL
、Permissions
、Group
和 Owner
属性。 获取 ACL
属性的值需要 -FetchProperty
参数。
$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
cmdlet 将文件上传到目录。
此示例将名为 upload.txt
的文件上传到名为 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
此示例上传同一文件,但随后会设置目标文件的权限、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
cmdlet 获取文件,然后将属性值输出到控制台。
$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
cmdlet 删除文件。
此示例删除名为 upload.txt
的文件。
$filesystemName = "my-file-system"
$filepath = "upload.txt"
Remove-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filepath
可以使用 -Force
参数删除文件,而不会看到提示。