Get-PnPFolderItemでSharepointOnline/One Drive for Businessの一覧を取得する
Get-PnPFolderItemの利点
以前、Get-PnPListItemでファイル一覧を取得する記事を書きました。
OneDrive for Business /Sharepoint Online Document LibraryをPnPPowershellで管理する
上記にもあるように、OneDrive for BusinessとSharepointOnlineのドキュメントラブラリは技術仕様がほぼ一緒です。
上記記事では一覧をとることを重視していたんですが、ファイルの数が大きくなってくるとまずページサイズ上限で引っかかります。
1 2 3 4 5 6 7 8 9 10 11 12 |
$Lists = Get-PnPList -Connection $Connection $ListName = "Documents" $Items = Get-PnPListItem -List $ListName Write-host "Total Number of Items Found:"$Items.count <# Get-PnPListItem : The attempted operation is prohibited because it exceeds the list view threshold. 発生場所 行:3 文字:10 + $Items = Get-PnPListItem -List $ListName + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Get-PnPListItem]、PSInvalidOperationException + FullyQualifiedErrorId : InvalidOperation,PnP.PowerShell.Commands.Lists.GetListItem |
上記がでるので Get-PnPListItemコマンドレットに-PageSize 500オプションを追加すると一応動きます。
その後取れたItemの詳細を取るために一個一個Queryを実行しないといけないんですが、リストが余りに多いと429 Too Many Requestsが返ってきてエラーになります。DDoS攻撃防止用ですね。start-sleep入れてみたんですが10万近くファイルがあると終わりません。
ということで、Get-PnPFolderItemで必要なフォルダ指定で一覧を取ることにしました。注意点は2つ。
・相対パスはSubSiteからのパス。ドキュメントライブラリーの時はデフォルトはShared Documents/
なのでここからのパス
・取れるItemはListItemとは違うオブジェクトなので、コンテキストを移して一つ一つデータをQuery実行する必要あり。
参考までに。