SharePoint Online PowerShell 全アイテム削除
大量のアイテムをブラウザより手動で削除するのは大変ですよね。
今回は、リストのアイテムを一発で全件削除するCSOMサンプルプログラムを紹介します。
サンプルプログラムの紹介
# Read CSOM
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
#サイトURL
$siteUrl ="サイトURLを入力"
#リスト名
$listName = "リスト名を入力"
#ユーザー
$username = "ユーザーを入力"
$password = Read-Host -Prompt "パスワード:" -AsSecureString
#インスタンス生成
$context = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
#認証情報
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password)
$context.Credentials = $credentials
try
{
$counter=0
$spQuery = New-Object Microsoft.SharePoint.Client.CamlQuery
$spQuery.ViewXml = "<View><Query></Query><ViewFields><FieldRef Name='Id' /></ViewFields><RowLimit>100</RowLimit></View>"
$list = $Context.Web.Lists.GetByTitle($listName)
do
{
$items = $list.GetItems($spQuery);
$Context.Load($items)
$Context.ExecuteQuery()
$count = $items.Count
Write-Host "残りアイテム" $count "件" -ForegroundColor Yellow
while ($items.Count -gt 0)
{
$items[0].DeleteObject()
}
$spQuery.ListItemCollectionPosition = $items.ListItemCollectionPosition
}
while ($spQuery.ListItemCollectionPosition -ne $null)
$Context.ExecuteQuery()
Write-Host "アイテム削除完了" -ForegroundColor Yellow
}
catch
{
Write-Host -ForegroundColor Red $_.Exception.ToString()
}
今回のサンプルでは、100件ずつ取得してアイテム数が0件になるまで削除を繰り返しています。
なぜ、一括で削除を行わないのかというとSharePointにはリストビューの
アイテム数が5000件を超えると色々と制限されてしまいます。
※詳細は下記を参照ください。
https://blogs.technet.microsoft.com/sharepoint_support/2015/04/14/faq/
https://blogs.technet.microsoft.com/sharepoint_support/2015/05/15/31574/
リストビューのアイテム数が5000件以上の場合でも制限を回避する為に
アイテムのID列を100件ずつ取得してから削除するようにしています。
【コード抜粋】
$spQuery.ViewXml="<View><Query></Query><ViewFields><FieldRefName='Id' /></ViewFields><RowLimit>100</RowLimit></View>"
参考情報:CamlQuery.ViewXml プロパティ
https://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.client.camlquery.viewxml.aspx