皆様はじめまして。
最近、SharePoint Online 向けに業務アプリを組むことがありまして、まだ日本語の解説が乏しいようなので、あと日本語独自のテクニックも必要なようなので、ここで紹介してみたいとおもいます。
PnP PowerShell について
まずここのサイトを紹介します。
PnP PowerShell overview
PnP PowerShell というのは、"Patterns & Practices" というコミュニティベースのコマンドレット集みたいなもので、使いどころによっては劇的に開発効率が上がります。
比較対象となるのは、従来のSharePointへの接続方式である"CSOM"(Client Side Object Model) です。
idea.toString(); さんの PowerShell + CSOM で SharePoint Online を操作する が一番わかりやすかったのですが、参考にして自分で使ったサイト接続のスクリプトはこんなかんじです。
$csv = Import-CSV "csv\○○マスタ.txt" -Delimiter `t
$siteUrl = "https://○○.sharepoint.com/sites/exampleSite"
$listName = "○○マスタ"
$userName = "me@example.com"
$password = Read-Host -Prompt "Enter password" -AsSecureString
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($userName, $password)
$context = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
$context.Credentials = $credentials
(以下、サイトに実際に行う操作)
[Microsoft.SharePoint.Client.Web]$web = $context.Web
[Microsoft.SharePoint.Client.List]$list = $web.Lists.GetByTitle($listName)
認証のために、$ctx (コンテキスト)
とか $credentials
とかをセットする必要があって、面倒~と思います。
対して、PnP ですと認証部分だけなら
$siteUrl = "https://○○.sharepoint.com/sites/exampleSite"
Connect-PnPOnline -Url $siteUrl -Credentials (Get-Credential)
で済みます。これこそ、わたしの欲しかった、PowerShell らしい簡単な操作です。
たとえば、リストをSharePoint に作るコードも短いです。
ここでは、リスト"商品コードマスタ" を作り、フィールド"code" を新規に作り、Title, code に日本語名を与えて、インデックスを設定、ビューを作成しています。
#リスト作成
$Title = "商品コード"
$InternalName="ProductCode"
New-PnPList -url $InternalName -Title $Title -Template GenericList
Add-PnPField -List $InternalName -DisplayName "code" -InternalName "code" -Type Text -AddToDefaultView
Set-PnPField -List $InternalName -Identity "Title" -Values @{"Title"="商品名"; "Indexed"=$true}
Set-PnPField -List $InternalName -Identity "code" -Values @{"Title"="商品コード"; "Indexed"=$true}
Set-PnPField -List $InternalName -Identity "Modified" -Values @{ "Indexed"=$true}
Set-PnPList -Identity $InternalName -EnableAttachments $false
Add-PnPView -List $InternalName -Title "コード昇順" -Fields "code","Title" -SetAsDefault -Query "<OrderBy><FieldRef Name='code' Ascending='true'/></OrderBy>" -Paged
Add-PnPNavigationNode -Title $Title -Url $InternalName -Location QuickLaunch #左のナビゲーション(クイックランチ)に登録
Write-Host $Title を追加
やりたいこととコードがシンプルに対応していて、はかどりそうだと思いませんか?
次回から、この使い方を乏しい実例とともに紹介したいとおもいます。