使用 PowerShell 管理 Azure Data Lake Storage Gen2 中的目錄和檔案
本文說明如何使用 PowerShell 在具有階層命名空間的儲存體帳戶中建立及管理目錄和檔案。
若要了解如何取得、設定及更新目錄和檔案的存取控制清單 (ACL),請參閱使用 PowerShell 管理 Azure Data Lake Storage Gen2 中的 ACL。
參考 | Gen1 至 Gen2 對應 | 提供意見反應
必要條件
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
若身分識別與多個訂用帳戶相關聯,請將使用中訂用帳戶設為您想要在其中建立和管理目錄的儲存體帳戶訂用帳戶。 在此範例中,使用訂用帳戶識別碼取代
<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
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-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
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
來取得使用者的名稱 (而不是物件識別碼)。
此範例會列出名為 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
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
參數來移除檔案,而不需要提示。
Gen1 至 Gen2 對應
下表顯示用於 Data Lake Storage Gen1 的 Cmdlet 如何對應至 Data Lake Storage Gen2 的 Cmdlet。
Data Lake Storage Gen1 Cmdlet | Data Lake Storage Gen2 Cmdlet | 備註 |
---|---|---|
Get-AzDataLakeStoreChildItem | Get-AzDataLakeGen2ChildItem | 根據預設,Get-AzDataLakeGen2ChildItem Cmdlet 只會列出第一個層級的子項目。 -Recurse 參數會以遞迴方式列出子項目。 |
Get-AzDataLakeStoreItem Get-AzDataLakeStoreItemAclEntry Get-AzDataLakeStoreItemOwner Get-AzDataLakeStoreItemPermission |
Get-AzDataLakeGen2Item | Get-AzDataLakeGen2Item Cmdlet 的輸出項目具有下列屬性:ACL、擁有者、群組、權限。 |
Get-AzDataLakeStoreItemContent | Get-AzDataLakeGen2FileContent | Get-AzDataLakeGen2FileContent Cmdlet 會將檔案內容下載至本機檔案。 |
Move-AzDataLakeStoreItem | Move-AzDataLakeGen2Item | |
New-AzDataLakeStoreItem | New-AzDataLakeGen2Item | 此 Cmdlet 會從本機檔案上傳新的檔案內容。 |
Remove-AzDataLakeStoreItem | Remove-AzDataLakeGen2Item | |
Set-AzDataLakeStoreItemOwner Set-AzDataLakeStoreItemPermission Set-AzDataLakeStoreItemAcl |
Update-AzDataLakeGen2Item | Update-AzDataLakeGen2Item Cmdlet 只會更新單一項目,而不會以遞迴方式更新。 如果要以遞迴方式更新,請使用 Get-AzDataLakeStoreChildItem Cmdlet 列出項目,然後再透過管線將其傳送至 Update-AzDataLakeGen2Item Cmdlet。 |
Test-AzDataLakeStoreItem | Get-AzDataLakeGen2Item | 如果項目不存在,Get-AzDataLakeGen2Item Cmdlet 會回報錯誤。 |