ささみ学習帳 - sasami's study book

sasami's study book (仮)

Microsoft365 や Power Platform について学んだこと・アイデアのメモ

Teams チャネルのWikiをOneNoteへエクスポートするツールが使えるようになったので動作チェックしてみた(2/2) 2023年6月以降の変化

Teams チャネルのWikiをOneNoteへエクスポートするツールが使えるようになったので動作チェックしてみた(1/2)」の補足記事です。まずはリンク先をご覧ください。

 

 

2023年6月よりサポート対象外になりWikiの画面がまた変わる?

2023年6月からいよいよWikiはサポート対象外となりました。その関係かは不明ですが、2023年6月2日に新しいチャネルエクスペリエンスに移行した環境ではWikiタブの表示が大幅に変わっていることを確認しましたので、動作を確認してみました。

指定対象リリースのユーザーでTeamsアプリ・WebブラウザーTeamsで変わっている事を確認しています。(Mac, Windows11 (ARM),Windows10 (x64))

 

この仕様は新しいチャネルエクスペリエンス固有のものか?

この仕様は新しいチャネルエクスペリエンス固有のものか、今後Wikiが切り捨てられていく流れの一環で全ての環境でこちらの画面に変わるのか、現時点ではどのように切り替わっていくのか全く未知数です。

新しいチャネルエクスペリエンスは2023年6月から標準リリース環境への展開が始まることになっており、そちらが展開される方が早いかもしれません。

ただ、新しいチャネルエクスペリエンスが未提供の環境 (VDI環境など)もありますので、今後の展開に注目です。

 

[標準チャネル]Wikiタブを使っていた場合

データを入力していたWikiタブの場合は「Wikiアプリに移動」と「ノートにエクスポート」の2つのボタンが表示されます。

従来の「詳細を取得」ボタンよりも「ノートにエクスポート」の方が何のためのボタンか明確で良いですね。

エクスポートツールの画面には変化はないようです。

 

[標準チャネル]Wikiタブはあるが使っていなかった場合

「[ノートの追加]タブ」ボタンをクリックすると"メモ"タブが作成されます。【新機能】です。

従来の表示ではWikiを未使用だったチャネルでは"メモ"タブを簡単に追加する術がなく、追加するには面倒な手順が必要でした

未使用のWikiからですのでチャネル名のセクションだけの"メモ"タブが作成されました。

 

[標準チャネル]エクスポート後のWikiタブ

エクスポート後は「ノート/メモに移動」ボタンが大きく表示され、その下にWikiアプリへのリンクがひっそりと置かれています

ひっそりとリンクになっています。

WikiアプリのリンクをクリックしてみるとWikiアプリが開かれ、読み取り専用でWikiが見られるようです。

 

[プライベートチャネル]Wikiタブ

プライベートチャネルでも標準チャネルと同様に、Wikiはタブの中に表示されなくなっています。「Wikiアプリに移動」ボタンからWikiアプリ経由でアクセスできるようになっています。

 

従来からの変化点

良くなった点
  • 説明が豊富になりわかりやすくなった
  • Wikiを未使用だったタブでも簡単に"メモ"タブを追加できるようになった
  • Wikiが終了することがより強調されるようになった
悪くなった点
  • Wikiがタブとしては全く表示されなくなり、Wikiアプリを通じてしか読み書きできなくなった

こうしてまとめるとメリットの方が大きく見えますが、2024年1月までは今まで通り使えるだろうと移行を後回しにしていた場合は、この表示に切り替わってしまうとなかなかのインパクトです。

 

MSは2024年1月までWikiはサポート対象外ながら読み書きは可能と発表しています……
発表していますが…
従来通りタブとして読み書きし続けられるとは発表していない。

そのことをどうか諸君らも思い出して頂きたい。

つまり……MSがその気になれば、タブとしてのアクセスは終了しWikiの読み書きはWikiアプリのみとする事も可能だろう……ということ…!

なのかもしれません。(2023年6月からはサポート対象外ですから…)

 

Teamsモバイルアプリ側の変化

以前はチャネルにWikiタブが表示されていたと記憶していたのですが、Wikiタブがないことに気がつきました(2023年6月2日に確認)指定対象リリースのアカウントです。

※私の記憶違いで以前からなかったのかもしれませんが…間違っていましたらコメントなどでご指摘いただけると助かります。

チャネルのタブとしてのアクセスはできなくても安心してください。

Wikiアプリからアクセスできます!

 

最後に

2023年6月になってTeams デスクトップアプリ・モバイルアプリ双方での変化を発見したので確認してみました。今後また変化に気づいたら更新していきます。

いつになるか分かりませんが早々にWikiのタブ表示は終了されそうな雰囲気を感じますね。

 

 

 

 

 

 

 

 

 

 

 

Microsoft365関連の未使用ライセンス数が指定値を下回ったらTeamsチャネルに通知するPowershellスクリプト

Microsoft365関連のライセンス残が閾値を超えたらTeamsチャネルに通知するPowershellスクリプトです。数年前に MSOnlineモジュールを使って見様見真似で作成していたのですが、MSOnlineは廃止される予定となっていますので Microsoft Graph Powershell SDK を使ったスクリプトに書き換えてみました。

 

 

このスクリプトで実現できること

Microsoft365関連ライセンスの未使用数が指定した条件を下回ったら、Teamsのチャネルで通知する

 

準備するもの

Microsoft Graph PowerShellのインストール

管理者アカウントPowershellを起動し下記コマンドでインストール

Install-Module Microsoft.Graph

Teams側でIncoming WebHook の構成

このスクリプトは Incoming WebHook でTeams のチャネルに通知します。

下記手順でアプリをインストールしIncoming Webhook のURLを取得してください。

1.通知したいチームのチャネルで「…」→「コネクタ」

2.「Incoming Webhook」を追加

※チームにIncoming Webhookが追加済みの場合は「構成」ボタンに変わります。その場合は3へ

3.再度 通知したいチームのチャネルで「…」→「コネクタ」

4.「Incoming Webhook」の構成ボタンをクリック

5.名前を画像を設定して「作成」

ここで設定した名前と画像でメッセージが投稿されます。

5.「作成」ボタンをクリックすると、URLが表示されますので、これをどこかにコピーしておきます。

6.「完了」ボタンをクリックすると、チャネルに下記のように投稿されます。

 

スクリプト全体(v1) AzureADアプリ登録なし

Import-Module -Name Microsoft.Graph.Users

# m365接続。
Connect-MgGraph -Scopes "Organization.Read.All"

# 残りライセンス数が10未満を抽出
$warningUnits = Get-MgSubscribedSku | 
  Select-Object -Property Sku*, ConsumedUnits -ExpandProperty PrepaidUnits | 
  Select-Object *, @{Name = "RemainedUnits"; Expression = {$_.Enabled - $_.ConsumedUnits}} | 
  Where-Object {$_.RemainedUnits -lt 10} 

#通知メッセージを作成
$warningUnits | %{
  $licenseName = $_.SkuPartNumber
  # ライセンス名を置き換える
  $licenseName = $licenseName -replace "DEVELOPERPACK_E5","Microsoft 365 E5 Developer"
  $licenseName = $licenseName -replace "FLOW_FREE","Microsoft Power Automate Free"
  $licenseName = $licenseName -replace "Win10_VDA_E3","Windows10 Enterprise E3"
  $licenseName = $licenseName -replace "EXCHANGESTANDARD","Exchange Online (プラン1)"
  $licenseName = $licenseName -replace "POWER_BI_STANDARD","Power BI"
  $licenseName = $licenseName -replace "SPE_E3","Microsoft 365 E3"
  $licenseName = $licenseName -replace "EXCHANGEARCHIVE_ADDON","Exchange Online Archiving for Exchange Online"

  $remainingText += $licenseName + " が 残り" + $_.RemainedUnits + " ライセンスです。"
  $remainingText += "<br>"
}

# Teamsチャネルに通知
$WebHookURI = 'ここにIncoming Webhook の URLをコピペ';

$Payload = @{ 
    title = 'Microsoft365関連の残ライセンス数アラート';
  text = $remainingText;
}
$body = ConvertTo-Json $Payload
#UTF8に文字コードを変換する
$body = [System.Text.Encoding]::UTF8.GetBytes($body)
Invoke-RestMethod -Uri $WebHookURI -Method Post -Body $body


# m365切断
Disconnect-MgGraph

 # ライセンス名を置き換える の部分は、Powershellで取得できる名称のままでは分かりづらいため、わかりやすい名前に置換しています。

製品名との対応はこちらのページにありますので、必要なライセンスの分を追加変更してください。

learn.microsoft.com

実行イメージ

このスクリプトを実行すると、サインインのダイアログが表示されます。管理者アカウントでサインインする事で処理が実行されます。

上記にスクリプトではライセンスが残り10を切った場合に通知するようになっています。

  Where-Object {$_.RemainedUnits -lt 10} 

の数字を変更することで調整できます。

 

Disconnect-MgGraph を実行しないと認証情報はキャッシュされるが…

Connect-MgGraph でサインインすると認証情報はキャッシュされ、Disconnect-MgGraph を実行するまで保持する動作をするようです。この為、Windowsのスタートアップにこのスクリプトを追加すれば、毎日自動実行ができてしまいそうです。

キャッシュはC:\Users\<User>.graph\*cache.bin3 ファイルとして保持される

しかし、このキャッシュに有効期限があるのか不明な事や、Microsoft Graph Powershellを使う際にはキャッシュされた管理者権限でサインインしてしまうリスク、他の作業で別テナントに接続しなおすとこのスクリプトの動作が影響受けてしまう等の懸念もあります。

自動で定期実行させるのであれば、Disconnect-MgGraph はスクリプト内でちゃんと実行した上で、↓のスクリプト(V2)の手段とした方がよさそうです。

冒険はせずにサポートされてる手段を使う方がいろいろ安心です。

 


スクリプト(V2) - AzureADアプリ登録あり

以前のMSOnlineでは、パスワードをファイルに保持することで認証ステップを省略する事が出来ていましたが、Microsoft Graph Powershell では AzureADにアプリケーション登録必要があります。

AzureADにアプリ登録

1.Microsoft Entra 管理センター にアクセス(管理者アカウントでサインイン)

https://entra.microsoft.com/#view/Microsoft_AAD_IAM/

2.Azure Active Directory→アプリケーション→アプリの登録→新規登録

3.アプリの新規登録画面

  • 名前
    • 適切な名前を設定
  • サポートされているアカウントの種類
  • リダイレクトURI
    • 省略

「登録」ボタンをクリックします

 

4.概要に表示される [アプリケーション (クライアント) ID] と [ディレクトリ (テナント) ID] の値をコピーしておきます

 

5.[API のアクセス許可] – [+アクセス許可の追加] をクリック

 

6.[Microsoft Graph] – [アプリケーションの許可] をクリック

 

7.[Organization.Read.All]  を選択して [アクセス許可の追加] をクリック

 

8.[<テナント名> に管理者の同意を与えます] をクリック

確認が表示されるので [はい] をクリック

 

9.PowerShellを起動し下記のコマンドを実行して自己証明書を作成

$mycert = New-SelfSignedCertificate -Subject "CN=SelfSignedCert" -CertStoreLocation "Cert:\CurrentUser\My"  -KeyExportPolicy Exportable -KeySpec Signature

#エクスポート先のパスに合わせて ".\SelfSignedCert.cer"を変更
$mycert | Export-Certificate -FilePath ".\SelfSignedCert.cer"     
$mycert | Select Thumbprint

Thumbprint の値をコピーしておきます。

 

10. Entra管理センターに戻り、[証明書とシークレット]→[証明書をアップロード]をクリックし、9 で作成した証明書をアップロード

以上でアプリ登録は完了です。

 

コピーしておいた

  • [アプリケーション (クライアント) ID]
  • [ディレクトリ (テナント) ID] 
  • Thumbprintの値

は、スクリプトに反映します。

 

スクリプト(V1)からの差分

スクリプト(V1)との差分は、冒頭の Connect-MgGraph の部分のみです。

# m365に接続。
Connect-MgGraph -Clientid "[アプリケーション(クライアント)ID]" -TenantId "[ディレクトリID]" -CertificateThumbprint "[Thumbprintの値]"

 

実行イメージ

AzureADに登録したアプリケーションの権限で動作する為、このスクリプトではサインインは求められません。出力される内容はスクリプト(V1)と変化ありません。

 

さいごに

Microsoft Graph Powershell SDK を使ってみる練習台として、数年前に MSOnlineで作成したスクリプトを Micrsoft Graph Powershell SDK に置き換えてみましたが、構成は大きく変えずに対応できました。AzureAD に登録しないとサインインを求められてしまう仕様は少しハードルが上がりましたが、セキュリティという観点では必要な対応なのかもしれません。

ちなみに、このフローの後続処理としてPowerAutomateクラウドフローを組み合わせ、チャネルにメッセージ通知が来たらTeams承認フローを開始しm365管理者に通知、m365管理者が承認したら担当営業にライセンス追加の見積もり依頼メールを自動送信する、ところまで作っています。

 

※Get-MgSubscribedSku で取得できる情報の中にWarningという値がありました。もしかして標準機能でライセンス残を通知する機能があるのだろうか...

 

 

参考にしたページ

learn.microsoft.com

 

jpazureid.github.io

 

 

PowerAutomate クラウドフローで初めてOneNoteコネクタを使おうとしてハマったポイント #1

 

Teams チャネルのWikiが廃止されOneNoteの置き換わることで大きなメリットが一つ「PowerAutomateで扱うことができる!」ということに気づき、初めてOneNote(Business)コネクタを使ってみたのですがなかなか癖が強く苦戦中です。
今回はOneNoteノートブックのデータを取得する際にハマったポイントを備忘録的にまとめています。

※以降OneNoteコネクタとだけ記載していますがOneNote(Business)コネクタの話です。OneNote(Consumer)コネクタではありません。

 

 

はじめに - OneNoteノートブックの構造

ざっくりOneNoteノートブックは下図のような構造になっています。

OneNoteコネクタではノートブック・セクション・ページを取得するアクションが備わっています。(対応する取得アクションがないセクショングループ、サブページに関しては後述)

どのような動きをするか確認するために、最近使用したノートブックすべてのセクション・ページを取得するフローを作成し動作を検証してみました。

 

1.自分がアクセス可能なノートブックを列挙するアクションはない

Teamsコネクタであれば、「チームの一覧表示」アクションでアクセス可能なチームの情報がすべて取得できますが、OneNoteコネクタにはノートブックの情報を取得できるアクションは「最近使用したノートブックを取得する」アクションしかありません。

ですが、「ノートブックのセクションを取得」アクションのパラメーター"ノートブックキー"にはアクセス可能なノートブックが候補として表示されます。

また、Microsoft Graph API を使えばノートブックの一覧が取得できそうですが、今回は未確認です。

1-1.「ノートブックキー」の候補が1つも表示されないケースがある

私の環境でOneNoteコネクタの「ノートブックのセクションを取得」アクションでセクション情報を取得してみようかと試したところ、ノートブックキーの候補が1つも現れない事がありました。

OneNoteコネクタのリファレンスにある既知の問題と制限事項の1の状況です。

1.接続を使用しているときに、期待するノートブックのリストが表示されない場合は、接続を作成したアカウントを確認して、再試行してください。 コネクタの使用中にエラーが表示された場合は、エラー コードで詳細を確認できます。

とありますが、接続を作り直しても改善されませんでした。

learn.microsoft.com

 

色々試行錯誤した結論としては、OneDrive for Business にノートブックを作った事がないアカウントではSharePointサイト上のOneNoteノートブックも表示されない、という事でした。

OneNoteコネクタのリファレンスページの冒頭に記載がありました。さらっと書いてありますが重要ポイントです。

普段からOneNoteを活用しているアカウントではこのような事は無いかもしれませんが、検証アカウントを使おうとした場合にハマるポイントかもしれません。

ちなみに、1度OD4bにOneNoteブックを作成した後は、OD4bからOneNoteノートブックを削除しても問題なく候補が表示されるようになりました。

 

2.ノートブックを動的に扱うにはノートブックキーの理解が必要

特定のノートブックを処理するフローであればUIでノートブックを指定すればOKですが、ノートブックを動的に指定して情報を取得したい場合、OneNoteコネクタの場合は「ノートブックキー」なるものが必要になります。

 

詳しくはこちらのサイトにありますが、ノートブックキーはこういった値です。

"ノートブックの名前|$|ノートブックのURL"

 

natechamberlain.com

 

OneDrive for Business(以降OD4bと記載)にあるノートブックの場合は

"マイノートブック|$|https://■■■■■-my.sharepoint.com/personal/sasami_■■■■_■■■■■_onmicrosoft_com/Documents/ノートブック/マイノートブック"

SharePointサイトの既定のノートブックの場合は

"テストチーム Notebook|$|https://■■■■■.sharepoint.com/sites/testteame/SiteAssets/テストチーム Notebook"

チャネルに任意で追加したノートブックの場合は

"testノートブック|$|https://■■■■■.sharepoint.com/sites/testteame/Shared Documents/OneNoteテスト/testノートブック"

といった形になります。 

なお、ノートブック名の箇所はSharePoint/OD4b上の名前と一致させる必要があります。Teams チャネルのタブ名とは異なる場合がありますのでご注意ください。

 

3.セクションキーはURLであってidではない

OneNoteのセクションをパラメーターに指定するアクションで動的な値でセクションの情報を取得したい場合、「セクションキー」なるものが必要になります。

「ノートブックのセクションを取得」アクションの出力に含まれています。

「ノートブックのセクションを取得」アクションの出力にはidも含まれていますが、このidはセクションキーではありません。セクションキーにはpageUrlが対応します。

[
  {
    "id": "1-653e6450-f02a-450a-b936-6ee79ad340db",
    "self": "https://www.onenote.com/api/v1.0/myOrganization/siteCollections/(省略)/sites/(省略)/notes/sections/1-653e6450-f02a-450a-b936-6ee79ad340db",
    "createdTime": "2023-05-29T09:07:11Z",
    "name": "Sasami (ささみ)テスト",
    "createdBy": "Sasami (ささみ)",
    "lastModifiedBy": "Sasami (ささみ)",
    "lastModifiedTime": "2023-05-30T11:43:19Z",
    "isDefault": false,
    "links": {
      "oneNoteClientUrl": {
        "href": "onenote:https://■■■■■-my.sharepoint.com/personal/sasami_■■■■■_■■■■■_(省略).one"
      },
      "oneNoteWebUrl": {
        "href": "https://■■■■■-my.sharepoint.com/personal/sasami_■■■■■_■■■■■_(省略).one%7C%2F%29"
      }
    },
    "pagesUrl": "https://www.onenote.com/api/v1.0/myOrganization/siteCollections(省略)sites/(省略)/notes/sections/1-653e6450-f02a-450a-b936-6ee79ad340db/pages",
    "size": 54015,
    "parentNotebook@odata.context": "https://www.onenote.com/api/v1.0/$metadata#myOrganization/siteCollections(省略)/$entity",
    "parentNotebook": {
      "id": "1-681ace07-38a8-4512-b829-8aacfc578d02",
      "name": "マイノートブック",
      "self": "https://www.onenote.com/api/v1.0/myOrganization/siteCollections/(省略)"
    },
    "parentSectionGroup@odata.context": "https://www.onenote.com/api/v1.0/$metadata#myOrganization/siteCollections(省略)/$entity"
  }  
]

 

4.ページIDは「応答の一意識別子」

ノーツブックキー・セクションキーときましたが、ページを識別するキーはページIDです。「特定セクションのページを取得」アクションの出力に含まれていますので、ノートブック→セクション→ページと段階を踏んでアクセスしていけば問題ない…と思いきや、日本語訳が微妙でわかりづらくなっています。

同アクションの出力の「セクション内ページの値オブジェクト 応答の一意識別子」がページIDに対応しています。

 

5.ページコンテンツはHTML

「ページコンテンツの取得」アクションでページコンテンツが取得できます。

ページコンテンツはHTMLで構成されています。

※ページのメタデータは「特定セクションのページを取得」アクションで取得できます。

<html lang="en-US">
    <head>
       <title>ページ3</title>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       <meta name="created" content="2023-05-29T18:15:00.0000000" />
   </head>
    <body data-absolute-enabled="true" style="font-family:Calibri;font-size:11pt">
        <div style="position:absolute;left:48px;top:115px;width:624px">
            <p lang="ja-JP" style="font-family:MS ゴシック;margin-top:0pt;margin-bottom:0pt">あいうえお</p>
            <p lang="ja-JP" style="font-family:MS ゴシック;margin-top:0pt;margin-bottom:0pt">書きくけこ</p>
            <br />
        </div>
    </body>
</html>

テキスト以外のオブジェクトがどのように格納されているかも調べてみました。

 

●画像 → img

 

●ファイル添付→object  / ファイルリンク→リンク

 

●オーディオ→object

 

6.「ノートブックのセクションを取得」アクションでセクショングループないのセクションまで取得できる

「ノートブックのセクションを取得」アクションでこのようなノートブックを取得した場合は、セクショングループ内のセクションを含む形で取得可能です。

セクショングループ内のセクションには"parentSectionGroup"としてセクショングループが含まれます。



7.「特定セクションのページを取得」アクションでサブページも取得できる

「特定セクションのページを取得」アクションでこのようなサブページを含むセクションのページを取得すれば、サブページも含む形で取得されます。ただしサブページのレベル(階層)に関する情報は含まれていないようです。

 

参考資料

learn.microsoft.com

 

learn.microsoft.com

 

最後に

今回はOneNoteコネクタの調査ということで、OneNoteコネクタの読み込み系アクションで気になったりハマったポイントをまとめてみました。

OneNoteに書き込む際のポイントはまた別記事で作成するかもしれません。

 

 

 

Teams Wiki後継のOneNoteノートブックにWiki未使用の既存チャネル名のセクションを一括作成する PowerAutomate クラウドフロー

はじめに

2023年6月からTeams チャネルのWikiタブはサポート対象外になりました。

マイクロソフトからWiki から OneNoteへのエクスポートツールが提供されていますが、今回はそのエクスポートツールの隙間を埋めるフローです。

 

2023/6/4追記

Wikiタブの表示が変更され、このフローを使わなくてもメモタブが追加できるようになるようです。こちらをご覧ください。

Teams チャネルのWikiをOneNoteへエクスポートするツールが使えるようになったので動作チェックしてみた(2/2) - sasami's study book (仮)

 

 

チャネルに既定で追加されるようになった"メモ"(Notes)タブの実体はどこに?

Wikiからエクスポートした場合や、今後チャネルを追加した際に既定で表示されるOneNoteの"メモ"タブの実体は、チームに紐づいたSharePointチームサイトの既定のOnenoteノートブックに保存されます。

 

ノートブックを開いてみると、チャネル名と同名のセクションが作られ、ページが分類されています。

 

wikiが使われていない既存チャネルにはメモタブは自動で作られない

今後新しくチャネルを追加する場合はこの既定のノートブックにセクションが自動的に作成されていくのですが、既存の標準チャネルであっても使われていないWikiにはエクスポートを開始する「詳細を取得」ボタンが表示されないようです。その為、OneNoteの"メモ"タブが追加されることはありません。

このようなメッセージが表示されるだけなので、手作業でOneNoteタブを追加するしかありません。

このメッセージにメモを新規作成するボタンがあれば...

 

(過去Wikiを使っていなかった)チャネルでOneNoteの"メモ"タブを使い始めるには...ちょっと面倒

過去WIkiを使っていなかったチャネルでもOneNoteタブを使い始める場合は、手作業でOneNoteタブを追加することができます。

チャネルに紐づいた情報は既定のノートブックに集約したいと考えたのですが、多数の既存チャネルがある場合にチャネル名のセクションを追加していくのはなかなかの手間です。

そこで、既定のノートブックにチャネル名のセクションを一括作成するフローを作成しました。

フロー全体図


フロー実行イメージ

フロー実行前に、各チャネルのWikiをチェックし、「詳細を取得」ボタンが表示されている場合はエクスポートを実行しておきます。

その後でフローを実行すると、Wikiが存在するが未使用だったチャネル名と同名のセクションを既定のOneNoteノートブックに作成されています。

あとはTeamsでチャネルにOneNoteタブを作成するだけ(タブ名も変えなきゃ)です。

最後に

折角なので既定のノートブックを使い倒す方向で初めてみましたが、実際使い込んでみないとWikiの代わりになるかなんとも言えない部分もあります。1番の問題は、既定のノートブックを利用すると、セクションがチャネルで使用されてしまう為、チャネル内でデータを分類することができなくなる事だと考えています。

この辺りは使い込んでみて、必要になったら新規にノートブックを作成する形に移行しようかな。

 

 

 

Teams のカスタムストリーミング(プレビュー)とアバターでYoutube ライブ配信を試してみた

2023/5/27更新-アバターに関する説明がすっかり抜けていたので追記しました。

 

はじめに

Teams のカスタムストリーミング(プレビュー)とアバターを組み合わせると面白いことができそうだったので、Youtubeライブ配信のテストを行ってみました。

カスタムストリーミング(プレビュー)とは?

Real-Time Messaging Protocol  (RTMP) を使用して、テナント外に会議をストリーミング配信できる機能です。YouTube, Twitch,  LinkedInなどRTMPに対応したサービス・製品を使って簡単にライブ配信ができます。

Teams会議の参加者は上限1000人までという制限がありますが、この機能を使ってライブ配信することで"見るだけ"参加を増やすことができます。

カスタムストリーミングが使えるのは?
  • 会議
  • ウェビナー

で利用可能です。ライブイベントでは使用できない点に注意が必要です。(2023年5月現在)

 

アバターとは

Teamsの会議にカメラ映像の代わりに3Dキャラクターを表示することができる機能で。任天堂Miixboxアバターだったり、ゲーム中で操作するキャラクターを作るように会議に参加する自分の容姿を3Dアバターで作ることができます。

アバターが使えるのは?

アバターを利用するにはいくつかの条件があります。

●年齢制限

18歳以上という年齢制限(子供の容姿のアバターは作れないから?)

 

WindowsまたはMac

2023年5月現在、この機能を使って会議に参加できるはWindowsまたはMacのTeamsアプリのみとなっています。Webブラウザー版およびモバイルアプリのTeamsでは、他の会議参加者のアバターを表示する事はできますが、自身でアバタターを使う事はまだできません。Webブラウザー版Teamsではアバターを作成する事は可能でした。

※M2 Mac 上のParallels Desktop 上のWIndows11 ARM版では、アバタービルダーでアバターを作成する事はできますが、会議では利用できませんでした。今後できるようになっていくのかも知れません。

 

●ハードウェア要件

アバター独自にハードウェアの要件が公開されています。

  • 最小
    • CPU:2コア
    • メモリ:4GB
  • 推奨
    • CPU:4コア以上
    • メモリ:8GB以上

これらの要件とは別に、最低限のグラフィック性能を持ったGPUが必要になります。

VDI環境でもアバターは利用可能ですがVDIにはGPUハードウェアがないので代わりにCPUで処理することになり、CPUは使用率が常時100%に張り付いた状態となり実用的ではありませんでした。

 

●ライセンス

アバターは利用する為には下記いすれかのライセンスが必要になったようです。ハードル高くなってしまった事は残念です。

- Microsoft 365 Enterprise E3
- Microsoft 365 Enterprise E5
- Microsoft 365 Business Standard
- Microsoft 365 Business Premium
- Teams Premium

 

learn.microsoft.com

 

1.事前準備

利用する前にいろいろ準備が必要です。

1-1.アバタービルダーをインストールしてアバターを作る

Teamsのアプリバー下の田(アプリ)からアバターを検索して追加します。

追加したアバターアプリをクリックすると、アバタービルダーが開きます。

思い通りのアバターを作成しましょう。

1-2.Teams 会議ポリシーのライブストリーミングを有効にする

カスタムストリーミングはTeams会議アプリです。

アプリを利用する前に、Teamsの会議ポリシーでライブストリーミングを有効化する必要があります。(既定でオフになっています)

ライブストリーミングの設定はTeams管理センターには用意されておらず、Powershellで行う必要があります。

1-2-1.Microsoft Teams Powershell のインストール
Install-Module -Name MicrosoftTeams -Force -AllowClobber

Microsoft Teams Powershellの詳細なインストール手順はこちらをご覧ください。

learn.microsoft.com

 

1-2-2.Teams管理センターに接続
Connect-MicrosoftTeams
1-2-3.会議ポリシーの設定値を確認
Get-CsTeamsMeetingpolicy | Select-Object Identity, LiveStreamingMode
1-2-4.対象の会議ポリシーを選択して変更
Set-CsTeamsMeetingPolicy -Identity Global -LiveStreamingMode Enabled

こちらはテナント全体に有効化する場合の例です。

1-1-5.Teams管理センターから切断する
Disconnect-MicrosoftTeams

設定が反映されるまで時間がかかりますので、余裕を持って設定していた方が良いです。

 

1-3.Youtube Studioでライブ配信を有効化する

初めてYoutubeライブ配信を行う場合、ライブ配信の有効化に最大24時間かかります。こちらも余裕を持って設定していた方が良いです。

 

Youtube Studio にアクセスし、右上の作成→ライブ配信を開始

 

support.google.com

 

2.ストリーミングを開始する

2-1.Youtube Studioでライブ配信を開始する

2-1-1.ライブ配信を開始する

Youtube Studio にアクセスし、右上の作成→ライブ配信を開始

 

2-1-2.ライブ配信の設定を行う

エンコーダ配信を選択し、[設定]からタイトルなどを設定しておきます。今回はテストのみなので限定公開としています。

Teams側の設定で使用するので、ストリームキーストリームURLをどこかにコピーしておきます。

 

2-2.会議またはウェビナーを開始する

Teamsで会議またはウェビナーを開始します。会議は今すぐ会議・時間指定した会議どちらでもOKです。

2-2-.1アバターを表示する

会議開始時または会議中に表示させることができます。

●会議開始時に有効化

 

 

●会議中にOn/Off

「…」→エフェクトとアバター

このパネルでアバターの反応(リアクション)を操作することもできます

 

2-3.[+アプリの追加]→[カスタム ストリーミング]

2-4.[保存]


2-5.カスタムストリーミングの設定を行う

2-2-1でコピーしておいたストリームURLとストリームキーを貼り付けて[ストリーミングを開始]ボタンをクリック

 

 

以上で配信開始までの設定は完了です。

 

3.ストリーミングでいろいろ試してみた

Teamsで共有されている画面がそのまま表示されているというわけではなく、表示される内容に若干の差異があることが確認できました。(2023年5月時点)

  • ギャラリーモード(的なもの)が基本表示
    • 参加者の名前・リアクション(のアニメーション)は表示されない
    • 参加者の表示順は会議画面とは一致しない
    • ※テスト環境の都合で参加者多数で話した人が表示されるかなどは確認できず
  • Togetherモード、話者モードなどは反映されず常にギャラリーモード
  • 画面共有は表示される
  • カメラ映像は表示される
  • アバターは表示される
  • ライブキャプションは反映されない
  • Youtubeへのアクセスが禁止されているネットワークからでも配信できる
    • 配信PC→Azure上のTeams基盤→(RTMP)→Youtube  となっている(と思う)
    • その場合Youtube側のライブ配信の設定は別ネットワークで行う

ギャラリモードっぽい表示

 

Togetherモードには対応しない

 

画面共有は表示される

 

アバタージェスチャーは表示される

 

さいごに

音声周りの検証はまだまだ必要ですが、ライブ配信に関して全く知識がない私でもカスタムストリーミングを使うとさっとライブ配信を行うことができました。普段Teamsのライブイベントを使う機会が少なく慣れていない方でも、使い慣れた会議で大人数に配信できるというのはメリットになるかもしれません。

また、カスタムストリーミングは、会社のネットワークでYoutubeがブロックされている環境でも問題なくライブ配信できました。MSのクラウドからYoutubeRTMPでストリーミングされているのもの(だと思う)のでそういった心配も無用です。※YouTube側のライブ配信設定は必要なので他回線でYoutubeにアクセスできる必要はあります。

プライベートのお手軽ライブ配信ツールとして仕事で使い慣れたTeamが使えるのは良いかもしれません...と言いたいところですが、個人向けのTeams(無料版)は会議アプリが使えないのでカスタムストリーミングが使用できません。ビジネス向けのMicrosoft365をお持ちのご家庭であれば存分に活用できるかと思います。アバター機能を使って簡易的なvtuberっぽい配信もできるかもしれません。(PC1台では画面共有とアバタージェスチャーパネルが両立できないので工夫が必要そう)

※カスタムストリーミングはまだプレビュー扱いの為、予告なくアプリが非公開になったり・仕様が変わる・何らかの問題が起きる可能性もあります。業務で利用する場合はその点もご注意ください。

 

 

参考資料

support.microsoft.com

 

learn.microsoft.com

 

learn.microsoft.com

 

support.microsoft.com

 

learn.microsoft.com

 

Microsoft365のユーザーアカウントの表示名に敬称を一括で付加するPowershellスクリプト

メンションに敬称を付加するかべきか否か問題の1つの回答?

Microsoft365を日本で利用しているかアカウントに一括で表示名の末尾に敬称を付加するPowershellスクリプトです。 幸い日本にはジェンダーフリーな敬称"さん”がありますので、一括で付与しても問題ありません。(…ないですよね?)
アカウントの表示名に'さん'がついていれば、メンションする際にわざわざ'さん'を付加する手間から解放されます。
同じ手順で敬称ではなく役職を付与する事も可能です。

冗談半分でアイデアを出したらうっかり真面目に検証することになったのですが、検討のみで正式採用には至りませんでした。 Powershellで3つのモジュールそれぞれの検証結果の備忘録です。
※いずれも適切な権限を持ったユーザーアカウントで実施する必要があります。

Powershell MSOnlineモジュールで行う

※このモジュールはArm版Windows 11ではインストールは可能ですが動作しません。  

Powershell MSOnline モジュールのインストール

初回はインストールが必要です。

Install-Module -Name MSOnline

実際の処理

#m365に接続
Connect-MsolService
#利用場所(UsageLocation)が日本のユーザーアカウントの表示名に" さん"を付加する
Get-MsolUser -UsageLocation 'JP' |
 Where-Object -FilterScript {$_.DisplayName.EndsWith(' さん') -eq $false} |
 foreach {Set-MsolUser -UserPrincipalName $_.UserPrincipalName -DisplayName ($_.DisplayName + ' さん') }

コマンドを実行すると、利用場所(UsageLocation)が日本のユーザーアカウントに対し、表示名の末尾に' さん'を付与します。
メンションに敬称問題は日本以外の国であるのか不明である為、利用場所でフィルタリングしています。
共有メールボックスやリソースユーザーにはデフォルトではUsageLocationは付与されない為影響ありませんが、条件を変更する場合は注意が必要です。(ゲストユーザーはUsageLocationが付与されるようです)
検証環境ではこの条件で問題ありませんでしたが、条件には十分な検証が必要そうです。  

二重に付与しないように末尾が' さん'のユーザーアカウントは除外していますので、何度実行しても問題ありません。 このスクリプトだけではユーザーアカウントの利用場所(UsageLocation)を変更すること場合は想定していませんので、別途対応が必要になります。

変更が反映されるまで時間がかかる場合があります。

Powershell AzureAD モジュールで行う

※このモジュールはArm版Windows 11ではインストールは可能ですが動作しません。  

Powershell AzureAD モジュールのインストール

初回はインストールが必要です。

Install-Module -Name AzureAD

実際の処理

グローバル管理者などのアカウントでサインインします。

#AzureADに接続
Connect-AzureAD
#利用場所(UsageLocation)が日本のユーザーアカウントの表示名に" さん"を付加する
Get-AzureADUser -Filter "UsageLocation eq 'JP'" |
 Where-Object -FilterScript {$_.DisplayName.EndsWith(' さん') -eq $false} |
 ForEach-Object { Set-AzureADUser -ObjectId  $($_.ObjectId) -DisplayName  ($($_.DisplayName) + ' さん')} 

処理内容はMSOnlineモジュールを使った場合と同じです。

PowerShell Microsoft Graph モジュールで行う

※このモジュールはArm版Windows 11で問題なく利用可能です。

Powershell AzureAD モジュールのインストール

Install-Module -Name Microsoft.Graph

実際の処理

Scopesには実行するコマンドに必要なアクセス権限を指定する必要があります。
今回はユーザーの読み書きを行いますので"User.ReadWrite.All"を指定します。

Connect-MgGraph -Scopes "User.ReadWrite.All"
#利用場所(UsageLocation)が日本のユーザーアカウントの表示名に" さん"を付加する
 Get-MGUser -Filter "UsageLocation eq 'JP'" |
 Where-Object -FilterScript {$_.DisplayName.EndsWith(' さん') -eq $false} |
 ForEach-Object { Update-MgUser -UserId  $($_.Id) -DisplayName  ($($_.DisplayName) + ' さん')} 

処理内容はMSOnlineモジュールを使った場合と同じです。

#セッションを切断する
Disconnect-MgGraph

実行後

反映されるまで数日かかる場合もあります。
反映された後はメンション指定する際に気にする必要はなくなりました!

ただし表示名を変更していますので、Teamsのメンションだけでなく他にも影響は及びます。

Teams会議に参加すると外部参加者にも敬称付きで見えます  

これについては回避方法は見つけられませんでした。  

Exchange Online 外部宛のメール送信時の送信者にも敬称はつきます(回避方法あり)

既定値では外部にもFromのメールアドレスが"表示名 <username@domainname>"で送信されます。
この為、今回の'さん'をつける変更を行うと外部にもさん付けの送信者でメールが送られてしまいます。

これについては、2つの回避方法があります。
ExchangeOnlineには、英数字しか設定できないSimpleDisplayName属性があります。 ここに適切な英字名を設定することで、外部へのメール送信時のFromに使用する設定があります。
または、外部へのメール送信時にFromをメールアドレスのみとする対応も可能です。

Exchange Online Powershell モジュールのインストール

初回は管理者権限を持ったアカウントでインストールが必要です。

Import-Module ExchangeOnlineManagement

実際の処理

・外部へのメール送信時のFromにSimpleDisplayNameを使う

#ユーザーごとに設定が必要
Set-User sasami@xxxxxxx.onmicrosoft.com -SimpleDisplayName sasami

Set-RemoteDomain -Identity "Default" -DisplaySenderName $true  -UseSimpleDisplayName $true

・外部へのメール送信時のFromに送信者名を表示しない

Set-RemoteDomain -Identity "Default" -DisplaySenderName $false

※ 実行例 では既定のリモート ドメインである Defaultの設定を変更しています。

さいごに

Powershell でMS365に接続する手順の覚書として'さん'付け問題を例にしてみましたが、あくまで架空の例です。
個人的にはメンションする際に敬称は不要派です。ルールやマナーで決めるのではなく、各自で判断すればよい事かと考えます。

Teams 新しいチャネルエクスペリエンスの動きを確認してみた。 (パブリックプレビュー) 新しいTeamsとは別にリリースされる!

新しいチャネルエクスペリエンスとは?

新しいチャネルエクスペリエンス(以降チャネル2.0と記載)は、新しいTeams(以降Teams2.0と記載)の新機能の一つとして紹介されていた機能です。

チャネル2.0の主な特徴(今までとの変化)は下記の3つです。

  • 新しいメッセージがページの上に(今までと逆)
  • 新規メッセージ作成ボックスがページの上に(今までと逆)
  • 情報ペインが既定で表示されるように(今まではoffが既定値)

表示順が変わるというユーザーインパクトが大きいものになっています。Vivaエンゲージ(Yammer)に慣れている方であれば違和感は少ないかもしれません。

個人的には情報ペインが既定でオンになったことがポイント高いです。従来のチャネルでは情報ペインを表示しないとピン留めされている事がわからないという問題がありましたがこれが少し緩和される効果が期待できます。

 

チャネル2.0のいまいちな点

個人的にいまいちだと感じている点が3つあります。

  • アダプティブカードが省略表示されてしまう
  • 作成ボックスと返信でEnterキーの挙動が違う
  • アナウンスのタイトルが大きくなった
アダプティブカードが省略表示されてしまう

従来のチャネルではアダプティブカードは省略されずに表示されていましたが、チャネル2.0では省略表示されてしまいます。

作成ボックスと返信でEnterキーの挙動が違う

従来のチャネルでは、作成ボックス・返信ボックスともに、EnterまたはCtrl+Enterで送信・Shift+Enterで改行(書式オンでEnter またはShuft+Enterで改行、Ctrl+Enterで送信)という挙動でした。

しかし、チャネル2.0では新規ボックス・返信ボックスでそれぞれ別の挙動になっています。

  • 新規ボックス
    • 改行:Enter、Shift+Enter
    • 送信:Ctrl+Enter
  • 返信ボックス
    • 改行:Shift+Enter
    • 送信:Enter、Ctrl+Enter
    • (書式オンの時)
      • 改行:Enter、Shift+Enter
      • 送信:Ctrl+Enter

作成ボックスは従来の書式オンの状態で固定になっています。

チャットは変更ありません(チャネルの返信と同じ)ので、とても混乱します。どちらかの挙動に統一されてほしいですね。

アナウンスの見出しが大きくなった

左が従来のチャネル、右がチャネル2.0です。

メッセージ単体でみると見出しがより強調され目立つようになった、とも言えますがこの形式が多数並んだ時スクロールの手間が増えてしまいます。

また、見出しがセンタリングされたので左右の視線移動が必要になり、以前より見づらいと感じます(これは慣れかも)

 

チャネル2.0はTeams2.0固有の機能ではなかった

情報公開当初からチャネル2.0はTeams2.0とセットで公開されてきました。2023年5月にメッセージセンターに MC550081 でチャネル2.0のリリース時期が公開された際のスクリーンショットもTeams2.0のものでしたので、チャネル2.0はTeams2.0と同時に公開されるのだろう…私はすっかりそう思い込んでいました。

 

パブリックプレビューで現行Teams(1.x)にチャネル2.0が展開された

ところが、Teamsパブリックプレビューで既存のTeams(1.x)にも同機能が展開されていることが確認できました。2023年5月22日現在私の環境では

の3つでチャネル2.0を確認できています。

メッセージセンター  MC550081 には記載がなかったWebブラウザーも対象になっています!

※2023年5月22日現在VDI (VMware Horizon - Teamsメディア最適化オン)の環境では確認できていません。

(スクリーンショット並べてみましたがほぼ同じです。)

 

新しいTeamsの一部ではないから以前のバージョンに戻せない

新しいTeamsの一部であればトグルボタンで以前のバージョンに戻すこともできていましたが、現行Teams(1.x)アプリにも展開されると元に戻すことは難しそうです。

新しいTeamsの一部であれば今のところこのトグルボタンで戻せる
チャンネル2.0トグルボタン

私の環境で一度だけこのような「チャネル2.0」トグルボタンが表示されたことがありました。オンにしてもTeamsが再起動したものの何も変化なく、二度とこのトグルは現れませんでした。

これが従来のチャネルに切り替えるトグルボタンだったら、ポリシーで既定値を変更できるものだったら…管理者的にはそう願わざるを得ません。(2023年5月22日時点このトグルボタンに関する情報は見つかりませんでした)

チャネル2.0 トグルボタン

 

チャネル2.0 は2023年6月上旬から展開予定

チャネル2.0は2023年6月上旬から展開予定です。管理者の皆さん震えてこの時に備えましょう...