Använda PowerShell för att hantera kataloger och filer i Azure Data Lake Storage Gen2

Den här artikeln visar hur du använder PowerShell för att skapa och hantera kataloger och filer i lagringskonton som har en hierarkisk namnrymd.

Mer information om hur du hämtar, anger och uppdaterar åtkomstkontrollistor (ACL) för kataloger och filer finns i Använda PowerShell för att hantera ACL:er i Azure Data Lake Storage Gen2.

Referens | Gen1 till Gen2-mappning | Ge feedback

Förutsättningar

Installera PowerShell-modulen

  1. Kontrollera att versionen av PowerShell som har installerats 5.1 är eller högre med hjälp av följande kommando.

    echo $PSVersionTable.PSVersion.ToString()
    

    Information om hur du uppgraderar din version av PowerShell finns i Uppgradera Windows PowerShell

  2. Installera Az.Storage modul.

    Install-Module Az.Storage -Repository PSGallery -Force  
    

    Mer information om hur du installerar PowerShell-moduler finns i Installera Azure PowerShell modulen

Anslut till kontot

Välj hur du vill att dina kommandon ska få auktorisering till lagringskontot.

Alternativ 1: Få auktorisering med hjälp Azure Active Directory (Azure AD)

Med den här metoden ser systemet till att ditt användarkonto har rätt tilldelningar av rollbaserad åtkomstkontroll i Azure (Azure RBAC) och ACL-behörigheter.

  1. Öppna ett Windows PowerShell kommandofönster och logga sedan in på din Azure-prenumeration med kommandot och Connect-AzAccount följ anvisningarna på skärmen.

    Connect-AzAccount
    
  2. Om din identitet är associerad med mer än en prenumeration anger du din aktiva prenumeration till prenumerationen på det lagringskonto som du vill skapa och hantera kataloger i. I det här exemplet ersätter <subscription-id> du platshållarvärdet med ID:t för din prenumeration.

    Select-AzSubscription -SubscriptionId <subscription-id>
    
  3. Hämta lagringskontots kontext.

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

Alternativ 2: Få auktorisering med hjälp av lagringskontonyckeln

Med den här metoden kontrollerar inte systemet Azure RBAC- eller ACL-behörigheter. Hämta lagringskontots kontext med hjälp av en kontonyckel.

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

Skapa en container

En container fungerar som ett filsystem för dina filer. Du kan skapa en med hjälp av New-AzStorageContainer cmdleten .

I det här exemplet skapas en container med namnet my-file-system .

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

Skapa en katalog

Skapa en katalogreferens med hjälp av New-AzDataLakeGen2Item cmdleten .

I det här exemplet läggs en katalog med my-directory namnet till i en container.

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

Det här exemplet lägger till samma katalog, men anger även behörigheter, umask, egenskapsvärden och metadatavärden.

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

Visa katalogegenskaper

Det här exemplet hämtar en katalog med Get-AzDataLakeGen2Item hjälp av cmdleten och skriver sedan ut egenskapsvärden till konsolen.

$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

Anteckning

Om du vill hämta containerns rotkatalog utelämnar du -Path parametern .

Byta namn på eller flytta en katalog

Byt namn på eller flytta en katalog med hjälp av Move-AzDataLakeGen2Item cmdleten .

Det här exemplet byter namn på en katalog från my-directory namnet till 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

Anteckning

Använd -Force parametern om du vill skriva över utan uppmaningar.

I det här exemplet flyttas en katalog my-directory med namnet till en underkatalog med namnet 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

Ta bort en katalog

Ta bort en katalog med hjälp av Remove-AzDataLakeGen2Item cmdleten .

Det här exemplet tar bort en katalog med namnet my-directory .

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

Du kan använda -Force parametern för att ta bort filen utan att fråga.

Ladda ned från en katalog

Ladda ned en fil från en katalog med hjälp av Get-AzDataLakeGen2ItemContent cmdleten .

Det här exemplet laddar ned en fil med upload.txt namnet från en katalog med namnet my-directory .

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

Lista kataloginnehåll

Visa en lista över innehållet i en katalog med hjälp av Get-AzDataLakeGen2ChildItem cmdleten . Du kan använda den valfria -OutputUserPrincipalName parametern för att hämta namnet (i stället för objekt-ID:t) på användarna.

I det här exemplet visas innehållet i en katalog med namnet my-directory .

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

I följande exempel visas ACL egenskaperna , , och för varje objekt i Permissions Group Owner katalogen. Parametern -FetchProperty krävs för att hämta värden för egenskapen 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

Anteckning

Om du vill visa innehållet i containerns rotkatalog utelämnar du -Path parametern .

Upload en fil till en katalog

Upload en fil till en katalog med hjälp av New-AzDataLakeGen2Item cmdleten .

Det här exemplet laddar upp en fil med upload.txt namnet till en katalog med namnet 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

Det här exemplet laddar upp samma fil, men anger sedan behörigheterna, umask, egenskapsvärdena och metadatavärdena för målfilen. Det här exemplet skriver även ut dessa värden till konsolen.

$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

Anteckning

Om du vill ladda upp en fil till containerns rotkatalog utelämnar du -Path parametern .

Visa filegenskaper

Det här exemplet hämtar en fil med Get-AzDataLakeGen2Item hjälp av cmdleten och skriver sedan ut egenskapsvärden till konsolen.

$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

Ta bort en fil

Ta bort en fil med hjälp av Remove-AzDataLakeGen2Item cmdleten .

Det här exemplet tar bort en fil med namnet upload.txt .

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

Du kan använda -Force parametern för att ta bort filen utan att fråga.

Gen1 till Gen2-mappning

Följande tabell visar hur cmdletarna som används för Data Lake Storage Gen1 mappar till cmdletarna för Data Lake Storage Gen2.

Data Lake Storage Gen1-cmdlet Data Lake Storage Gen2-cmdlet Kommentarer
Get-AzDataLakeStoreChildItem Get-AzDataLakeGen2ChildItem Som standard visar Get-AzDataLakeGen2ChildItem cmdleten endast de underordnade objekten på den första nivån. Parametern -Recurse visar underordnade objekt rekursivt.
Get-AzDataLakeStoreItem
Get-AzDataLakeStoreItemAclEntry
Get-AzDataLakeStoreItemOwner
Get-AzDataLakeStoreItemPermission
Get-AzDataLakeGen2Item Utdataobjekten för Get-AzDataLakeGen2Item-cmdleten har följande egenskaper: Acl, Ägare, Grupp, Behörighet.
Get-AzDataLakeStoreItemContent Get-AzDataLakeGen2FileContent Cmdleten Get-AzDataLakeGen2FileContent filinnehåll till den lokala filen.
Move-AzDataLakeStoreItem Move-AzDataLakeGen2Item
New-AzDataLakeStoreItem New-AzDataLakeGen2Item Denna cmdlet laddar upp det nya filinnehållet från en lokal fil.
Remove-AzDataLakeStoreItem Remove-AzDataLakeGen2Item
Set-AzDataLakeStoreItemOwner
Set-AzDataLakeStoreItemPermission
Set-AzDataLakeStoreItemAcl
Update-AzDataLakeGen2Item Cmdleten Update-AzDataLakeGen2Item uppdaterar endast ett enskilt objekt och inte rekursivt. Om du vill uppdatera rekursivt listar du objekten med hjälp Get-AzDataLakeStoreChildItem cmdleten och sedan pipelinen till Update-AzDataLakeGen2Item cmdleten.
Test-AzDataLakeStoreItem Get-AzDataLakeGen2Item Den Get-AzDataLakeGen2Item cmdleten rapporterar ett fel om objektet inte finns.

Se även