Azure Ограничения Powershell для DataLake gen2 - PullRequest
0 голосов
/ 28 мая 2020

я получаю ограничение с помощью командлета Azure Datalake gen2:

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

Я использую этот командлет:

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

, чтобы получить ACL для всех файлов и папок из root, но он имеет ограничение на 5000 объектов и показывает это сообщение, когда я запускаю его в папку с более чем 5000 объектов:

enter image description here

в основном, с этим токеном я могу продолжить с последнего извлеченного (вручную - это безумие, потому что, возможно, у нас есть миллион файлов в datalake).

Можно этого избежать или в l oop каким-то образом?

Вот скрипт, который я использую (он работает нормально, я не сообщаю, что все файлы находятся только в папке из root):

    $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 + '"')



             }

        }

Как я могу oop с помощью этого командлета получить до 5000 объектов?

Большое спасибо

1 Ответ

0 голосов
/ 28 мая 2020

Если вы хотите перечислить все элементы в одной папке Azure data lake 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...