> For the complete documentation index, see [llms.txt](https://docs.realmjoin.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.realmjoin.com/ja/zi-dong-hua/runbooks/runbook-references/org/general/sync-shared-channel-owners_scheduled.md).

# Shared Channel 所有者の同期（定期実行）

### 説明

Teams の Shared Channel は親チームから所有権を継承しません。このスケジュール実行される runbook はその不足を埋めます。マッピングで指定された各チームについて、対応付けられた Security Group のメンバーがそのチームおよびチームがホストするすべての shared channel の所有者であることを保証します。チーム名から所有者グループへのマッピングは、RealmJoin の org setting として中央で管理されます。この runbook は add-only です。既存の所有者やメンバーが削除されることはありません。そのため、新しく作成された shared channel は次回の実行時に自動的に検出されます。必要に応じて、レポートをメール送信したり、レポートファイルをダウンロードリンクとしてアップロードしたりできます。ReportFileFormat パラメーターは、生成して配信するレポートファイル形式（CSV のみ、CSV と XLSX、または XLSX のみ）を制御します。CSV 添付ファイルがメールのサイズ制限を超え、かつ "CSV & XLSX" が選択されている場合、メールは Excel ワークブックのみになります。マッピング規則と構成については、付属のドキュメントを参照してください。

### 仕組み

各実行で runbook は次を行います:

1. org setting からチーム名から所有者グループへのマッピングを読み取ります `SharedChannelOwners.Mapping`.
2. 各エントリについて、チームを次の条件で検索します **完全一致の表示名**.
3. そのエントリの所有者グループを、その推移的な **ユーザー** メンバーに展開します（ゲストはスキップされます。ゲストは shared channel に所属できないためです）。
4. それらのユーザーが、チームおよびチームがホストするすべての **ホストされている** shared channel の所有者であることを保証します。

この runbook は **add-only**です。既存の所有者やメンバーを降格または削除することはありません。そのため、新しく作成された shared channel は、すでに存在している設定に影響を与えることなく、次回のスケジュール実行で自動的に検出されます。

#### マッピング構成

マッピングは RealmJoin の org settings に中央で保存されます（Runbook Customization → `Settings` → `SharedChannelOwners.Mapping`）そのため、一度だけ管理すればよく、すべてのスケジュールで共有されます。これは次の形式の一覧です `{ TeamName, OwnerGroupId }` オブジェクトであり、 `TeamName` は **チームの正確な表示名** です（すぐに使える例については *Notes* セクションを参照してください）。非表示の `TeamOwnerGroupMapping` パラメーターはこの設定から注入されます。runbook はこれを構造化配列（推奨されるサブ設定形式）としても JSON 文字列としても受け取り、どちらも正規化します。

#### チームの照合

各マッピングエントリは、明示的に名前が付けられた 1 つのチームを対象にします:

* チームは次の条件で照合されます **完全一致の表示名** （大文字小文字を区別しません。Microsoft Graph と一致します。設定された名前の前後の空白は無視されます）。処理されるのはそのチームだけです。接頭辞やワイルドカードの動作はないため、エントリに `EXT Service A` と指定しても `EXT Service A Backup` などには影響しません。
* Entra ID では表示名の一意性は保証されません。複数のチームが設定された名前を共有している場合、所有者グループはそれら **すべて** に適用されます。チームが一致しない場合、そのエントリは *見つかりません* として報告され、スキップされます。

#### チームの選択

設定された各 `TeamName` について、runbook は Graph の `displayName eq '...'` 検索を実行し、Microsoft 365 グループのうち、次の状態としてプロビジョニングされているものだけを保持します **Team**.

#### 変更される内容

* **Team（省略可、 `IncludeTeamOwners`、既定で有効）:** 所有者グループのユーザーが、親 M365 グループの所有者およびメンバーとして追加されます。チームのメンバーシップは shared channel の所有者になるための技術的前提条件でもあるため、この手順でチャネルの手順が有効になります。
* **Shared channel:** ホストされている各 shared channel（`membershipType eq 'shared'`）について、各所有者グループのユーザーがチャネル **所有者** として確実に追加されます。存在しない場合は直接追加され、すでにメンバーであれば昇格されます。直接の所有者追加が拒否された場合（たとえばメンバーシップの複製遅延など）、runbook はまずユーザーをメンバーとして追加し、その後に昇格するようフォールバックします。

#### Dry run

を設定すると **`WhatIfMode`** 、何も書き込まずに変更内容をログに出力します。このモードでは、runbook は最初に処理対象のチーム（所有者グループ付き）と、見つからなかった設定済みのチーム名を表示します。

#### レポート（省略可、両方とも既定でオフ）

* **`SendEmailReport`** を有効にすると、RealmJoin ブランドのメールが（ `Send-RjReportEmail`経由で）実行統計と 2 つの CSV 添付ファイル付きで送信されます。1 つはチームごとの要約、もう 1 つは変更ごとの詳細一覧です。送信者は `RJReport.EmailSender` 設定
* **`CreateDownloadLink`** を使用します。同じ CSV がストレージ アカウントにアップロードされ、期限付きの SAS ダウンロードリンクが返されます（両方のオプションが有効な場合はメールにも埋め込まれます）。ターゲットのストレージ アカウントは `RJReport.StorageAccount.*` 設定から取得されます。

ストレージへのアップロードは Automation アカウントのマネージド ID で認証されます。この ID には対象のストレージ アカウントに対する **Storage Blob Data Contributor** RBAC ロールが必要です（これは Azure RBAC の割り当てであり、Graph のアプリケーション権限ではありません）。

#### スケジューリング

スケジュールに従って自動実行されるよう設計されています。構成が org settings に中央集約され、runbook が add-only かつ冪等であるため、1 つの定期スケジュールで、メンバーやチャネルの増減があっても、マッピングされたすべてのチームとその shared channel を同期状態に保てます。

### 場所

Organization → General → Sync Shared Channel Owners (Scheduled)

**Runbook の完全名**

rjgit-org\_general\_sync-shared-channel-owners\_scheduled

### 権限

#### アプリケーション権限

* **種類**: Microsoft Graph
  * Group.ReadWrite.All
  * GroupMember.ReadWrite.All
  * Channel.ReadBasic.All
  * ChannelMember.ReadWrite.All
  * Mail.Send

### パラメーター

#### TeamOwnerGroupMapping

正確なチーム表示名から所有者 Security Group オブジェクト ID へのマッピング。例: \[{ "TeamName": "EXT Service A", "OwnerGroupId": "00000000-0000-0000-0000-000000000000" }]。非表示パラメーターで、org Setting "SharedChannelOwners.Mapping" にバインドされています。RealmJoin ポータルがその値を注入します。runbook はそれを逆シリアル化されたオブジェクト/配列（構造化されたサブ設定）としても JSON 文字列としても受け取り、どちらも正規化します。

| プロパティ | 値      |
| ----- | ------ |
| 必須    | false  |
| 既定値   | \[]    |
| 種類    | オブジェクト |

#### IncludeTeamOwners

有効にすると（既定）、所有者グループのメンバーは親チーム自体の所有者およびメンバー（M365 グループの所有者/メンバー）としても確実に設定されます。チームのメンバーシップはチャネル所有権の前提条件でもあります。

| プロパティ | 値       |
| ----- | ------- |
| 必須    | false   |
| 既定値   | True    |
| 種類    | Boolean |

#### WhatIfMode

有効にすると、runbook は何も書き込まずに実行予定の変更内容だけをログに記録します。

| プロパティ | 値       |
| ----- | ------- |
| 必須    | false   |
| 既定値   | False   |
| 種類    | Boolean |

#### SendEmailReport

有効にすると、RealmJoin ブランドのメール レポートが run 後に Send-RjReportEmail 経由で送信されます。本文には実行統計が含まれ、レポート ファイル（チームごとの要約と変更ごとの詳細）は選択されたレポート ファイル形式で添付されます。

| プロパティ | 値       |
| ----- | ------- |
| 必須    | false   |
| 既定値   | False   |
| 種類    | Boolean |

#### EmailTo

レポートの宛先メール アドレス（複数可、カンマ区切り）。SendEmailReport が有効な場合にのみ使用されます。

| プロパティ | 値     |
| ----- | ----- |
| 必須    | false |
| 既定値   |       |
| 種類    | 文字列   |

#### EmailFrom

レポートの送信元メールボックス。org Setting "RJReport.EmailSender" にバインドされます。

| プロパティ | 値     |
| ----- | ----- |
| 必須    | false |
| 既定値   |       |
| 種類    | 文字列   |

#### ReportFileFormat

生成して配信するレポート ファイルの形式を制御します: "CSV only"、"CSV & XLSX"（既定）または "XLSX only"。

| プロパティ | 値          |
| ----- | ---------- |
| 必須    | false      |
| 既定値   | CSV & XLSX |
| 種類    | 文字列        |

#### CreateDownloadLink

有効にすると、レポート ファイルがストレージ アカウントにアップロードされ、期限付きのダウンロードリンクが返されます（これが有効な場合はメール レポートにも含まれます）。既定ではオフです。

| プロパティ | 値       |
| ----- | ------- |
| 必須    | false   |
| 既定値   | False   |
| 種類    | Boolean |

#### ContainerName

アップロードに使用するストレージ コンテナー。runbook ごとに設定されます（グローバルな RJReport 設定ではありません）。

| プロパティ | 値                     |
| ----- | --------------------- |
| 必須    | false                 |
| 既定値   | shared-channel-owners |
| 種類    | 文字列                   |

#### ResourceGroupName

ストレージ アカウントを含むリソース グループ。"RJReport.StorageAccount.ResourceGroup" にバインドされます。

| プロパティ | 値     |
| ----- | ----- |
| 必須    | false |
| 既定値   |       |
| 種類    | 文字列   |

#### StorageAccountName

アップロードに使用するストレージ アカウント。"RJReport.StorageAccount.StorageAccountName" にバインドされます。

| プロパティ | 値     |
| ----- | ----- |
| 必須    | false |
| 既定値   |       |
| 種類    | 文字列   |

#### LinkExpiryDays

生成されたダウンロードリンクの有効期限までの日数。"RJReport.StorageAccount.LinkExpiryDays" にバインドされます。

| プロパティ | 値     |
| ----- | ----- |
| 必須    | false |
| 既定値   | 6     |
| 種類    | Int32 |

[Runbook Reference の概要に戻る](/ja/zi-dong-hua/runbooks/runbook-references.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.realmjoin.com/ja/zi-dong-hua/runbooks/runbook-references/org/general/sync-shared-channel-owners_scheduled.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
