LoginSignup
13
14

More than 3 years have passed since last update.

PnP PowerShell で Sharepoint を操作しよう: (1)はじめよう

Last updated at Posted at 2019-05-27

皆様はじめまして。
最近、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 を追加

やりたいこととコードがシンプルに対応していて、はかどりそうだと思いませんか?
次回から、この使い方を乏しい実例とともに紹介したいとおもいます。

13
14
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14