SharePoint Online で作成された共有リンクについて調べてみた
今まで、SharePoint の共有リンクについて、細かいことを気にせずに使っていましたが、共有リンクを「いつ、誰が、誰向けに作ったのか?」を知りたいと思い調べると、メッチャ簡単にできるんですねー
皆さまは、無駄な苦労などせずに、参考サイト を確認して、ポチッとレポートをダウンロードしてください
この記事は、Microsoft の公式情報を元にしたものではなく、個人的な調査メモとなりますので、本情報を業務でご利用する際には自己責任でお願いいたします
- 1. 環境
- 2. 検証内容
- 3. 検証
- 3.1. 1. 一度も共有リンクが作られていないとき
- 3.2. 2. サイト内のユーザーに共有したとき
- 3.3. 3. 共有リンクを編集して、サイト内のユーザーを追加したとき
- 3.4. 4. 共有リンクを編集して、サイト外ユーザーを追加したとき
- 3.5. 5. 共有リンクを編集して、テストグループを追加したとき
- 3.6. 6. 共有リンクを編集して、ゲストユーザーを追加したとき
- 3.7. 7. 共有リンクを編集して、外部ユーザーを追加したとき
- 3.8. 8. 外部ユーザーで共有されたファイルを閲覧したとき
- 3.9. 9. 共有を停止したとき
- 3.10. 10. 「すべてのユーザー」で共有したとき
- 3.11. 11. 「すべてのユーザー」と並行して「選択したユーザー」にも共有したとき
- 4. 考察
- 5. 参考サイト
環境
ローカルの環境は次の通りです
- Windows 11 Pro
- PowerShell 7.4.2
SharePoint Online には、次の環境を用意しました
- チームサイト TestSite を作成
- プライバシーの設定:プライベート
- 言語の選択:日本語
- タイムゾーン:(UTC +09:00) 大阪、札幌、東京
- SharePoint 管理センターで下記を行う
- サイト TestSite に移動し下記行う
- Entra に次のユーザーを準備
- サイト外テストユーザー
- 同一テナントのユーザーです
- ゲストユーザー
- 別のテナントのユーザーをゲストとしています
- テストグループ
- 「テストグループ」 は Microsoft 365 グループ
- メンバーは「テストグループユーザー 01」「テストグループユーザー 02」
- サイト外テストユーザー
検証内容
こちらのサイトを参考にしました
#Thank you for giving me this information. <3
今回必要な情報は、隠しリストの Sharing Links (言語設定が日本語だと共有リンク) で取得できそうです
今回は、ドキュメントライブラリで、共有リンクが作成されたとき、隠しリストの共有リンクとレポート対象となるリストアイテムの権限設定 RoleAssignments の状態を見ていきたいと思います
検証
今回は楽して PnP.PowerShell で確認するので、先にインストールとログインをしておきます
# インストール済みなら、 `Import-Module`
PS C:\> Install-Module PnP.PowerShell -Scope CurrentUser -Force
# <your-organization-name> は、利用環境に合わせる
PS C:\> Connect-PnPOnline -Url https://<your-organization-name>.sharepoint.com/sites/TestSite -Interactive
<your-organization-name> は、環境によって読み替えて下さい
1. 一度も共有リンクが作られていないとき
サイトを作ったばかりの状態で確認してみます
PS C:\> Get-PnPList -Identity "共有リンク"
Get-PnPList: リスト '共有リンク' は URL 'https://<your-organization-name>.sharepoint.com/sites/TestSite' のサイトには存在しません。
一度も共有していないときには、当該リストは作られていないことが確認できました
2. サイト内のユーザーに共有したとき
ドキュメントライブラリにファイルを追加し、 「テストユーザー 01」に対して 初めての共有リンク作成 を行います
- ファイル名の右にある [ ・・・ (三点リーダー)] から [ 共有 ] をクリック
- リンクのコピーの横にある歯車アイコンをクリック
- [ 選択したユーザー ] を選択し、[ 適用 ] ボタンをクリック
- 共有するユーザーを追加し、 [ リンクのコピー ] をクリック
以上で、共有リンクが作成されたので、SharePoint 上で確認してみます
- ファイル名の右にある [ ・・・ (三点リーダー)] から [ アクセス許可の管理 ] をクリック
- モーダルダイアログ上部の [ ・・・ (三点リーダー)] から [ 詳細設定 ] をクリック
詳細設定画面
共有リンクを作成すると、権限の継承が切られて、固有の権限になっていることが判ります
※権限の継承については詳しく触れませんが、 この辺り が参考になると思います
ここで先ほどと同じように、共有リンク リストが作成されているか確認します
PS C:\> Get-PnPList -Identity "共有リンク"
Flexible
Title Id Url
----- -- ---
共有リンク e348903d-xxxx-xxxx-xxxx-xxxxxxxxxxxx /sites/TestSite/List
結果が返ってきたので、共有リンクリストが作成されていることが判りました
次に、共有リンクリストのアイテムを確認してみます
PS C:\> Get-PnPListItem -List "共有リンク"
Id Title GUID
-- ----- ----
1 e8ba9dde-xxxx-xxxx-xxxx-xxxxxxxxxxxx
アイテム ID 1 としてデータが作成されていることが判ります
続いて、アイテム ID 1 のデータを取得して見てみます
PS C:\> $item = Get-PnPListItem -List "共有リンク" -Id 1
PS C:\> $item.FieldValues
Key Value
--- -----
(略)
:
SharingDocId 40159435-xxxx-xxxx-xxxx-xxxxxxxxxxxx
CurrentLink 0
AvailableLinks [{"LinkKind":6,"ExpirationDateTime":null,"ExpirationModifiedDate":"\/Date(1715495878667)\/...
:
(略)
参考にさせて頂いたサイトによると、この中で SharingDocId と AvailableLinks が重要とのことなので、AvailableLinks の値を取得してみます
PS C:\> $item.FieldValues.AvailableLinks
下記は、出力された値を、可読性を上げるために整形しています
[
{
"LinkKind": 6,
"ExpirationDateTime": null,
"ExpirationModifiedDate": "\/Date(1715997237979)\/",
"IsActive": true,
"ShareId": "8dc3e528-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AuthKey": "xxxxxxxxxxxxxxxxxxxxxxx",
"CreatedById": 7,
"LastModifiedById": 7,
"CreatedDate": "\/Date(1715997236417)\/",
"LastModifiedDate": "\/Date(1715997236417)\/",
"ObjectType": 1,
"Flags": 66584,
"GroupId": 15,
"RoleDefinitionId": 1073741826,
"IsDeleted": false,
"HasLinkClaim": false,
"IsDefault": true,
"Invitees": [
{
"Type": 1,
"PId": 13,
"ObjectId": "3b708155-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1715997235995)\/"
}
]
}
]
日時は Unixtime として保存されているようで、共有されたユーザーは Invitees に入っているようです
次に、アイテムの RoleAssignments の情報を確認してみます
PS C:\> $item = Get-PnPListItemPermission -List "ドキュメント" -Id 1
PS C:\> $item.Permissions
PermissionLevels PrincipalName PrincipalType PrincipalId
---------------- ------------- ------------- -----------
{フル コントロール} TestSite 所有者 SharePointGroup 3
{閲覧} TestSite 閲覧者 SharePointGroup 4
{編集} TestSite メンバー SharePointGroup 5
{閲覧} SharingLinks.40159435-xxxx-xxxx-xxxx-xxxxxxxxxxxx.Flexible.8dc3e528-xxxx-xxxx-xxxx-xxxxxxxxxxxx SharePointGroup 15
{制限付きアクセス} Limited Access System Group For List 0a0ce4b8-xxxx-xxxx-xxxx-xxxxxxxxxxxx SharePointGroup 16
{制限付きアクセス} Limited Access System Group SharePointGroup 18
参考サイトに載っていたように、共有リンクを作成すると、SharingLinks.<SharingDocId>.Flexible.<ShareId> という命名規則の SharePoint グループが作られています
続いて、SharePoint グループのメンバーを確認します
PS C:\> Get-PnPGroupMember -Group 15
Id Title LoginName Email
-- ----- --------- -----
13 テストユーザー 01 i:0#.f|membership|testuser01@<your-organization-name>.onmicrosoft.com testuser01@<your-organization-name>.onmicrosoft.com
# PrincipalName をパラメーターにセットしても取得は可能
# PS C:\> Get-PnPGroupMember -Group 'SharingLinks.40159435-xxxx-xxxx-xxxx-xxxxxxxxxxxx.Flexible.8dc3e528-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
想定していたユーザーが追加されていました
3. 共有リンクを編集して、サイト内のユーザーを追加したとき
「2. サイト内のユーザーに共有したとき」で作成した共有リンクに、サイト内ユーザーの「テストユーザー 02」を追加します
それでは、再度 AvailabelLinks を取得してみます
[
{
"LinkKind": 6,
"ExpirationDateTime": null,
"ExpirationModifiedDate": "\/Date(1715997237979)\/",
"IsActive": true,
"ShareId": "8dc3e528-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AuthKey": "xxxxxxxxxxxxxxxxxxxxxxx",
"CreatedById": 7,
"LastModifiedById": 7,
"CreatedDate": "\/Date(1715997236417)\/",
"LastModifiedDate": "\/Date(1716037037829)\/",
"ObjectType": 1,
"Flags": 66584,
"GroupId": 15,
"RoleDefinitionId": 1073741826,
"IsDeleted": false,
"HasLinkClaim": false,
"IsDefault": true,
"Invitees": [
{
"Type": 1,
"PId": 13,
"ObjectId": "3b708155-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1715997235995)\/"
},
{
"Type": 1,
"PId": 14,
"ObjectId": "9a9f48ce-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716037037767)\/"
}
]
}
]
LastModifiedDate の値が変わったこと、 Invitees にレコードが 1 件追加されたことが判ります
続いて、SharingLinks.<SharingDocId>.Flexible.<ShareId> グループのメンバーを確認してみます
Id Title LoginName Email
-- ----- --------- -----
13 テストユーザー 01 i:0#.f|membership|testuser01@<your-organization-name>.onmicrosoft.com testuser01@<your-organization-name>.onmicrosoft.com
14 テストユーザー 02 i:0#.f|membership|testuser02@<your-organization-name>.onmicrosoft.com testuser02@<your-organization-name>.onmicrosoft.com
こちらもユーザーが追加されたことが判ります
4. 共有リンクを編集して、サイト外ユーザーを追加したとき
「2. サイト内のユーザーに共有したとき」で作成した共有リンクに、サイト外ユーザーの「サイト外テストユーザー」を追加し、AvailabelLinks を取得してみます
[
{
"LinkKind": 6,
"ExpirationDateTime": null,
"ExpirationModifiedDate": "\/Date(1715997237979)\/",
"IsActive": true,
"ShareId": "8dc3e528-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AuthKey": "xxxxxxxxxxxxxxxxxxxxxxx",
"CreatedById": 7,
"LastModifiedById": 7,
"CreatedDate": "\/Date(1715997236417)\/",
"LastModifiedDate": "\/Date(1716042685711)\/",
"ObjectType": 1,
"Flags": 66584,
"GroupId": 15,
"RoleDefinitionId": 1073741826,
"IsDeleted": false,
"HasLinkClaim": false,
"IsDefault": true,
"Invitees": [
{
"Type": 1,
"PId": 13,
"ObjectId": "3b708155-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1715997235995)\/"
},
{
"Type": 1,
"PId": 14,
"ObjectId": "9a9f48ce-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716037037767)\/"
},
{
"Type": 1,
"PId": 19,
"ObjectId": "81166646-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716042685305)\/"
}
]
}
]
続いて、SharingLinks.<SharingDocId>.Flexible.<ShareId>
グループのメンバーを確認してみます
Id Title LoginName Email
-- ----- --------- -----
19 サイト外テストユーザー i:0#.f|membership|[email protected]
13 テストユーザー 01 i:0#.f|membership|testuser01@<your-organization-name>.onmicrosoft.com testuser01@<your-organization-name>.onmicrosoft.com
14 テストユーザー 02 i:0#.f|membership|testuser02@<your-organization-name>.onmicrosoft.com testuser02@<your-organization-name>.onmicrosoft.com
5. 共有リンクを編集して、テストグループを追加したとき
「2. サイト内のユーザーに共有したとき」で作成した共有リンクに、Microsoft 365 グループの「テストグループ」を追加し、AvailabelLinks を取得してみます
[
{
"LinkKind": 6,
"ExpirationDateTime": null,
"ExpirationModifiedDate": "\/Date(1715997237979)\/",
"IsActive": true,
"ShareId": "8dc3e528-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AuthKey": "xxxxxxxxxxxxxxxxxxxxxxx",
"CreatedById": 7,
"LastModifiedById": 7,
"CreatedDate": "\/Date(1715997236417)\/",
"LastModifiedDate": "\/Date(1716043958739)\/",
"ObjectType": 1,
"Flags": 66584,
"GroupId": 15,
"RoleDefinitionId": 1073741826,
"IsDeleted": false,
"HasLinkClaim": false,
"IsDefault": true,
"Invitees": [
{
"Type": 1,
"PId": 13,
"ObjectId": "3b708155-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1715997235995)\/"
},
{
"Type": 1,
"PId": 14,
"ObjectId": "9a9f48ce-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716037037767)\/"
},
{
"Type": 1,
"PId": 19,
"ObjectId": "81166646-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716042685305)\/"
},
{
"Type": 2,
"PId": 20,
"InvitedBy": 7,
"InvitedOn": "\/Date(1716043958505)\/"
}
]
}
]
Microsoft 365 グループは Type = 2 になっています
続いて、SharingLinks.<SharingDocId>.Flexible.<ShareId> グループのメンバーを確認してみます
Id Title LoginName Email
-- ----- --------- -----
19 サイト外テストユーザー i:0#.f|membership|[email protected]
20 テストグループ メンバー c:0o.c|federateddirectoryclaimprovider|b4bd9442-xxxx-xxxx-xxxx-xxxxxxxxxxxx [email protected]
13 テストユーザー 01 i:0#.f|membership|testuser01@<your-organization-name>.onmicrosoft.com testuser01@<your-organization-name>.onmicrosoft.com
14 テストユーザー 02 i:0#.f|membership|testuser02@<your-organization-name>.onmicrosoft.com testuser02@<your-organization-name>.onmicrosoft.com
グループが追加されていました
6. 共有リンクを編集して、ゲストユーザーを追加したとき
「2. サイト内のユーザーに共有したとき」で作成した共有リンクに、別テナントの「ゲストユーザー」を追加し、AvailabelLinks を取得してみます
[
{
"LinkKind": 6,
"ExpirationDateTime": null,
"ExpirationModifiedDate": "\/Date(1715997237979)\/",
"IsActive": true,
"ShareId": "8dc3e528-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AuthKey": "xxxxxxxxxxxxxxxxxxxxxxx",
"CreatedById": 7,
"LastModifiedById": 7,
"CreatedDate": "\/Date(1715997236417)\/",
"LastModifiedDate": "\/Date(1716044337474)\/",
"ObjectType": 1,
"Flags": 66584,
"GroupId": 15,
"RoleDefinitionId": 1073741826,
"IsDeleted": false,
"HasLinkClaim": false,
"IsDefault": true,
"Invitees": [
{
"Type": 1,
"PId": 13,
"ObjectId": "3b708155-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1715997235995)\/"
},
{
"Type": 1,
"PId": 14,
"ObjectId": "9a9f48ce-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716037037767)\/"
},
{
"Type": 1,
"PId": 19,
"ObjectId": "81166646-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716042685305)\/"
},
{
"Type": 2,
"PId": 20,
"InvitedBy": 7,
"InvitedOn": "\/Date(1716043958505)\/"
},
{
"Type": 1,
"PId": 21,
"ShareByEmailGuest": true,
"ObjectId": "1a427b01-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716044337333)\/"
}
]
}
]
ShareByEmailGuest が true になっているのが特徴のようです
続いて、SharingLinks.<SharingDocId>.Flexible.<ShareId> グループのメンバーを確認してみます
Id Title LoginName Email
-- ----- --------- -----
21 ゲストユーザー i:0#.f|membership|miyamiya_example.com#ext#@<your-organization-name>.onmicrosoft.com [email protected]
19 サイト外テストユーザー i:0#.f|membership|[email protected]
20 テストグループ メンバー c:0o.c|federateddirectoryclaimprovider|b4bd9442-xxxx-xxxx-xxxx-xxxxxxxxxxxx [email protected]
13 テストユーザー 01 i:0#.f|membership|testuser01@<your-organization-name>.onmicrosoft.com testuser01@<your-organization-name>.onmicrosoft.com
14 テストユーザー 02 i:0#.f|membership|testuser02@<your-organization-name>.onmicrosoft.com testuser02@<your-organization-name>.onmicrosoft.com
7. 共有リンクを編集して、外部ユーザーを追加したとき
「2. サイト内のユーザーに共有したとき」で作成した共有リンクに、私の個人的なメールアドレスを「外部ユーザー」として追加し、AvailabelLinks を取得してみます
[
{
"LinkKind": 6,
"ExpirationDateTime": null,
"ExpirationModifiedDate": "\/Date(1715997237979)\/",
"IsActive": true,
"ShareId": "8dc3e528-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AuthKey": "xxxxxxxxxxxxxxxxxxxxxxx",
"CreatedById": 7,
"LastModifiedById": 7,
"CreatedDate": "\/Date(1715997236417)\/",
"LastModifiedDate": "\/Date(1716048790497)\/",
"ObjectType": 1,
"Flags": 66584,
"GroupId": 15,
"RoleDefinitionId": 1073741826,
"IsDeleted": false,
"HasLinkClaim": false,
"IsDefault": true,
"Invitees": [
{
"Type": 1,
"PId": 13,
"ObjectId": "3b708155-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1715997235995)\/"
},
{
"Type": 1,
"PId": 14,
"ObjectId": "9a9f48ce-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716037037767)\/"
},
{
"Type": 1,
"PId": 19,
"ObjectId": "81166646-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716042685305)\/"
},
{
"Type": 2,
"PId": 20,
"InvitedBy": 7,
"InvitedOn": "\/Date(1716043958505)\/"
},
{
"Type": 1,
"PId": 21,
"ShareByEmailGuest": true,
"ObjectId": "1a427b01-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716044337333)\/"
},
{
"Type": 3,
"Email": "[email protected]",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716048790310)\/"
}
]
}
]
外部ユーザーは Type = 3 になっています
続いて、SharingLinks.<SharingDocId>.Flexible.<ShareId> グループのメンバーを確認してみます
Id Title LoginName Email
-- ----- --------- -----
21 ゲストユーザー i:0#.f|membership|miyamiya_example.com#ext#@<your-organization-name>.onmicrosoft.com [email protected]
19 サイト外テストユーザー i:0#.f|membership|[email protected]
20 テストグループ メンバー c:0o.c|federateddirectoryclaimprovider|b4bd9442-xxxx-xxxx-xxxx-xxxxxxxxxxxx [email protected]
13 テストユーザー 01 i:0#.f|membership|testuser01@<your-organization-name>.onmicrosoft.com testuser01@<your-organization-name>.onmicrosoft.com
14 テストユーザー 02 i:0#.f|membership|testuser02@<your-organization-name>.onmicrosoft.com testuser02@<your-organization-name>.onmicrosoft.com
先程追加した外部ユーザーが含まれていません
参考サイトにも書いていたのですが、 RoleAssignmentAdded イベントがトリガーされるタイミングの問題のようですので、RoleAssignment を頼りに、共有されたユーザー一覧を作ろうとすると漏れが発生しそうです
8. 外部ユーザーで共有されたファイルを閲覧したとき
外部ユーザーで一度ファイルを閲覧、その後に、AvailabelLinks を取得してみます
[
{
"LinkKind": 6,
"ExpirationDateTime": null,
"ExpirationModifiedDate": "\/Date(1715997237979)\/",
"IsActive": true,
"ShareId": "8dc3e528-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AuthKey": "xxxxxxxxxxxxxxxxxxxxxxx",
"CreatedById": 7,
"LastModifiedById": 7,
"CreatedDate": "\/Date(1715997236417)\/",
"LastModifiedDate": "\/Date(1716048790497)\/",
"ObjectType": 1,
"Flags": 66584,
"GroupId": 15,
"RoleDefinitionId": 1073741826,
"IsDeleted": false,
"HasLinkClaim": false,
"IsDefault": true,
"Invitees": [
{
"Type": 1,
"PId": 13,
"ObjectId": "3b708155-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1715997235995)\/"
},
{
"Type": 1,
"PId": 14,
"ObjectId": "9a9f48ce-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716037037767)\/"
},
{
"Type": 1,
"PId": 19,
"ObjectId": "81166646-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716042685305)\/"
},
{
"Type": 2,
"PId": 20,
"InvitedBy": 7,
"InvitedOn": "\/Date(1716043958505)\/"
},
{
"Type": 1,
"PId": 21,
"ShareByEmailGuest": true,
"ObjectId": "1a427b01-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716044337333)\/"
},
{
"Type": 3,
"Email": "[email protected]",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716048790310)\/"
}
]
}
]
こちらは変わりがないようです
続いて、SharingLinks.<SharingDocId>.Flexible.<ShareId> グループのメンバーを確認してみます
Id Title LoginName Email
-- ----- --------- -----
22 [email protected] i:0#.f|membership|urn%3aspo%3aguest#[email protected] [email protected]
21 ゲストユーザー i:0#.f|membership|miyamiya_example.com#ext#@<your-organization-name>.onmicrosoft.com [email protected]
19 サイト外テストユーザー i:0#.f|membership|[email protected]
20 テストグループ メンバー c:0o.c|federateddirectoryclaimprovider|b4bd9442-xxxx-xxxx-xxxx-xxxxxxxxxxxx [email protected]
13 テストユーザー 01 i:0#.f|membership|testuser01@<your-organization-name>.onmicrosoft.com testuser01@<your-organization-name>.onmicrosoft.com
14 テストユーザー 02 i:0#.f|membership|testuser02@<your-organization-name>.onmicrosoft.com testuser02@<your-organization-name>.onmicrosoft.com
外部ユーザーがアクセスしたら、Id 22 の外部ユーザーが追加されました
9. 共有を停止したとき
共有を停止して、再度 AvailabelLinks を取得してみます
[]
値が空の配列になりました
続いて、SharingLinks.<SharingDocId>.Flexible.<ShareId> グループのメンバーを確認してみます
Get-PnPGroupMember: グループが見つかりません。
SharingLinks.<SharingDocId>.Flexible.<ShareId> グループからメンバーが削除されたようです
10. 「すべてのユーザー」で共有したとき
ここまでは、リンクの設定で「選択したユーザー」を使ってきましたが、より緩い権限の「すべてのユーザー」で行ったときを確認します
すべてのユーザーとは、平たく言うと、リンクを知っているなら誰でも共有されるというものです
早速、AvailabelLinks を確認してみます
[
{
"LinkKind": 6,
"ExpirationDateTime": "\/Date(1716917822000)\/",
"ExpirationModifiedDate": "\/Date(1716096706154)\/",
"IsActive": true,
"ShareId": "c6f1af4c-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AuthKey": "xxxxxxxxxxxxxxxxxxxxxxx",
"CreatedById": 7,
"LastModifiedById": 7,
"CreatedDate": "\/Date(1716096706154)\/",
"LastModifiedDate": "\/Date(1716096706154)\/",
"ObjectType": 1,
"Flags": 66572,
"GroupId": 23,
"LinkClaimId": 25,
"RoleDefinitionId": 1073741826,
"IsDeleted": false,
"HasLinkClaim": true,
"IsDefault": true,
"PHash": "xxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxx",
"PHashChanged": "\/Date(1716096705841)\/",
"PHashLastChangedById": 7
}
]
Invitees がなく、期限を表す ExpirationDateTime に値が入っていますね
一旦、SharingLinks.<SharingDocId>.Flexible.<ShareId> グループの PrincipalId を確認後、メンバーを確認してみます
PS C:\> Get-PnPGroupMember -Group 23
空振りしましたので、メンバーには何も含まれていないようです
グループの情報も取得してみます
PS C:\> Get-PnPGroup -Identity SharingLinks.<SharingDocId>.Flexible.<ShareId> | Format-List *
AllowMembersEditMembership : False
AllowRequestToJoinLeave : False
AutoAcceptRequestToJoinLeave : False
CanCurrentUserEditMembership :
CanCurrentUserManageGroup :
CanCurrentUserViewMembership :
Description : このグループは、'Shared Documents/共有テスト用.xlsx' 項目の Flexible 共有リンクのためのものです
OnlyAllowMembersViewMembership : True
Owner : Microsoft.SharePoint.Client.Principal
OwnerTitle : システム アカウント
RequestToJoinLeaveEmailSetting :
Users : {}
Id : 23
IsHiddenInUI : False
LoginName : SharingLinks.<SharingDocId>.Flexible.<ShareId>
Title : SharingLinks.<SharingDocId>.Flexible.<ShareId>
PrincipalType : SharePointGroup
Context : PnP.Framework.PnPClientContext
Tag :
Path : Microsoft.SharePoint.Client.ObjectPathIdentity
ObjectVersion :
ServerObjectIsNull : False
TypedObject : Microsoft.SharePoint.Client.Group
やはり、共有リンクリストを見たほうが安心します
11. 「すべてのユーザー」と並行して「選択したユーザー」にも共有したとき
「10. 「すべてのユーザー」で共有したとき」とは別に、「選択したユーザー」としてサイト内ユーザーの「テストユーザー 02」を追加し、AvailabelLinks を取得してみます
[
{
"LinkKind": 6,
"ExpirationDateTime": "\/Date(1716917822000)\/",
"ExpirationModifiedDate": "\/Date(1716096706154)\/",
"IsActive": true,
"ShareId": "c6f1af4c-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AuthKey": "xxxxxxxxxxxxxxxxxxxxxxx",
"CreatedById": 7,
"LastModifiedById": 7,
"CreatedDate": "\/Date(1716096706154)\/",
"LastModifiedDate": "\/Date(1716096706154)\/",
"ObjectType": 1,
"Flags": 66572,
"GroupId": 23,
"LinkClaimId": 25,
"RoleDefinitionId": 1073741826,
"IsDeleted": false,
"HasLinkClaim": true,
"IsDefault": true,
"PHash": "xxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxx",
"PHashChanged": "\/Date(1716096705841)\/",
"PHashLastChangedById": 7
},
{
"LinkKind": 6,
"ExpirationDateTime": null,
"ExpirationModifiedDate": "\/Date(1716105978692)\/",
"IsActive": true,
"ShareId": "b2de0936-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AuthKey": "xxxxxxxxxxxxxxxxxxxxxxx",
"CreatedById": 7,
"LastModifiedById": 7,
"CreatedDate": "\/Date(1716105978692)\/",
"LastModifiedDate": "\/Date(1716105978692)\/",
"ObjectType": 1,
"Flags": 66584,
"GroupId": 26,
"RoleDefinitionId": 1073741826,
"IsDeleted": false,
"HasLinkClaim": false,
"IsDefault": true,
"Invitees": [
{
"Type": 1,
"PId": 13,
"ObjectId": "3b708155-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"InvitedBy": 7,
"InvitedOn": "\/Date(1716105978520)\/"
}
]
}
]
こちらは予想通り、配列で複数取得されました
続いて、グループ一覧を見てみます
PS C:\> Get-PnPGroup
Id Title LoginName
-- ----- ---------
18 Limited Access System Group Limited Access System Group
16 Limited Access System Group For List 0a0ce4b8-xxxx-xxxx-xxxx-xxxxxxxxxxxx Limited Access System Group For List 0a0ce4b8-xxxx-xxxx-xxxx-xxxxxxxxxxxx
17 Limited Access System Group For Web e8715af3-xxxx-xxxx-xxxx-xxxxxxxxxxxx Limited Access System Group For Web e8715af3-xxxx-xxxx-xxxx-xxxxxxxxxxxx
26 SharingLinks.40159435-xxxx-xxxx-xxxx-xxxxxxxxxxxx.Flexible.b2de0936-xxxx-xxxx-xxxx-xxxxxxxxxxxx SharingLinks.40159435-xxxx-xxxx-xxxx-xxxxxxxxxxxx.Flexible.b2de0936-xxxx-xxxx-xxxx-xxxxxxxxxxxx
23 SharingLinks.40159435-xxxx-xxxx-xxxx-xxxxxxxxxxxx.Flexible.c6f1af4c-xxxx-xxxx-xxxx-xxxxxxxxxxxx SharingLinks.40159435-xxxx-xxxx-xxxx-xxxxxxxxxxxx.Flexible.c6f1af4c-xxxx-xxxx-xxxx-xxxxxxxxxxxx
5 TestSite メンバー TestSite メンバー
4 TestSite 閲覧者 TestSite 閲覧者
3 TestSite 所有者 TestSite 所有者
23, 26 のグループメンバーを確認してみます
PS C:\> Get-PnPGroupMember -Group 23
PS C:\> Get-PnPGroupMember -Group 26
Id Title LoginName Email
-- ----- --------- -----
13 テストユーザー 01 i:0#.f|membership|testuser01@<your-organization-name>.onmicrosoft.com testuser01@<your-organization-name>.onmicrosoft.com
ついでに、 Limited Access System Group For Web e8715af3-xxxx-xxxx-xxxx-xxxxxxxxxxxx という制限付きアクセスのメンバーも確認してみます
PS C:\> Get-PnPGroupMember -Group 17
Id Title LoginName Email
-- ----- --------- -----
22 [email protected] i:0#.f|membership|urn%3aspo%3aguest#[email protected] [email protected]
25 SLinkClaim.40159435-5f26-42eb-b6a0-7d00d0d2fd7a.c6f1af4c-a4d4-47a6-86d1-57575431beb8 c:0u.c|tenant|349d1e878165b72db13b16736bbc9c267b46d8632fcc4ea017be24aa1ebffd1c
21 ゲストユーザー i:0#.f|membership|example_example.com#ext#@<your-organization-name>.onmicrosoft.com [email protected]
19 サイト外テストユーザー i:0#.f|membership|[email protected]
20 テストグループ メンバー c:0o.c|federateddirectoryclaimprovider|b4bd9442-8f6d-4eb1-b5da-29cceac05cfb [email protected]
13 テストユーザー 01 i:0#.f|membership|testuser01@<your-organization-name>.onmicrosoft.com testuser01@<your-organization-name>.onmicrosoft.com
14 テストユーザー 02 i:0#.f|membership|testuser02@<your-organization-name>.onmicrosoft.com testuser02@<your-organization-name>.onmicrosoft.com
リンクに直接アクセスするために、制限付きアクセスが付与されていたんですね
Id 25 のメンバーは、AvailabelLinks のこのあたりで判断できそうです
"GroupId": 23,
"LinkClaimId": 25,
考察
全てのパターンを網羅はしてないですが、概ねどういう感じかは判った気がします
せっかくですので、次は、この情報からなにかレポート的なものを作ってみたいと思います
ディスカッション
コメント一覧
まだ、コメントがありません