Skip to content

Commit 38499c7

Browse files
bluewwerich-wang
andauthored
[Storage] Support DatalakeGen2 GA, and upgrade Blob to Track2 SDK (#11520)
* [Storage] Support DatalakeGen2 , and upgrade Blob to Track2 SDK * [Storage] Add the change from Mark's PR for build.proj * Update the way to load Azure.Core assemblies * update NetCoreAssemblies folder name for Linux * Fix some SAS issue * update missing assembly files for Azure.Core * Update per review comments Co-authored-by: Erich(Renyong) Wang <[email protected]>
1 parent a9aa14d commit 38499c7

File tree

74 files changed

+5137
-142
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+5137
-142
lines changed

build.proj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@
173173
<!-- Delete powershell runtime files -->
174174
<PropertyGroup>
175175
<RuntimeDllsIncludeList>Microsoft.Powershell.*.dll,System*.dll,Microsoft.VisualBasic.dll,Microsoft.CSharp.dll,Microsoft.CodeAnalysis.dll,Microsoft.CodeAnalysis.CSharp.dll</RuntimeDllsIncludeList>
176-
<RuntimeDllsExcludeList>System.Security.Cryptography.ProtectedData.dll,System.Configuration.ConfigurationManager.dll,System.Runtime.CompilerServices.Unsafe.dll,System.IO.FileSystem.AccessControl.dll,System.Buffers.dll,System.Text.Encodings.Web.dll,System.CodeDom.dll,System.Management.dll</RuntimeDllsExcludeList>
176+
<RuntimeDllsExcludeList>System.Security.Cryptography.ProtectedData.dll,System.Configuration.ConfigurationManager.dll,System.Runtime.CompilerServices.Unsafe.dll,System.IO.FileSystem.AccessControl.dll,System.Buffers.dll,System.Text.Encodings.Web.dll,System.CodeDom.dll,System.Management.dll,System.Text.Json.dll,System.Threading.Tasks.Extensions.dll</RuntimeDllsExcludeList>
177177
</PropertyGroup>
178178
<Exec Command="$(PowerShellCoreCommandPrefix) &quot;Get-ChildItem -Path $(RepoArtifacts)/$(Configuration) -Recurse -Include $(RuntimeDllsIncludeList) -Exclude $(RuntimeDllsExcludeList) | Where-Object {$_.FullName -notlike '*PreloadAssemblies*' -and $_.FullName -notlike '*NetCoreAssemblies*'} | Remove-Item -Force&quot;" />
179179
<Exec Command="$(PowerShellCoreCommandPrefix) &quot;Get-ChildItem -Path $(RepoArtifacts)/$(Configuration) -Recurse -Include 'runtimes' | Remove-Item -Recurse -Force&quot;" Condition="'$(CodeSign)' == 'true'" />

src/Storage/Storage.Management.Test/ScenarioTests/StorageDataPlaneTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,5 +83,12 @@ public void TestCommon()
8383
{
8484
TestController.NewInstance.RunPsTest(_logger, $"Test-Common -ResourceGroupName \"{resourceGroupName}\" -StorageAccountName \"{storageAccountName}\"");
8585
}
86+
87+
[Fact]
88+
[Trait(Category.RunType, Category.LiveOnly)]
89+
public void TestDatalakeGen2()
90+
{
91+
TestController.NewInstance.RunPsTest(_logger, $"Test-DatalakeGen2 -ResourceGroupName \"{resourceGroupName}\" -StorageAccountName \"{storageAccountName}\"");
92+
}
8693
}
8794
}

src/Storage/Storage.Management.Test/ScenarioTests/StorageDataPlaneTests.ps1

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,26 @@ function Test-Blob
207207
Assert-AreEqual $blob.Count 2
208208
Get-AzStorageBlob -Container $containerName -Blob $objectName2 -Context $storageContext | Remove-AzStorageBlob -Force
209209

210+
#check XSCL Track2 Items works for container
211+
$container = Get-AzStorageContainer $containerName -Context $storageContext
212+
$containerProperties = $container.BlobContainerClient.GetProperties().Value
213+
Assert-AreEqual $container.BlobContainerProperties.ETag $containerProperties.ETag
214+
Set-AzStorageContainerAcl $containerName -Context $storageContext -Permission Blob
215+
$containerProperties = $container.BlobContainerClient.GetProperties().Value
216+
Assert-AreNotEqual $container.BlobContainerProperties.ETag $containerProperties.ETag
217+
$container.FetchAttributes()
218+
Assert-AreEqual $container.BlobContainerProperties.ETag $containerProperties.ETag
219+
220+
#check XSCL Track2 Items works for Blob
221+
$blob = Get-AzStorageBlob -Container $containerName -Blob $objectName1 -Context $storageContext
222+
$blobProperties = $blob.BlobClient.GetProperties().Value
223+
Assert-AreEqual $blob.BlobProperties.ETag $blobProperties.ETag
224+
Set-AzStorageBlobContent -File $localSrcFile -Container $containerName -Blob $objectName1 -Force -Context $storageContext
225+
$blobProperties = $blob.BlobClient.GetProperties().Value
226+
Assert-AreNotEqual $blob.BlobProperties.ETag $blobProperties.ETag
227+
$blob.FetchAttributes()
228+
Assert-AreEqual $blob.BlobProperties.ETag $blobProperties.ETag
229+
210230
# Copy blob to the same container, but with a different name.
211231
Start-AzStorageBlobCopy -srcContainer $containerName -SrcBlob $objectName1 -DestContainer $containerName -DestBlob $objectName2 -StandardBlobTier $StandardBlobTier -RehydratePriority High -Context $storageContext -DestContext $storageContext
212232
Get-AzStorageBlobCopyState -Container $containerName -Blob $objectName2 -Context $storageContext
@@ -684,6 +704,153 @@ function Test-Common
684704
}
685705
}
686706

707+
<#
708+
.SYNOPSIS
709+
Tests DatalakeGen-only related commands.
710+
#>
711+
function Test-DatalakeGen2
712+
{
713+
Param(
714+
[Parameter(Mandatory = $True)]
715+
[string]
716+
$StorageAccountName,
717+
[Parameter(Mandatory = $True)]
718+
[string]
719+
$ResourceGroupName
720+
)
721+
722+
New-TestResourceGroupAndStorageAccount -ResourceGroupName $ResourceGroupName -StorageAccountName $StorageAccountName -EnableHNFS $true
723+
724+
try{
725+
726+
$storageAccountKeyValue = $(Get-AzStorageAccountKey -ResourceGroupName $ResourceGroupName -Name $StorageAccountName)[0].Value
727+
$storageContext = New-AzStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $storageAccountKeyValue
728+
729+
$localSrcFile = "localsrcDatalakeGen2testfile.psd1" #The file need exist before test, and should be 512 bytes aligned
730+
New-Item $localSrcFile -ItemType File -Force
731+
$localDestFile = "localdestDatalakeGen2testfile.txt"
732+
733+
$filesystemName = "adlsgen2testfilesystem"
734+
$directoryPath1 = "dir1"
735+
$directoryPath2 = "dir2"
736+
$directoryPath3 = "dir3"
737+
$filePath1 = "dir1/Item1.txt"
738+
$filePath2 = "dir2/Item2.txt"
739+
$filePath3 = "dir2/Item3.txt"
740+
$ContentType = "image/jpeg"
741+
$ContentMD5 = "i727sP7HigloQDsqadNLHw=="
742+
743+
# Create FileSystem (actually a container)
744+
New-AzDatalakeGen2FileSystem $filesystemName -Context $storageContext
745+
746+
# Create folders
747+
$dir1 = New-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $directoryPath1 -Directory -Permission rwxrwxrwx -Umask ---rwx--- -Property @{"ContentEncoding" = "UDF8"; "CacheControl" = "READ"} -Metadata @{"tag1" = "value1"; "tag2" = "value2" }
748+
Assert-AreEqual $dir1.Path $directoryPath1
749+
Assert-AreEqual $dir1.Permissions.ToSymbolicPermissions() "rwx---rwx"
750+
$dir2 = New-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $directoryPath2 -Directory
751+
752+
# Create (upload) File
753+
$t = New-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $filePath1 -Source $localSrcFile -Force -AsJob
754+
$t | wait-job
755+
Assert-AreEqual $t.State "Completed"
756+
Assert-AreEqual $t.Error $null
757+
$file2 = New-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $filePath2 -Source $localSrcFile -Permission rwxrwxrwx -Umask ---rwx--- -Property @{"ContentType" = $ContentType; "ContentMD5" = $ContentMD5} -Metadata @{"tag1" = "value1"; "tag2" = "value2" }
758+
Assert-AreEqual $file2.Path $filePath2
759+
Assert-AreEqual $file2.Properties.ContentType $ContentType
760+
Assert-AreEqual $file2.Properties.Metadata.Count 2
761+
Assert-AreEqual $file2.Permissions.ToSymbolicPermissions() "rwx---rwx"
762+
763+
# update Blob and Directory
764+
$ContentType = "application/octet-stream"
765+
$ContentMD5 = "NW/H9Zxr2md6L1/yhNKdew=="
766+
$ContentEncoding = "UDF8"
767+
## create ACL with 3 ACEs
768+
$acl = New-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
769+
$acl = New-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
770+
$acl = New-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission "-wx" -InputObject $acl
771+
##Update File with pipeline
772+
$file1 = Get-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $filePath1 | Update-AzDataLakeGen2Item `
773+
-Acl $acl `
774+
-Property @{"ContentType" = $ContentType; "ContentMD5" = $ContentMD5} `
775+
-Metadata @{"tag1" = "value1"; "tag2" = "value2" } `
776+
-Permission rw-rw--wx `
777+
-Owner '$superuser' `
778+
-Group '$superuser'
779+
$file1 = Get-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $filePath1
780+
Assert-AreEqual $file1.Path $filePath1
781+
Assert-AreEqual $file1.Permissions.ToSymbolicPermissions() "rw-rw--wx"
782+
Assert-AreEqual $file1.Properties.ContentType $ContentType
783+
Assert-AreEqual $file1.Properties.Metadata.Count 2
784+
Assert-AreEqual $file1.Owner '$superuser'
785+
Assert-AreEqual $file1.Group '$superuser'
786+
## Update Directory
787+
$dir1 = Update-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $directoryPath1 `
788+
-Acl $acl `
789+
-Property @{"ContentEncoding" = $ContentEncoding} `
790+
-Metadata @{"tag1" = "value1"; "tag2" = "value2" } `
791+
-Permission rw-rw--wx `
792+
-Owner '$superuser' `
793+
-Group '$superuser'
794+
$dir1 = Get-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $directoryPath1
795+
Assert-AreEqual $dir1.Path $directoryPath1
796+
Assert-AreEqual $dir1.Permissions.ToSymbolicPermissions() "rw-rw--wx"
797+
Assert-AreEqual $dir1.Properties.ContentEncoding $ContentEncoding
798+
Assert-AreEqual $dir1.Properties.Metadata.Count 3 # inlucde "hdi_isfolder" which is handle by server
799+
Assert-AreEqual $dir1.Owner '$superuser'
800+
Assert-AreEqual $dir1.Group '$superuser'
801+
802+
#list Items
803+
## List direct Items from FileSystem
804+
$items = Get-AzDataLakeGen2ChildItem -Context $storageContext -FileSystem $filesystemName -FetchPermission
805+
Assert-AreEqual $items.Count 2
806+
Assert-NotNull $items[0].Permissions
807+
$items = Get-AzDataLakeGen2ChildItem -Context $storageContext -FileSystem $filesystemName -Recurse
808+
Assert-AreEqual $items.Count 4
809+
Assert-Null $items[0].Permissions
810+
811+
#download File
812+
$t = Get-AzDataLakeGen2ItemContent -Context $storageContext -FileSystem $filesystemName -Path $filePath1 -Destination $localDestFile -AsJob -Force
813+
$t | Wait-Job
814+
Assert-AreEqual $t.State "Completed"
815+
Assert-AreEqual $t.Error $null
816+
Assert-AreEqual (Get-FileHash -Path $localDestFile -Algorithm MD5).Hash (Get-FileHash -Path $localSrcFile -Algorithm MD5).Hash
817+
818+
# Move Items
819+
## Move File
820+
$file3 = Move-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $filePath2 -DestFileSystem $filesystemName -DestPath $filePath3 -Force
821+
$file3 = Get-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $filePath3
822+
Assert-AreEqual $file3.Path $filePath3
823+
Assert-AreEqual $file3.Permissions $file2.Permissions
824+
$file2 = $file3 | Move-AzDataLakeGen2Item -DestFileSystem $filesystemName -DestPath $filePath2
825+
$file2 = Get-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $filePath2
826+
Assert-AreEqual $file2.Path $filePath2
827+
Assert-AreEqual $file2.Permissions $file3.Permissions
828+
## Move Folder
829+
$dir3 = Move-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $directoryPath1 -DestFileSystem $filesystemName -DestPath $directoryPath3
830+
$dir3 = Get-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $directoryPath3
831+
Assert-AreEqual $dir3.Path $directoryPath3
832+
Assert-AreEqual $dir3.Permissions $dir1.Permissions
833+
$dir1 = $dir3 | Move-AzDataLakeGen2Item -DestFileSystem $filesystemName -DestPath $directoryPath1
834+
$dir1 = Get-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $directoryPath1
835+
Assert-AreEqual $dir1.Path $directoryPath1
836+
837+
# Remove Items
838+
Remove-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $filePath1 -Force
839+
Remove-AzDataLakeGen2Item -Context $storageContext -FileSystem $filesystemName -Path $directoryPath1 -Force
840+
841+
# Clean Storage Account
842+
Get-AzDataLakeGen2ChildItem -Context $storageContext -FileSystem $filesystemName | Remove-AzDataLakeGen2Item -Force
843+
844+
# remove File system (actually a container)
845+
Remove-AzDatalakeGen2FileSystem $filesystemName -Context $storageContext
846+
847+
}
848+
finally
849+
{
850+
Clean-ResourceGroup $ResourceGroupName
851+
}
852+
}
853+
687854
function New-TestResourceGroupAndStorageAccount
688855
{
689856
Param(

src/Storage/Storage.Management.Test/Storage.Management.Test.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
</PropertyGroup>
1212

1313
<ItemGroup>
14+
<PackageReference Include="Azure.Storage.Blobs" Version="12.4.0" />
15+
<PackageReference Include="Azure.Storage.Files.DataLake" Version="12.0.0" />
1416
<PackageReference Include="Microsoft.Azure.Management.Storage" Version="14.5.0" />
1517
</ItemGroup>
1618

src/Storage/Storage.Management/Az.Storage.psd1

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ RequiredAssemblies = 'Microsoft.Azure.Management.Storage.dll',
6666
'Microsoft.Azure.Storage.DataMovement.dll',
6767
'Microsoft.Azure.DocumentDB.Core.dll', 'Microsoft.OData.Core.dll',
6868
'Microsoft.OData.Edm.dll', 'Microsoft.Spatial.dll',
69-
'Microsoft.Azure.KeyVault.Core.dll'
69+
'Microsoft.Azure.KeyVault.Core.dll','Azure.Storage.Blobs.dll',
70+
'Azure.Storage.Common.dll', 'Azure.Storage.Files.DataLake.dll'
7071

7172
# Script files (.ps1) that are run in the caller's environment prior to importing this module.
7273
# ScriptsToProcess = @()
@@ -158,15 +159,22 @@ CmdletsToExport = 'Get-AzStorageAccount', 'Get-AzStorageAccountKey',
158159
'Revoke-AzStorageAccountUserDelegationKeys',
159160
'Get-AzStorageFileHandle', 'Close-AzStorageFileHandle',
160161
'New-AzRmStorageShare', 'Remove-AzRmStorageShare',
161-
'Get-AzRmStorageShare', 'Update-AzRmStorageShare'
162+
'Get-AzRmStorageShare', 'Update-AzRmStorageShare',
163+
'Get-AzDataLakeGen2ChildItem', 'Get-AzDataLakeGen2Item',
164+
'New-AzDataLakeGen2Item', 'Move-AzDataLakeGen2Item',
165+
'Remove-AzDataLakeGen2Item', 'Update-AzDataLakeGen2Item',
166+
'Set-AzDataLakeGen2ItemAclObject', 'Get-AzDataLakeGen2ItemContent'
167+
162168

163169
# Variables to export from this module
164170
# VariablesToExport = @()
165171

166172
# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
167173
AliasesToExport = 'Get-AzStorageContainerAcl', 'Start-CopyAzureStorageBlob',
168174
'Stop-CopyAzureStorageBlob', 'Enable-AzStorageSoftDelete',
169-
'Disable-AzStorageSoftDelete'
175+
'Disable-AzStorageSoftDelete',
176+
'New-AzDatalakeGen2FileSystem', 'Remove-AzDatalakeGen2FileSystem',
177+
'Get-AzDatalakeGen2FileSystem', 'New-AzDataLakeGen2ItemAclObject'
170178

171179
# DSC resources to export from this module
172180
# DscResourcesToExport = @()

src/Storage/Storage.Management/ChangeLog.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@
2222
* Supported new SkuName StandardGZRS, StandardRAGZRS when create/update Storage account
2323
- `New-AzStorageAccount`
2424
- `Set-AzStorageAccount`
25+
* Support DataLake Gen2
26+
- New-AzDataLakeGen2Item
27+
- Get-AzDataLakeGen2Item
28+
- Get-AzDataLakeGen2ChildItem
29+
- Move-AzDataLakeGen2Item
30+
- Set-AzDataLakeGen2ItemAclObject
31+
- Update-AzDataLakeGen2Item
32+
- Get-AzDataLakeGen2ItemContent
33+
- Remove-AzDataLakeGen2Item
2534

2635
## Version 1.13.0
2736
* Supported AllowProtectedAppendWrite in ImmutabilityPolicy

src/Storage/Storage.Management/Storage.Management.csproj

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@
1515
</PropertyGroup>
1616
<ItemGroup>
1717
<PackageReference Include="Microsoft.Azure.Management.Storage" Version="14.5.0" />
18-
<PackageReference Include="Microsoft.Azure.Storage.Blob" Version="11.1.0" />
19-
<PackageReference Include="Microsoft.Azure.Storage.File" Version="11.1.0" />
20-
<PackageReference Include="Microsoft.Azure.Storage.Queue" Version="11.1.0" />
18+
<PackageReference Include="Microsoft.Azure.Storage.Blob" Version="11.1.1" />
19+
<PackageReference Include="Microsoft.Azure.Storage.File" Version="11.1.1" />
20+
<PackageReference Include="Microsoft.Azure.Storage.Queue" Version="11.1.1" />
2121
</ItemGroup>
22-
<ItemGroup>
22+
23+
<ItemGroup>
2324
<Compile Include="$(StorageToolsPath)Adapters\ARM.Storage.6\ARMStorageProvider.cs" Link="Common\ARMStorageProvider.cs" />
2425
<Compile Include="$(StorageToolsPath)Adapters\ARM.Storage.6\ARMStorageService.cs" Link="Common\ARMStorageService.cs" />
2526
</ItemGroup>

src/Storage/Storage.Management/help/Az.Storage.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ Enable delete retention policy for the Azure Storage Blob service.
4141
### [Enable-AzStorageStaticWebsite](Enable-AzStorageStaticWebsite.md)
4242
Enable static website for the Azure Storage account.
4343

44+
### [Get-AzDataLakeGen2ChildItem](Get-AzDataLakeGen2ChildItem.md)
45+
Lists sub directorys and files from a directory or filesystem root.
46+
47+
### [Get-AzDataLakeGen2Item](Get-AzDataLakeGen2Item.md)
48+
Gets the details of a file or directory in a filesystem.
49+
50+
### [Get-AzDataLakeGen2ItemContent](Get-AzDataLakeGen2ItemContent.md)
51+
Download a file.
52+
4453
### [Get-AzRmStorageContainer](Get-AzRmStorageContainer.md)
4554
Gets or lists Storage blob containers
4655

@@ -131,6 +140,12 @@ Gets the Storage resource usage of the current subscription.
131140
### [Lock-AzRmStorageContainerImmutabilityPolicy](Lock-AzRmStorageContainerImmutabilityPolicy.md)
132141
Locks ImmutabilityPolicy of a Storage blob containers
133142

143+
### [Move-AzDataLakeGen2Item](Move-AzDataLakeGen2Item.md)
144+
Move a file or directory to another a file or directory in same Storage account.
145+
146+
### [New-AzDataLakeGen2Item](New-AzDataLakeGen2Item.md)
147+
Create a file or directory in a filesystem.
148+
134149
### [New-AzRmStorageContainer](New-AzRmStorageContainer.md)
135150
Creates a Storage blob container
136151

@@ -200,6 +215,9 @@ Generates an SAS token for an Azure Storage table.
200215
### [New-AzStorageTableStoredAccessPolicy](New-AzStorageTableStoredAccessPolicy.md)
201216
Creates a stored access policy for an Azure storage table.
202217

218+
### [Remove-AzDataLakeGen2Item](Remove-AzDataLakeGen2Item.md)
219+
Remove a file or directory.
220+
203221
### [Remove-AzRmStorageContainer](Remove-AzRmStorageContainer.md)
204222
Removes a Storage blob container
205223

@@ -263,6 +281,9 @@ Revoke all User Delegation keys of a Storage account.
263281
### [Set-AzCurrentStorageAccount](Set-AzCurrentStorageAccount.md)
264282
Modifies the current Storage account of the specified subscription.
265283

284+
### [Set-AzDataLakeGen2ItemAclObject](Set-AzDataLakeGen2ItemAclObject.md)
285+
Creates/Updates a DataLake gen2 item ACL object, which can be used in Update-AzDataLakeGen2Item cmdlet.
286+
266287
### [Set-AzRmStorageContainerImmutabilityPolicy](Set-AzRmStorageContainerImmutabilityPolicy.md)
267288
Creates or updates ImmutabilityPolicy of a Storage blob containers
268289

@@ -320,6 +341,9 @@ Stops a copy operation.
320341
### [Stop-AzStorageFileCopy](Stop-AzStorageFileCopy.md)
321342
Stops a copy operation to the specified destination file.
322343

344+
### [Update-AzDataLakeGen2Item](Update-AzDataLakeGen2Item.md)
345+
Update a file or directory on properties, metadata, permission, ACL, and owner.
346+
323347
### [Update-AzRmStorageContainer](Update-AzRmStorageContainer.md)
324348
Modifies a Storage blob container
325349

0 commit comments

Comments
 (0)