PowerShell を使用して Azure Data Lake Storage でディレクトリとファイルを管理する
この記事では、階層型名前空間が有効になっているストレージ アカウントで、PowerShell を使用してディレクトリとファイルを作成および管理する方法を示します。
ディレクトリとファイルのアクセス制御リスト (ACL) を取得、設定、および更新する方法については、「Azure Data Lake Storage で PowerShell を使用して 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
自分の ID が複数のサブスクリプションに関連付けられている場合は、アクティブなサブスクリプションを、ディレクトリを作成して管理するストレージ アカウントのサブスクリプションに設定します。 この例では、
<subscription-id>
プレースホルダーの値をサブスクリプションの 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
コマンドレットを使用して、ファイル システムを作成できます。
この例では、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
Note
コンテナーのルート ディレクトリを取得するには、-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
Note
プロンプトを表示せずに上書きする場合は、-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
次の例では、ディレクトリ内の各項目の 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
Note
コンテナーのルート ディレクトリの内容を一覧表示するには、-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
Note
コンテナーのルート ディレクトリにファイルをアップロードするには、-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 のコマンドレットにどのように対応するかを示しています。
Note
Azure Data Lake Storage Gen1 は廃止されました。 廃止の通知についての詳細は、こちらを参照してください。 Data Lake Storage Gen1 リソースにアクセスできなくなりました。 特別なサポートが必要な場合は、お問い合わせください。
Data Lake Storage Gen1 のコマンドレット | Data Lake Storage コマンドレット | メモ |
---|---|---|
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 コマンドレットはエラーを報告します。 |