SharePoint Online で作成された共有リンクについて調べてみた

2024/05/25

今まで、SharePoint の共有リンクについて、細かいことを気にせずに使っていましたが、共有リンクを「いつ、誰が、誰向けに作ったのか?」を知りたいと思い調べると、メッチャ簡単にできるんですねー

皆さまは、無駄な苦労などせずに、参考サイト を確認して、ポチッとレポートをダウンロードしてください

この記事は、Microsoft の公式情報を元にしたものではなく、個人的な調査メモとなりますので、本情報を業務でご利用する際には自己責任でお願いいたします

環境

ローカルの環境は次の通りです

  • Windows 11 Pro
  • PowerShell 7.4.2

SharePoint Online には、次の環境を用意しました

  • チームサイト TestSite を作成
    • プライバシーの設定:プライベート
    • 言語の選択:日本語
    • タイムゾーン:(UTC +09:00) 大阪、札幌、東京
  • SharePoint 管理センターで下記を行う
    • メニューから、[ ポリシー ] -> [ 共有 ] を開き、下記のように設定
    • メニューから、[ サイト ] -> [ アクティブなサイト ] を開き、 TestSite を選択し、上部メニューから [ 共有 ] をクリックしてダイアログを開き、下記のように設定
  • サイト TestSite に移動し下記行う
    • 右上の歯車マークをクリックして [ サイトのアクセス許可 ] をクリックし、[ メンバーが共有する方法を変更 ] をクリック、共有アクセス許可を確認
    • サイトのメンバーに「テストユーザー 01」「テストユーザー 02」を追加
  • 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」に対して 初めての共有リンク作成 を行います

  1. ファイル名の右にある [ ・・・ (三点リーダー)] から [ 共有 ] をクリック
  2. リンクのコピーの横にある歯車アイコンをクリック
  3. [ 選択したユーザー ] を選択し、[ 適用 ] ボタンをクリック
  4. 共有するユーザーを追加し、 [ リンクのコピー ] をクリック

以上で、共有リンクが作成されたので、SharePoint 上で確認してみます

  1. ファイル名の右にある [ ・・・ (三点リーダー)] から [ アクセス許可の管理 ] をクリック
  2. モーダルダイアログ上部の [ ・・・ (三点リーダー)] から [ 詳細設定 ] をクリック

    詳細設定画面

共有リンクを作成すると、権限の継承が切られて、固有の権限になっていることが判ります
※権限の継承については詳しく触れませんが、 この辺り が参考になると思います

ここで先ほどと同じように、共有リンク リストが作成されているか確認します

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)\/...
      :
    (略)

参考にさせて頂いたサイトによると、この中で SharingDocIdAvailableLinks が重要とのことなので、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」を追加します

  1. アクセス許可の管理で、リンクの右の歯車アイコンをクリック
  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(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)\/"
            }
        ]
    }
]

ShareByEmailGuesttrue になっているのが特徴のようです

続いて、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,

考察

全てのパターンを網羅はしてないですが、概ねどういう感じかは判った気がします

せっかくですので、次は、この情報からなにかレポート的なものを作ってみたいと思います

参考サイト