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

更新 2024/05/25

この記事の内容
  1. 環境
  2. 検証内容
  3. 検証
  4. 1. 一度も共有リンクが作られていないとき
  5. 2. サイト内のユーザーに共有したとき
  6. 3. 共有リンクを編集して、サイト内のユーザーを追加したとき
  7. 4. 共有リンクを編集して、サイト外ユーザーを追加したとき
  8. 5. 共有リンクを編集して、テストグループを追加したとき
  9. 6. 共有リンクを編集して、ゲストユーザーを追加したとき
  10. 7. 共有リンクを編集して、外部ユーザーを追加したとき
  11. 8. 外部ユーザーで共有されたファイルを閲覧したとき
  12. 9. 共有を停止したとき
  13. 10. 「すべてのユーザー」で共有したとき
  14. 11. 「すべてのユーザー」と並行して「選択したユーザー」にも共有したとき
  15. 考察
  16. 参考サイト

今まで、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)\/...
      :
    (略)

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

  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|example@example.com
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|example@example.com
20 テストグループ メンバー   c:0o.c|federateddirectoryclaimprovider|b4bd9442-xxxx-xxxx-xxxx-xxxxxxxxxxxx TestGroup@example.com
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   miyamiya@example.com
19 サイト外テストユーザー   i:0#.f|membership|example@example.com
20 テストグループ メンバー  c:0o.c|federateddirectoryclaimprovider|b4bd9442-xxxx-xxxx-xxxx-xxxxxxxxxxxx            TestGroup@example.com
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": "EXAMPLE@GMAIL.COM",
                "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   miyamiya@example.com
19 サイト外テストユーザー    i:0#.f|membership|example@example.com
20 テストグループ メンバー   c:0o.c|federateddirectoryclaimprovider|b4bd9442-xxxx-xxxx-xxxx-xxxxxxxxxxxx            TestGroup@example.com
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": "EXAMPLE@GMAIL.COM",
                "InvitedBy": 7,
                "InvitedOn": "\/Date(1716048790310)\/"
            }
        ]
    }
]

こちらは変わりがないようです

続いて、SharingLinks.<SharingDocId>.Flexible.<ShareId> グループのメンバーを確認してみます

Id Title                     LoginName                                                                              Email
-- -----                     ---------                                                                              -----
22 example@gmail.com         i:0#.f|membership|urn%3aspo%3aguest#example@gmail.com                                  example@gmail.com
21 ゲストユーザー             i:0#.f|membership|miyamiya_example.com#ext#@<your-organization-name>.onmicrosoft.com   miyamiya@example.com
19 サイト外テストユーザー      i:0#.f|membership|example@example.com
20 テストグループ メンバー     c:0o.c|federateddirectoryclaimprovider|b4bd9442-xxxx-xxxx-xxxx-xxxxxxxxxxxx            TestGroup@example.com
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 example@gmail.com                                                                    i:0#.f|membership|urn%3aspo%3aguest#example@gmail.com                                 example@gmail.com
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   example@example.com
19 サイト外テストユーザー                                                                 i:0#.f|membership|example@example.com
20 テストグループ メンバー                                                                c:0o.c|federateddirectoryclaimprovider|b4bd9442-8f6d-4eb1-b5da-29cceac05cfb           TestGroup@example.com
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,

考察

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

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

参考サイト

ページの先頭へ ↑