PowerShell을 사용하여 Azure Data Lake Storage에서 디렉터리 및 파일 관리
이 문서에서는 PowerShell을 사용하여 계층 구조 네임스페이스가 있는 스토리지 계정에서 디렉터리 및 파일을 만들고 관리하는 방법을 보여 줍니다.
디렉터리 및 파일의 ACL(액세스 제어 목록)을 가져와서 설정하고 업데이트하는 방법에 대한 자세한 내용은 PowerShell을 사용하여 Azure Data Lake Storage에서 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 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
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-subdirectory
디렉터리의 하위 디렉터리인 my-directory-2
로 이동합니다.
$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
을 사용하여 사용자의 개체 ID 대신 이름을 가져올 수 있습니다.
이 예제에서는 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의 cmdlet에 매핑되는 방법을 보여 줍니다.
참고 항목
Azure Data Lake Storage Gen1은 이제 사용 중지됩니다. 여기에서 사용 중지 공지 사항을 확인합니다. Data Lake Storage Gen1 리소스에 더 이상 액세스할 수 없습니다. 특별한 도움이 필요한 경우 문의해 주세요.
Data Lake Storage Gen1 cmdlet | Data Lake Storage cmdlet | 주의 |
---|---|---|
Get-AzDataLakeStoreChildItem | Get-AzDataLakeGen2ChildItem | 기본적으로 Get-AzDataLakeGen2ChildItem cmdlet은 첫 번째 수준의 자식 항목만 나열합니다. -Recurse 매개 변수는 자식 항목을 재귀적으로 나열합니다. |
Get-AzDataLakeStoreItem Get-AzDataLakeStoreItemAclEntry Get-AzDataLakeStoreItemOwner Get-AzDataLakeStoreItemPermission |
Get-AzDataLakeGen2Item | Get-AzDataLakeGen2Item cmdlet의 출력 항목에는 Acl, Owner, Group, Permission 속성이 있습니다. |
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에서 오류를 보고합니다. |