Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

Kayo1984
零細ソフトベンダーで開発とかサポートとかしています。
http://kayopc.seesaa.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away