こんにちは。けーすけです。最近Onedrive for Businessを触る機会が増えたので、PowerShellでどのくらいいじくれるのかやってみました。PnP Poworshellを利用しています。
この記事で説明する範囲
- PnP Poworshellの利用開始まで
- PnP Poworshellを利用したフォルダの作成とアクセス権の設定
注意点
- 2021年5月10日現在の情報に基づきます。
- PnP PoworshellはコミュニティメイドのPowerShellモジュールであり、Microsoftのサポートの対象ではありません。
- PowerShell 7.1.3環境下での動作のみ確認しています。
- O365(AzureAD)側でMFAが設定されている想定です。
参照ドキュメント
手順
PowerShellの準備
既に準備済みでない場合はPowershellの準備からやっていきます。インストールは以下のリンクから可能です。
お使いの環境に応じたリンクを参照してインストールしてください。
PowerShellが利用可能になったら、以下のコマンドでモジュールをインストールします。
Install-Module -Name PnP.PowerShell
以下のような応答が返ってくるので、A を入力して確定します。
Untrusted repository
You are installing the modules from an untrusted repository. If you trust this
repository, change its InstallationPolicy value by running the Set-PSRepository
cmdlet. Are you sure you want to install the modules from 'PSGallery'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "N"):
このタイミングで以下のようなアクセス許可要求が出ますので”承諾”してください。


承諾が終わったら一度PowerShellを再起動します。
接続
以下のコマンドで接続します。
Connect-PnPOnline -Url https://”SharePointのドメイン”/ -Interactive
例
Connect-PnPOnline -Url https://testdomein.sharepoint.com/ -Interactive
https://pnp.github.io/powershell/cmdlets/Connect-PnPOnline.html
このときアカウントの認証が要求されます。

認証が終わったら、以下のコマンドで処理したいユーザーアカウントのOnedrive for BusinessのURL(PersonalUrl)を確認します。
Get-PnPUserProfileProperty -Account "ユーザーアカウント" | select PersonalUrl
例:
Get-PnPUserProfileProperty -Account test@testdomein.com | select PersonalUrl
コマンドを入力すると以下のようにPersonalUrlが返されます。
PersonalUrl
-----------
https://testdomein-my.sharepoint.com/personal/test-testdomein.com
次に、接続先をPersonal URLに変更し、再度接続します。
例:
Connect-PnPOnline -Url https://testdomein-my.sharepoint.com/personal/test-testdomein.com/ -Interactive
再接続後に念のため、
Get-PnPConnection
を利用して接続先(url)を確認します。

操作
ここから下は、フォルダの作成や、フォルダのアクセス権の変更の具体例です。コマンド自体はあまり複雑ではありませんが、パスの指定にお作法があります。
Resolve-PnPFolder(フォルダの作成)
例:
Resolve-PnPFolder -SiteRelativePath Documents/mxPNPtest/test1
この例の構文の場合、”自分のファイル”配下のmxPNPtestの中に、”test1”というフォルダが作成されます。

Resolve-PnPFolderを使用する場合は、相対パス指定のため、”自分のファイル”=”Documents”フォルダという理解で問題ありません。
Set-PnPfolderPermission(フォルダのアクセス権設定)
構文:
Set-PnPfolderPermission -list "リスト名" -identity ”パス” -User "ユーザーアカウント" -AddRole "Sharepointのロール"
例:
Set-PnPfolderPermission -list "Documents" -identity Documents/mxPNPtest/test1 -User "test@testdomein.com " -AddRole "投稿"
この例では、先ほど作成した”test1”フォルダに”投稿”権限を持ったユーザーを追加しています。
注意点として、listを指定する必要があり、省略できません。今回の例のように特定のアカウント配下にフォルダを作成していくような場合は、例のように、
-list "Documents"
としてください。
なお、Sharepointのロールについては文字列で指定します。ロールの詳細や種類についてはOnedriveから、以下で確認可能です。


おわりに
mxHero以外の記事書くのは久しぶりで新鮮でした。PnP PowershellについてはMSのサポート外ではありますが、あるということを知っておけばそこそこ役に立つ局面があるんじゃないかなと思いました。次回はまたmxHeroまわりの記事になります。以上、けーすけでした。