Public/Find-YDiskItemByType.ps1
<# .SYNOPSIS Get flat list of all files on Yandex Disk in alphabetical order. .DESCRIPTION Get flat list of all files on Yandex Disk in alphabetical order. The flat list doesn't reflect the folder structure and can be used for searching for files of a specific type in different folders .PARAMETER Type File types to include in the list. Yandex Disk identifies the type of each uploaded file. .PARAMETER Property List of JSON properties to include in the response. Keys not specified in this list are omitted when generating a response. If the parameter isn't specified, the response is returned in full without omitting anything. .PARAMETER AccessToken Access Token for request .EXAMPLE Find-YDiskItemByType -AccessToken $access_token -Type 'image' -Property path, created .OUTPUTS Json with item list metadata as PSObject .NOTES Author: Max Kozlov .LINK https://yandex.ru/dev/disk-api/doc/ru/reference/all-files #> function Find-YDiskItemByType { [CmdletBinding()] param( [Parameter(Position=0)] [ValidateSet( 'audio', # — аудио-файлы. 'backup', # — файлы резервных и временных копий. 'book', # — электронные книги. 'compressed', # — сжатые и архивированные файлы. 'data', # — файлы с базами данных. 'development', # — файлы с кодом (C++, Java, XML и т. п.), а также служебные файлы IDE. 'diskimage', # — образы носителей информации и сопутствующие файлы (например, ISO и CUE). 'document', # — документы офисных форматов (Word, OpenOffice и т. п.). 'encoded', # — зашифрованные файлы. 'executable', # — исполняемые файлы. 'flash', # — файлы с флэш-видео или анимацией. 'font', # — файлы шрифтов. 'image', # — изображения. 'settings', # — файлы настроек для различных программ. 'spreadsheet', # — файлы офисных таблиц (Excel, Numbers, Lotus). 'text', # — текстовые файлы. 'unknown', # — неизвестный тип. 'video', # — видео-файлы. 'web' # — различные файлы, используемые браузерами и сайтами (CSS, сертификаты, файлы закладок). )] [string[]]$Type, [ValidateSet( '*', 'type', 'name', 'path', 'created', 'modified', 'resource_id', 'custom_properties', 'comment_ids', 'comment_ids.private_resource', 'comment_ids.public_resource', 'exif', 'revision', 'public_key', 'public_url', 'antivirus_status', 'size', 'mime_type', 'file', 'media_type', 'sha256', 'md5', 'preview' )] [Parameter(Position=1)] [Alias('Metadata')] [string[]]$Property = @(), [Parameter(Mandatory)] [string]$AccessToken ) $Headers = @{ "Authorization" = "OAuth $AccessToken" } if ($Property -contains "*") { $Property = "*" } $offset = 0 $files = New-Object System.Collections.ArrayList do { $Uri = '{0}/resources/files?media_type={1}&limit=100&offset={2}' -f $YDiskUri, ($Type -join ','), $offset if ($Property) { $Uri += '&fields=offset,limit,items.{0}' -f ($Property -join ',items.') } Write-Verbose "URI: $Uri" $requestParams = @{ Uri = $Uri Headers = $Headers ContentType = "application/json; charset=utf-8" } $result = Invoke-RestMethod @requestParams -Method Get @YDiskProxySettings if (-not $result -or -not $result.items) { break; } $files.AddRange($result.items) $offset += $result.limit } while ($true) $files } |