SharePoint リスト情報を PowerShell を使って CSV で出力する
体調も悪いので、リスト情報を CSV で出力してみようかと思い立ってサクッと
Contents
サンプルコード
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null
# 取得する SharePoint Online の URL
$url = 'https://<your tenant>/';
# ユーザー名
$user = '<your account>';
# パスワード
$secure = Read-Host -Prompt "Enter the password for ${user}(Office365)" -AsSecureString;
# SharePoint Online 認証情報
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($user, $secure);
# SharePoint Client Context インスタンスを生成
$ctx= New-Object Microsoft.SharePoint.Client.ClientContext($url)
$ctx.Credentials = $credentials
## ここから処理
$ctx.Load($ctx.Web.Lists)
$ctx.ExecuteQuery();
$data = @()
for ($i=0; $i -lt $ctx.Web.lists.Count; $i++) {
$t = $ctx.Web.lists[$i]
if ($t.Hidden -eq $false -and $t.EntityTypeName.IndexOf("List") -ne -1) {
$line = @{
Title = $t.Title;
Id = $t.Id;
Name = ($t.EntityTypeName.Substring(0, $t.EntityTypeName.IndexOf('List')));
Path = ("{0}/Lists/{1}" -f $t.ParentWebUrl.TrimEnd('/'), $t.EntityTypeName.Substring(0, $t.EntityTypeName.IndexOf('List')));
ItemCount = $t.ItemCount;
ItemLastModify = $t.LastItemModifiedDate;
ItemLastDelete = $t.LastItemDeletedDate;
Created = $t.Created;
}
$data += New-Object PSObject -Property $line
}
}
$data | Export-Csv -LiteralPath "<output path>" -Encoding Default -notype
18 行目まではほぼおまじない。
27 行目で「Hidden ではなく、且つ、EntityTypeName に List という文字が入っているものにしています。
32 行目も含めてですが、ちゃんとするなら「List で終わっている」とやったほうがよさそうです。
41 行目で Export-Csv を使って出力しています。
考察
32 行目が本当にこれでいいのかが不明です。
リスト毎に RootFolder を Load して ServerRelativeUrl から割り出すのが正解な気がしています。
データー一括変更の元データーや、一括変更前後の確認などにこういうの使うだろうなー
ディスカッション
コメント一覧
まだ、コメントがありません