【问题标题】:Azure DataLake gen2 Powershell LimitsAzure DataLake gen2 Powershell 限制
【发布时间】:2020-05-28 16:17:21
【问题描述】:

我在使用 Azure Datalake gen2 的 cmdlet 时遇到了限制:

https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-directory-file-acl-powershell

我正在使用这个 cmdlet:

Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem $filesystemName -Path $dirname -Recurse -FetchProperty

从根目录获取所有文件和文件夹 ACL,但它有 5000 个对象限制,当我将它运行到具有超过 5000 个对象的文件夹时会显示此消息:

基本上,有了这个令牌,我可以从上次提取的内容继续(手动这样做很疯狂,因为也许我们在 datalake 上有数百万个文件)。

是否可以避免或以某种方式循环?

这是我正在使用的脚本(它工作正常,我不会从根目录报告所有文件 ma only 文件夹):

    $dir = Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem "datalake" -Recurse -FetchProperty 


$FileOutdtk = "C:\Temp\file.csv"
Clear-Content $FileOutdtk

Add-Content $FileOutdtk ('"Path"^"IsDirectory"^"Owner"^"DisplayName Owner"^"Owner Permissions"^"Group"^"DefaultScope"^"AccessControlType"^"EntityId"^"DisplayName Gruppo"^"PermissionsACL"')


foreach ($directory in $dir) {  



           if($directory.IsDirectory -eq $true){
            if($directory.Owner -imatch "superuser"){


           foreach ($ACLs in $directory.ACL){


                    if($ACLs.EntityId -eq $null ){

                    Add-Content $FileOutdtk ('"' + $directory.Path + '^' + $directory.IsDirectory + '^' + $directory.Owner + '^' + "" +  '^' + $directory.Permissions.Owner + '^' + $directory.Group + '^' + $ACLs.DefaultScope + '^' + $ACLs.accesscontroltype + '^' + $ACLs.EntityId + '^' + "" + '^' + $ACLs.Permissions + '"')

                    }
                    else{
                    $GruppiEntityId = Get-AzureADGroup -ObjectId $ACLs.EntityId

                    Add-Content $FileOutdtk ('"' + $directory.Path + '^' + $directory.IsDirectory + '^' + $directory.Owner + '^' + "" + '^' + $directory.Permissions.Owner + '^' + $directory.Group + '^' + $ACLs.DefaultScope + '^' + $ACLs.accesscontroltype + '^' + $ACLs.EntityId + '^' + $GruppiEntityId.displayname + '^' + $ACLs.Permissions + '"')



             }

        }

如何循环该 cmdlet 以获得最多 5000 个对象?

非常感谢

【问题讨论】:

    标签: powershell azure-data-lake azure-data-lake-gen2


    【解决方案1】:

    如果要列出一个 Azure 数据湖 gen2 文件夹中的所有项目,请参考以下脚本

    $storageAccount = Get-AzStorageAccount -ResourceGroupName "<>" -AccountName "<>"
    $ctx = $storageAccount.Context
    
    $fileSystem="test"
    $dirName="testFolder"
    $Token = $Null
    $Max=2000
    do{
      $items=Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem $fileSystem  -Path $dirName -Recurse -FetchProperty  -ContinuationToken $Token -MaxCount $Max
      $items
      if($items.Length -le 0) { Break;}
      $Token = $items[$items.Count -1].ContinuationToken;
    
    }
    While ($Token -ne $Null)
    

    【讨论】:

    • 嗨,Jim,它将列出多达 5000 个对象,或者我还必须增加 $Max 变量中的值?
    • @Emanuele 是的。它将列出 5000 个对象。 $max 用于告诉服务器在每个循环中返回 1000 个项目。
    猜你喜欢
    • 2020-08-09
    • 2021-05-19
    • 2022-11-14
    • 1970-01-01
    • 2020-05-08
    • 2019-09-19
    • 1970-01-01
    • 2020-03-23
    • 2021-02-05
    相关资源
    最近更新 更多