#YOutube 説明動画
#概要
SharePoint Online DocumentLibrary List Retrive(取得) and Add(追加) Using PnP PowerShell (MFA)
#説明
SharePoint のデータ移行や一覧作成するためのプログラム、こちらを内容に合わせて編集してください。
#主な機能
ドキュメントライブラリーの一覧取得、ファイルのアップロード・ダウンロード
リストの一覧取得、添付ファイルのアップロード・ダウンロード
#SharePoint イメージ
customlist1
documnt1
###################################
# 概要
# SharePoint Online DocumentLibrary List Retrive(取得) and Add(追加) Using PnP PowerShell (MFA)
#
# 説明
# SharePoint のデータ移行や一覧作成するためのプログラム、こちらを内容に合わせて編集してください。
# 主な機能
# ドキュメントライブラリーの一覧取得、ファイルのアップロード・ダウンロード
# リストの一覧取得、添付ファイルのアップロード・ダウンロード
# ライセンス
# MIT License
#
# 作成者
# 株式会社エクシード・ワン 野呂清二
#
###################################
###################################
# モジュールの読み込み
# SharePoint PnP モジュールの読み込み
###################################
function loadMoudle($moduleName)
{
if (-not (Get-Module -Name $moduleName)) {
#PnPPowerShellのモジュールをインストールする
Install-Module -Name $moduleName
}
}
###################################
# Webログイン
# 最近MFAを利用しているSharePointが増えたので、Webログインにしています。
###################################
function login($SiteURL)
{
#既にログインしていないか確認する
$IsConnect = $FALSE
try {
if (Get-PnPContext) {
$IsConnect = $TRUE
}
}
catch {
}
#ログインしていない場合はログインする
if($IsConnect -eq $FALSE)
{
#ログインしていない場合はWebログインする(MFAを回避するため)
Connect-PnPOnline -Url $SiteURL -UseWebLogin
}
}
###################################
# リスト一覧取得
###################################
function list_retrive($listName, $folder_date)
{
$folder_Root_CSVFileName = $folder_date + "\list.csv"
$hashTableCSVItems=@()
#リスト一覧取得
<#
#CSV出力(A)
$listItems= (Get-PnPListItem -List $listName -Fields $Global:selectProperties).FieldValues
#>
#CSV出力(B)
$Items= (Get-PnPListItem -List $listName -Fields "Title","detail")
foreach($Item in $Items){
#Write-Host "Title" : $listItem["Title"]
#Write-Host "Detail" : $listItem["detail"]
#Write-Host "---------------------------"
<#
#CSV出力(A)
$folder_Root_Id = $folder_date + "\" + $Item.ID + "\"
$obj=New-Object PSObject
$Item.GetEnumerator() | Where-Object { $_.Key -in $Global:selectProperties }| ForEach-Object{ $obj | Add-Member Noteproperty $_.Key $_.Value}
$hashTable+=$obj;
$obj=$null;
#>
#CSV出力(B)
$folder_Root_Id = $folder_date + "\" + $Item.Id + "\"
$objCSVItem = New-Object PSObject
$objCSVItem | Add-Member -MemberType NoteProperty -name "Id" -value $Item.Id
$objCSVItem | Add-Member -MemberType NoteProperty -name "Title" -value $Item["Title"]
$objCSVItem | Add-Member -MemberType NoteProperty -name "detail" -value $Item["detail"]
#添付ファイル出力
New-Item -Path $folder_Root_Id -ItemType Directory
$attachments = ForEach-Object{Get-PnPProperty -ClientObject $Item -Property "AttachmentFiles"}
$attachments | ForEach-Object { Get-PnPFile -Url $_.ServerRelativeUrl -FileName $_.FileName -Path $folder_Root_Id -AsFile }
#添付ファイルをセミコロンで、連結する(#splitで分解できるようにしておく)
$hashTableAttachment = @()
$attachments | ForEach-Object { $hashTableAttachment += $_.FileName}
$attachementsCombine = $hashTableAttachment -join ";" #splitで分解できるようにしておく
$objCSVItem | Add-Member -MemberType NoteProperty -name "attachements" -value $attachementsCombine
#CSV出力用にハッシュテーブルに入れる
$hashTableCSVItems += $objCSVItem
}
#CSVファイル出力
$hashTableCSVItems | export-csv $folder_Root_CSVFileName -NoTypeInformation
}
###################################
# リスト書き込み(シンプル)
###################################
function list_writeItemSimple($listName, $itemTitle,$detail)
{
$item=Add-PnPListItem -List $listName
$newListItem = Set-PnPListItem -Identity $Item.Id -List $listName -Values @{"Title" = $itemTitle; "detail" = $detail}
}
###################################
# リスト書き込み(添付ファイル)
###################################
function list_writeItemAttachment($listName, $itemTitle,$detail,$attachments)
{
$item=Add-PnPListItem -List $listName
$newListItem = Set-PnPListItem -Identity $Item.Id -List $listName -Values @{"Title" = $itemTitle; "detail" = $detail}
for ($a=0; $a -lt $attachments.length; $a++) {
#Write-host " " $attachments[$a]
list_writeAttachmentSub -item $item -fileWithPath $attachments[$a]
}
}
#書き込み(添付ファイルサブ)
function list_writeAttachmentSub($item, $fileWithPath)
{
$ctx=Get-PnPContext
$memoryStream = New-Object IO.FileStream($fileWithPath,[System.IO.FileMode]::Open)
$fileName = Split-Path $fileWithPath -Leaf
$attachInfo = New-Object -TypeName Microsoft.SharePoint.Client.AttachmentCreationInformation
$attachInfo.FileName = $fileName
$attachInfo.ContentStream = $memoryStream
$attFile = $item.attachmentFiles.add($attachInfo)
$ctx.load($attFile)
$ctx.ExecuteQuery()
}
###################################
# ドキュメントライブラリ一覧取得
###################################
function doclib_retrive($documentName, $folder_date)
{
$folder_Root_CSVFileName = $folder_date + "\document.csv"
$hashTableCSVItems=@()
$folder_Root_files = $folder_date + "\files\"
New-Item -Path $folder_Root_files -ItemType Directory
$Items = Get-PnPListItem -List $documentName -Fields "FileRef", "File_x0020_Type", "FileLeafRef"
foreach($Item in $Items){
$hashTableCSVItems += New-Object PSObject -Property @{
Path = $Item["FileRef"]
FileName = $Item["FileLeafRef"]
FileExtension = $Item["File_x0020_Type"]
}
#ファイル出力
Get-PnPFile -Url $Item["FileRef"] -Path $folder_Root_files -FileName $Item["FileLeafRef"] -AsFile
}
$hashTableCSVItems | Export-Csv -Path $folder_Root_CSVFileName -NoTypeInformation
}
###################################
# ドキュメントライブラリー書き込み
###################################
function doclib_writeItem($documentName, $attachments)
{
#コンテキストを読み込む
$ctx = Get-PnPContext
$ctx.load($ctx.web)
$ctx.executequery()
#対象リストを探す
$lists = $ctx.web.lists
$ctx.load($lists)
$ctx.executequery()
$myList = $lists | Where-Object{$_.Title -match $documentName}
ForEach ($attachment in $attachments) {
#ローカルファイルパスからファイル名を取り出す
$splits = $attachment.split("\")
$length=$splits.length;
$newFileName = $splits[$length-1];
#ファイルを準備する
$newFile = new-object Microsoft.SharePoint.Client.fileCreationInformation
$newFile.Url = $ctx.web.url + "/document1/" + $newFileName
$newFile.Content = [System.IO.File]::ReadAllBytes($attachment)
#アップロードする
$addFile = $myList.RootFolder.Files.Add($newFile)
$ctx.load($addFile)
$ctx.executequery()
}
}
###################################
###################################
# メインルーチン
###################################
###################################
try {
######### モジュール読み込み、Webログイン #########
loadMoudle -moduleName "SharePointPnPPowerShellOnline"
login -SiteURL "https://exceedone.sharepoint.com/sites/dev-snoro-communication"
$folder = "C:\temp"
$folder_date = $folder + "\" + ([System.DateTime]::Now).ToString("yyyyMMdd_HHmmss")
New-Item -Path $folder_date -ItemType Directory
$files=@("C:\temp\c.txt","C:\temp\d.txt")
######### リスト 開始 #########
$listName = "customlist1"
#リスト一覧取得
list_retrive -listName $listName -folder_date $folder_date
#リスト書き込み(シンプル)
list_writeItemSimple -listName $listName -itemTitle "tilte2" -detail "detail2"
#リスト書き込み(添付ファイル)
list_writeItemAttachment -listName $listName -itemTitle "title3" -detail "detail3" -attachments $files
######### リスト 終了 #########
######### ドキュメントライブラリー 開始 #########
$documentName = "document1"
#ドキュメントライブラリー一覧取得
doclib_retrive -documentName $documentName -folder_date $folder_date
#ドキュメントライブラリー書き込み
doclib_writeItem -documentName $documentName -attachments $files
######### ドキュメントライブラリー 終了 #########
}
catch {
$e = $_.Exception
$line = $_.InvocationInfo.ScriptLineNumber
$msg = $e.Message
Write-Host "Error: $e at $line" -foregroundcolor black -backgroundcolor Red
}