我受到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上有上百万个文件)。
是否可以避免它或以某种方式循环?
这是我正在使用的脚本(工作正常,我没有报告来自根目录的所有文件或仅文件夹):
$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个对象?
非常感谢
答案 0 :(得分: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)