PowerShell を使用して Azure Data Lake Storage Gen2 でディレクトリとファイルを管理する

この記事では、階層型名前空間が有効になっているストレージ アカウントで、PowerShell を使用してディレクトリとファイルを作成および管理する方法を示します。

ディレクトリとファイルのアクセス制御リスト (ACL) を取得、設定、および更新する方法については、「Azure Data Lake Storage Gen2 で PowerShell を使用して ACL を管理する」を参照してください。

リファレンス | Gen1 から Gen2 へのマッピング | フィードバックの送信

前提条件

  • Azure サブスクリプション。 詳細については、Azure 無料試用版の取得に関するページを参照してください。

  • 階層型名前空間が有効になっているストレージ アカウント。 作成するには、こちらの手順に従います。

  • .NET Framework は 4.7.2 以降がインストールされていること。 詳細については、「.NET Framework のダウンロード」参照してください。

  • PowerShell バージョン 5.1 以降。

PowerShell モジュールをインストールする

  1. 次のコマンドを使用して、インストールされている PowerShell のバージョンが 5.1 以降であることを確認します。

    echo $PSVersionTable.PSVersion.ToString()
    

    お使いの PowerShell のバージョンをアップグレードするには、「既存の Windows PowerShell をアップグレードする」を参照してください。

  2. Az.Storage モジュールをインストールします。

    Install-Module Az.Storage -Repository PSGallery -Force  
    

    PowerShell モジュールのインストール方法の詳細については、「Azure PowerShell モジュールのインストール」を参照してください。

アカウントに接続する

コマンドでストレージ アカウントに対する承認を取得する方法を選択します。

オプション 1: Azure Active Directory (Azure AD) を使用して認可を取得する

この方法を使用すると、ご利用のユーザー アカウントに、適切な Azure ロールベースのアクセス制御 (Azure RBAC) の割り当てと ACL のアクセス許可がシステムによって確実に付与されます。

  1. Windows PowerShell コマンド ウィンドウを開き、Connect-AzAccount コマンドで Azure サブスクリプションにサインインし、画面上の指示に従います。

    Connect-AzAccount
    
  2. 自分の ID が複数のサブスクリプションに関連付けられている場合は、アクティブなサブスクリプションを、ディレクトリを作成して管理するストレージ アカウントのサブスクリプションに設定します。 この例では、<subscription-id> プレースホルダーの値をサブスクリプションの ID に置き換えます。

    Select-AzSubscription -SubscriptionId <subscription-id>
    
  3. ストレージ アカウント コンテキストを取得します。

    $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 コマンドレットを使用して、ファイル システムを作成できます。

この例では、my-file-system という名前のコンテナーを作成します。

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

ディレクトリを作成する

New-AzDataLakeGen2Item コマンドレットを使用して、ディレクトリ参照を作成します。

この例では、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 コマンドレットを使用してディレクトリを取得し、次にプロパティ値をコンソールに出力します。

$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 コマンドレットを使用して、ディレクトリの名前を変更するか、ディレクトリを移動します。

この例では、ディレクトリの名前を 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 コマンドレットを使用してディレクトリを削除します。

この例では、my-directory という名前のディレクトリを削除します。

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

-Force パラメーターを使用すると、プロンプトを表示せずにファイルを削除できます。

ディレクトリからダウンロードする

Get-AzDataLakeGen2ItemContent コマンドレットを使用して、ディレクトリからファイルをダウンロードします。

この例では、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 コマンドレットを使用して、ディレクトリの内容を一覧表示します。 省略可能なパラメーター -OutputUserPrincipalName を使用すると、ユーザーの名前 (オブジェクト ID ではなく) を取得できます。

この例では、my-directory という名前のディレクトリの内容を一覧表示します。

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

次の例では、ディレクトリ内の各項目の ACLPermissionsGroup、および 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 コマンドレットを使用して、ファイルをディレクトリにアップロードします。

この例では、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 コマンドレットを使用してファイルを取得し、次にプロパティ値をコンソールに出力します。

$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 コマンドレットを使用してファイルを削除します。

この例では、upload.txt という名前のファイルを削除します。

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

-Force パラメーターを使用すると、プロンプトを表示せずにファイルを削除できます。

Gen1 から Gen2 へのマッピング

次の表は、Data Lake Storage Gen1 で使用するコマンドレットが、Data Lake Storage Gen2 のコマンドレットにどのように対応するかを示しています。

Data Lake Storage Gen1 のコマンドレット Data Lake Storage Gen2 のコマンドレット Notes
Get-AzDataLakeStoreChildItem Get-AzDataLakeGen2ChildItem 既定では、Get-AzDataLakeGen2ChildItem コマンドレットは、最初のレベルの子項目のみを一覧表示します。 -Recurse パラメーターは、子項目を再帰的に一覧表示します。
Get-AzDataLakeStoreItem
Get-AzDataLakeStoreItemAclEntry
Get-AzDataLakeStoreItemOwner
Get-AzDataLakeStoreItemPermission
Get-AzDataLakeGen2Item Get-AzDataLakeGen2Item コマンドレットの出力項目には、次のプロパティが含まれます。Acl、Owner、Group、Permission です。
Get-AzDataLakeStoreItemContent Get-AzDataLakeGen2FileContent Get-AzDataLakeGen2FileContent コマンドレットは、ファイルのコンテンツをローカル ファイルにダウンロードします。
Move-AzDataLakeStoreItem Move-AzDataLakeGen2Item
New-AzDataLakeStoreItem New-AzDataLakeGen2Item このコマンドレットは、ローカル ファイルから新しいファイルのコンテンツをアップロードします。
Remove-AzDataLakeStoreItem Remove-AzDataLakeGen2Item
Set-AzDataLakeStoreItemOwner
Set-AzDataLakeStoreItemPermission
Set-AzDataLakeStoreItemAcl
Update-AzDataLakeGen2Item Update-AzDataLakeGen2Item コマンドレットは、再帰的ではなく、1 つの項目のみを更新します。 再帰的に更新する場合は、Get-AzDataLakeStoreChildItem コマンドレットを使用して項目を一覧表示して、Update-AzDataLakeGen2Item コマンドレットに渡します。
Test-AzDataLakeStoreItem Get-AzDataLakeGen2Item 項目が存在しない場合、Get-AzDataLakeGen2Item コマンドレットではエラーを報告します。

関連項目