本文介绍了如何使用 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 模块 
连接到帐户
- 打开 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
创建容器
容器充当文件的文件系统。 可以使用 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 参数删除文件,而不会看到提示。