PnP.PowerShellとは
SharePointを管理するためのPowerShellモジュールです。
SharePoint OnlineおよびSharePoint Serverの様々な管理タスクを自動化できます。
インストール方法
基本的にはPowerShellを管理者として実行して、下記のコマンドでモジュールをインストールします。
Install-Module -Name PnP.PowerShell
インストールに関しての詳細は下記ページに書かれています。
基本的なコマンド
SharePointへの接続
SharePointの管理タスクを実行するために、まずSharePointのサイトに接続する必要があります。
接続するためには、Connect-PnPOnline
というコマンドを使用します。
私の環境では、多要素認証を使用しているので、-UseWebLogin
というオプションも付けます。
Connect-PnPOnline -Url "<サイトURL>" -UseWebLogin
その他情報は下記ページを参照して下さい。
ページの作成
ページの作成はAdd-PnPPage
を使用します。
Add-PnPPage -Name "<ページ名>" -Title "<ページタイトル>" -PageLayoutType "<ページレイアウト>" [-PromoteAsNewsArticle] [-HeaderType "<ヘッダータイプ>"] [-HeaderLayoutType "<ヘッダーレイアウトタイプ>"]
リストの作成
SharePointサイト内でのリストの作成はNew-PnPList
を使用します。
リストテンプレートには、汎用リストであればGenericList
、アナウンスリストであれば```Announcements``を指定して下さい。
New-PnPList -Title "<リストタイトル>" -Template "<リストテンプレート>"
本題
SharePoint内のドキュメントファイルをリスト化したい
今回はPowerShellのスクリプトを作成して、リスト化していきます。
リストの出力先はCSVファイルにしました。
実装について
実装はWindows PowerShell ISEを使用して行いました。
ISEの詳細については以下を参照して下さい。
CSVのリストの列は、ファイル名、ファイルかフォルダかの種類、ファイルの種類、URL、作成者のmail、作成日、最後に編集した日、最後に編集した人のmailを設定しました。
実装本体
# サイトURL定義
$SiteURL= "<サイトURL>"
#ドキュメントのフォルダを指定
$ListName="Shared Documents"
# 出力先定義
$ReportOutput = "C:\Users\user\SharePointList.csv"
# リスト取得最大ファイル数の定義
$Pagesize = 500
#SharePointサイトに接続
Connect-PnPOnline -Url $SiteURL -UseWebLogin
#CSV作成前に既存ファイル削除
If (Test-Path $ReportOutput) { Remove-Item $ReportOutput}
#ドキュメント情報の取得
$List = Get-PnPList -Identity $ListName
$global:counter = 0;
#プロパティを指定して情報取得
$ListItems = Get-PnPListItem -List $ListName -PageSize $Pagesize -Fields Author, Editor, Created, File_x0020_Type -ScriptBlock `
{ Param($items) $global:counter += $items.Count; Write-Progress -PercentComplete ($global:Counter / ($List.ItemCount) * 100) -Activity `
"Getting Documents from Library '$($List.Title)'" -Status "Getting Documents data $global:Counter of $($List.ItemCount)";} | Where {$_.FileSystemObjectType -eq "File"}
$ItemCounter = 0
#結果を入れる空の配列用意
$Results = @()
#取得した要素を整理
Foreach ($Item in $ListItems)
{
#プロパティをCSVの任意の列に当てはめる
$Results += New-Object PSObject -Property ([ordered]@{
#ファイル名
Name = $Item["FileLeafRef"]
#ファイルかフォルダか
Type = $Item.FileSystemObjectType
#ファイルの種類
FileType = $Item["File_x0020_Type"]
#URL
RelativeURL = $Item["FileRef"]
#作成者のmail
CreatedByMail = $Item["Author"].Email
#作成日
CreatedOn = $Item["Created"]
#最後に編集した日
Modified = $Item["Modified"]
#最後に編集した人のmail
ModifiedByMail = $Item["Editor"].Email
})
$ItemCounter++
Write-Progress -PercentComplete ($ItemCounter / ($List.ItemCount) * 100) -Activity "Exporting data from Documents $ItemCounter of $($List.ItemCount)" -Status "Exporting Data from Document '$($Item['FileLeafRef'])"
}
#CSVに出力
$Results | Export-Csv -Path $ReportOutput -NoTypeInformation
Write-host "出力完了"
#SharePointサイト切断
Disconnect-PnPOnline
説明については上記コメントアウトを参照下さい。
参考にしたサイトは以下です。