Menggunakan PowerShell untuk mengelola direktori dan file di Azure Data Lake Storage Gen2

Artikel ini menunjukkan cara menggunakan PowerShell untuk membuat dan mengelola direktori serta file di akun penyimpanan yang memiliki namespace hierarkis.

Untuk mempelajari tentang cara mendapatkan, mengatur, dan memperbarui daftar kontrol akses (ACL) direktori dan file, lihat Menggunakan PowerShell untuk mengelola ACL di Azure Data Lake Storage Gen2.

Referensi | Pemetaan Gen1 ke Gen2 | Memberikan umpan balik

Prasyarat

  • Langganan Azure. Untuk informasi selengkapnya, lihat Dapatkan uji coba gratis Azure.

  • Akun penyimpanan dengan namespace hierarkis aktif. Ikuti petunjuk berikut untuk membuatnya.

  • Terpasang .NET Framework versi 4.7.2 atau lebih tinggi. Untuk informasi selengkapnya, lihat Mengunduh .NET Framework.

  • Versi PowerShell 5.1 atau lebih tinggi.

Pasang modul PowerShell

  1. Pastikan bahwa PowerShell yang telah diinstal adalah versi 5.1 atau lebih tinggi dengan menggunakan perintah berikut.

    echo $PSVersionTable.PSVersion.ToString()
    

    Untuk memutakhirkan versi PowerShell Anda, lihat Memutakhirkan Windows PowerShell yang sudah ada

  2. Pasang modul Az.Storage.

    Install-Module Az.Storage -Repository PSGallery -Force  
    

    Untuk informasi selengkapnya tentang cara menginstal modul PowerShell, lihat Menginstal modul Azure PowerShell

Sambungkan ke akun

Pilih cara perintah Anda mendapatkan otorisasi ke akun penyimpanan sesuai yang Anda inginkan.

Opsi 1: Dapatkan otorisasi dengan menggunakan Azure Active Directory (Azure AD)

Dengan pendekatan ini, sistem memastikan akun pengguna Anda memiliki penetapan kontrol akses berbasis peran Azure (Azure RBAC) dan izin ACL yang sesuai.

  1. Buka jendela perintah Windows PowerShell, lalu masuk ke langganan Azure Anda dengan Connect-AzAccount perintah dan ikuti petunjuk di layar.

    Connect-AzAccount
    
  2. Jika identitas Anda dikaitkan dengan lebih dari satu langganan, atur langganan aktif Anda ke langganan akun penyimpanan tempat Anda ingin membuat dan mengelola direktori. Dalam contoh ini, ganti <subscription-id> nilai tempat penampung dengan ID langganan Anda.

    Select-AzSubscription -SubscriptionId <subscription-id>
    
  3. Dapatkan konteks akun penyimpanan.

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

Opsi 2: Dapatkan otorisasi dengan menggunakan kunci akun penyimpanan

Dengan pendekatan ini, sistem tidak memeriksa izin Azure RBAC atau ACL. Dapatkan konteks akun penyimpanan dengan menggunakan kunci akun.

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

Membuat kontainer

Kontainer bertindak sebagai sistem file untuk file Anda. Anda dapat membuatnya dengan menggunakan New-AzStorageContainer cmdlet.

Contoh ini membuat kontainer bernama my-file-system.

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

Buat direktori

Buat referensi direktori menggunakan New-AzDataLakeGen2Item cmdlet.

Contoh ini menambahkan direktori bernama my-directory ke kontainer.

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

Contoh ini menambahkan direktori yang sama, sekaligus mengatur izin, umask, nilai properti, dan nilai metadata.

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

Perlihatkan properti direktori

Contoh ini mendapatkan direktori dengan menggunakan Get-AzDataLakeGen2Item cmdlet, lalu mencetak nilai properti ke konsol.

$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

Catatan

Untuk mendapatkan direktori akar kontainer, hilangkan -Path parameter.

Ganti nama atau pindahkan direktori

Ganti nama atau pindahkan direktori dengan menggunakan Move-AzDataLakeGen2Item cmdlet.

Contoh ini mengganti nama direktori dari nama my-directory menjadi 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

Catatan

Gunakan parameter -Force jika Anda ingin menimpa tanpa perintah.

Contoh ini memindahkan direktori bernama my-directory ke subdirektori my-directory-2 bernama 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

Menghapus direktori

Menghapus direktori dengan menggunakan Remove-AzDataLakeGen2Item cmdlet.

Contoh ini menghapus direktori bernama my-directory.

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

Anda dapat menggunakan parameter -Force untuk menghapus file tanpa perintah.

Mengunduh dari direktori

Mengunduh file dari direktori dengan menggunakan Get-AzDataLakeGen2ItemContent cmdlet.

Contoh ini mengunduh file bernama upload.txt dari direktori bernama my-directory.

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

Daftar isi direktori

Mencantumkan konten direktori dengan menggunakan Get-AzDataLakeGen2ChildItem cmdlet. Anda dapat menggunakan parameter opsional -OutputUserPrincipalName untuk mendapatkan nama (bukan ID objek) pengguna.

Contoh ini mencantumkan konten direktori bernama my-directory.

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

Contoh berikut mencantumkan properti ACL, Permissions, Group, dan Owner setiap item dalam direktori. -FetchPropertyParameter diperlukan untuk mendapatkan nilai bagi ACL properti.

$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

Catatan

Untuk mencantumkan konten direktori akar kontainer, hilangkan parameter -Path.

Mengunggah file ke direktori

Mengunggah file ke direktori dengan menggunakan New-AzDataLakeGen2Item cmdlet.

Contoh ini mengunggah file bernama upload.txt ke direktori bernama 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

Contoh ini mengunggah file yang sama, tetapi kemudian mengatur izin, umask, nilai properti, dan nilai metadata file tujuan. Contoh ini juga mencetak nilai-nilai ini ke konsol.

$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

Catatan

Untuk mengunggah file ke direktori akar kontainer, hilangkan parameter -Path.

Perlihatkan properti file

Contoh ini mendapatkan file dengan menggunakan Get-AzDataLakeGen2Item cmdlet, lalu mencetak nilai properti ke konsol.

$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

Hapus file

Hapus file dengan menggunakan Remove-AzDataLakeGen2Item cmdlet.

Contoh ini menghapus file bernama upload.txt.

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

Anda dapat menggunakan parameter -Force untuk menghapus file tanpa perintah.

Pemetaan Gen1 ke Gen2

Tabel berikut ini menunjukkan cara cmdlet yang digunakan untuk memetakan Azure Data Lake Storage Gen1 ke cmdlet untuk Azure Data Lake Storage Gen2.

Cmdlet Azure Data Lake Storage Gen1 Cmdlet Azure Data Lake Storage Gen2 Catatan
Get-AzDataLakeStoreChildItem Get-AzDataLakeGen2ChildItem Secara default, cmdlet Get-AzDataLakeGen2ChildItem hanya mencantumkan item anak tingkat pertama. Parameter -Recurse mencantumkan item anak secara rekursif.
Get-AzDataLakeStoreItem
Get-AzDataLakeStoreItemAclEntry
Get-AzDataLakeStoreItemOwner
Get-AzDataLakeStoreItemPermission
Get-AzDataLakeGen2Item Item output dari cmdlet Get-AzDataLakeGen2Item memiliki properti-properti berikut: Acl, Pemilik, Grup, Izin.
Get-AzDataLakeStoreItemContent Get-AzDataLakeGen2FileContent Cmdlet Get-AzDataLakeGen2FileContent mengunduh konten file ke file lokal.
Move-AzDataLakeStoreItem Move-AzDataLakeGen2Item
New-AzDataLakeStoreItem New-AzDataLakeGen2Item Cmdlet ini mengunggah konten file baru dari file lokal.
Remove-AzDataLakeStoreItem Remove-AzDataLakeGen2Item
Set-AzDataLakeStoreItemOwner
Set-AzDataLakeStoreItemPermission
Set-AzDataLakeStoreItemAcl
Update-AzDataLakeGen2Item Cmdlet Update-AzDataLakeGen2Item memperbarui satu item saja, dan tidak secara rekursif. Jika ingin memperbarui secara rekursif, cantumkan item dengan menggunakan cmdlet Get-AzDataLakeStoreChildItem, lalu alur ke cmdlet Update-AzDataLakeGen2Item.
Test-AzDataLakeStoreItem Get-AzDataLakeGen2Item Cmdlet Get-AzDataLakeGen2Item akan melaporkan kesalahan jika item tidak ada.

Lihat juga