くらっちのクラウド日記

仕事や勉強で得た Microsoft 365 関連の技術知識を投稿していくブログです。

【SharePoint】SharePointOnlineでスクリプトエディタが使えるクラシックサイトを作成する

はじめに

こんにちは、くらっちです。
SharePoint Onlineは現在モダンサイトが標準ですが、いまだクラシックサイトを使っている企業様も多くいらっしゃいます。
HTML、JavascriptCSSを使ってSharePointサイトのページを作成する機会もあるでしょう。

Webパーツページでスクリプトエディターを使ってJavascriptを活用した構築したいですよね。
ただ、チームサイトやコミュニケーションサイトのWebパーツページにはスクリプトエディターは含まれていません。
そこで今回は「SharePointOnlineでスクリプトエディターが使えるクラシックサイトを作成する方法」を紹介します。

目次

クラシックサイトを作成する

その他のサイトを参照する > その他のテンプレート

スクリプトエディタを使うには「その他のサイトを参照する > その他のテンプレート」を選択します。
以下、操作手順です。

SharePoint管理センター に接続
・ 「+作成」をクリック
・ 「その他のサイトを参照する」をクリック
・ 「その他のテンプレート」を選択

・ 「サイトを再度読み込みますか?」というメッセージが出たら「キャンセル」をクリック
  ※ここはどちらのボタンを選んでも以降の操作はできます。

チームサイト(クラシック表示)を選択

・ 別タブで「サイト コレクションの作成」が出てくるのでそちらを操作します。
・ 各項目を入力。テンプレートの選択は「チームサイト(クラシック表示)」を必ず選択。
・ 管理者には、管理者にしたいアカウントを入力して右側のアイコンをクリック。
  エラーメッセージが表示されずアカウントが認識されているようであればOK。
・ 「OK」ボタンをクリック。
・ 数分後、クラシックサイトが作成されるのでSharePoint管理センターで確認。
  これでスクリプトエディタが使えるクラシックサイトが完成です。

ちょっと分かりずらいところにあるので頭の片隅にでも置いておくといいかなーと思います。
備忘としてお気に入り登録などしてもらえると嬉しいです!

【PowerShell】CSVファイルを読み込んでユーザー作成&ライセンス付与する

はじめに

こんにちは、くらっちです。
今回はPowerShell で「ユーザーを新規作成&ライセンスも付与」してみよう!
ということでサンプルコードを作りました。
初心者向けの備忘録的な記事となります。

やろうとしていること

ユーザー情報が記載されたcsvファイルを読み込んでユーザーを一括登録します。
csvファイルには「UserPrincipalName、FirstName、LastName」のみ記載。
パスワードは「p@ss + MMdd」で固定、初期ログイン時に変更必須。
付与するライセンスは「Microsoft Business Basic」で固定。

サンプルコード

下記サンプルコードは、基本そのまま利用できます。
適宜<>の中身は修正してください。
読み込むcsvファイルは「UTF-8」形式にしてください。

#Set-MgUserLicense に必要なアクセス許可
Connect-Graph -Scopes User.ReadWrite.All, Organization.Read.All
#Get-MgUser に必要なアクセス許可
Connect-MgGraph -Scopes User.Read.All

$times = Get-Date -Format "yyyyMMddHHmmdd"
$todays = Get-Date -Format "MMdd"
$csvpath = "<import_filepath>\users.csv"

#csvファイルを読み込んで繰り返し処理
Import-Csv -Path $csvpath | ForEach-Object { 
    #ユーザーを新規作成
    New-MgUser -UserPrincipalName $_.UserPrincipalName -mailNickname "sample" -AccountEnabled -DisplayName "$($_.FirstName) $($_.LastName)" -GivenName $_.LastName -Surname $_.FirstName -UsageLocation "JP" -PasswordProfile @{ "Password"="p@ss$todays"; "forceChangePasswordNextSignIn" = $true
} 

    #新規作成したユーザー情報を取得
    $user = Get-MgUser -All -Filter "UserPrincipalName eq '$($_.UserPrincipalName)'"
    $userid = $user.ID

    #「O365_BUSINESS_ESSENTIALS」の ライセンス情報を取得
    $EmsSku = Get-MgSubscribedSku -All | Where-Object SkuPartNumber -eq 'O365_BUSINESS_ESSENTIALS'
    #ライセンス付与
    Set-MgUserLicense -UserId $userid -AddLicenses @{SkuId = $EmsSku.SkuId} -RemoveLicenses @()
}

このエラーが出た場合どうする?

New-MgUser : 引数 'True' を受け入れる位置指定パラメーターが見つかりません。
$true の記載が不要な場所に $true が入力されている可能性があります。

New-MgUser : Another object with the same value for property userPrincipalName already exists.
登録しようとしたユーザーは既に組織に存在しているようです。
※userPrincipalName の重複あり。

Set-MgUserLicense : Subscription with SKU … does not have any available licenses.
付与しようとしたライセンスに余りがない可能性があります。
ライセンスを追加購入して処理を実行しましょう。

参考

New-MgUser (Microsoft.Graph.Users) | Microsoft Learn
Get-MgUser (Microsoft.Graph.Users) | Microsoft Learn
Get-MgSubscribedSku (Microsoft.Graph.Identity.DirectoryManagement) | Microsoft Learn
Set-MgUserLicense (Microsoft.Graph.Users.Actions) | Microsoft Learn


【ChatGPT】トークン数、日本語と英語で比較したら全然違う!

はじめに

こんにちは、くらっちです。
ChatGPT を使っていると必ず聞くトークンという重要キーワード。
プロンプト英語入力の時と日本語入力の時でトークン数に結構な差があるようです。
今回、日本の童話「桃太郎」を題材にどれくらいトークン数が違うのか「 OpenAI Platform 」を使って調べてみました。

OpenAI Platform :入力文字をトークン化して、トークンごとに視覚化してくれるツールです。

目次

トークンとは

ChatGPTにおける「トークン」とは、モデルにテキストデータを入力する最小単位を指し、文字や​単語がトークンとして扱われます。
​ChatGPTは​トークンを受け取ることで自然な文章を生成します。

日本語の場合

まずは、日本の童話「桃太郎」の冒頭部分を使ってトークン数を見てみました。

むかし、むかし、ある所におじいさんとおばあさんが住んでいました。
おじいさんは山へしば刈りに、おばあさんは川へ洗濯に行きました。
おばあさんが川で洗濯をしていると大きな桃が流れてきました。
「なんと大きな桃じゃろう!家に持って帰ろう。」
とおばあさんは背中に担いで家に帰り、その桃を切ろうとすると、なんと桃から大きな赤ん坊が出てきたのです。
「おっとたまげた。」
二人は驚いたけれども、とても喜び、
「何という名前にしましょうか。」
「桃から生まれたから、桃太郎というのはどうだろう。」


トークン化すると以下のような結果となります。
入力文と比較すると、ひらがな1文字=トークン数1~2個。
漢字1文字=トークン数2~3個になっています。

英語の場合

今度は英訳した文章でトークン数を見てみました。

Once upon a time, there lived an old man and an old woman.
The grandfather went to the mountain to cut grass, and the grandmother went to the river to wash clothes.
When the old woman was washing clothes in the river, a large peach came flowing down the river.
"What a big peach! Let's take it home."
When she and her grandmother carried her home on her back and were about to cut the peach, she saw a big baby come out of it.
“Oops, I got it.”
They were both surprised, but very happy.
“What should we name it?”
“Since he was born from a peach, why not call him Momotaro?”


トークン化すると以下のような結果となります。
英語の場合は1単語1トークンです。
ただし、Momotaroのような固有名詞はトークンが2つ以上になることもあるようです。

比較まとめ

上記の結果を比較してみましょう。
同じ内容の文章にもかかわらず、日本語のトークン数は英語の2.3倍。
一方、文字数は日本語は英語の0.6倍です。

日本語 英語 
トークン数 329 146
文字数 243 573


日本語は文字単位トークンがカウントされています。
 ひらがな1文字1~2トークン、漢字1文字2~3トークであり、単純に文字数=トークン数ではありません。
英語は単語単位トークンがカウントされています。
 1単語1トークンで、固有名詞は複数のトークンに分かれる場合があります。

日本語と英語でトークン数に差が発生するのは、トークンとなる対象が違うのが原因です。
ChatGPTとの会話が長文になるほど、この違いは致命的です。

トークン数には気を付けよう

既に感じているかもですが、ChatGPTを扱う上でトークン数には注意が必要です。
理由は大きく3つあります。
 その1:トークン数が多いほど利用料金が大きくなる。
 その2:モデルごとに最大トークン数が決まっている。
 その3:トークン数は入力と出力の合計から成る。

1:トークン数が多いほど利用料金が大きくなる。

ChatGPTのAPI 利用料金は、トークン数やモデルの性能によって異なりますが、トークン数が大きくなるほど利用金額も大きくなります。
言うまでもなく短いトークン数(=短いやり取り)の方がお得なのです。
ちなみに、利用料金は1000トークンあたりで計算されます。

OpenAI と Azure OpenAI Service の料金表
OpenAI
Azure OpenAI Service

2:モデルごとに最大トークン数が決まっている。

モデルごとに、会話の中で使える最大トークン数(トークンの上限)が決まっています。
ちなみに一連の会話で最大トークン数を超えてもChatGPTとの会話は続けられます。
しかし、最大トークン数を超えると過去の会話が削除されて最大トークン数以下の情報で会話を実現します。
会話の情報が削られるため、モデルは文脈全体を理解できなくなります。

結果として、過去の会話が削除されることで回答に一貫性がなかったり、回答の正確性も下がる可能性があります。

Azure OpenAI Service のトークン数の上限について

3:トークン数は入力と出力の合計から成る。

トークン数は、過去の会話を含めた入力と出力の合計で計算されます。
例えば以下のような会話では、ユーザーが入力した2つの文章と、システムが出力した2つの文章が全て合計され、その結果が使用したトークン数となるわけです。

日本語だとあっという間に最大トークン数に達するし、利用料金もあっという間に高額になりそうですね。

また、モデルは会話の度に会話内容を先頭から処理して、回答も1文字ずつ出力します。
そのため、回答の全文を出力するまでの応答待機時間もトークン数に比例して大きくなります。

<ユーザー>
Please tell me the name of the first American president.

<システム>
The first president of the United States was George Washington. He served as President of the United States from 1789 to 1797.

<ユーザー>
It has the same name as the capital of the United States.

<システム>
Yes, it is. Washington, D.C., the capital of the United States, is named after George Washington. 

【PowerApps】編集画面の選択肢もSharePointリストを使おう!

はじめに

こんにちは、くらっちです。
先日「新規作成画面の選択肢には別のリストを使おう!」という内容の記事を書いたので、今回はその続きで「編集画面の選択肢には別のリストを使おう!」という記事を書きました。
同じ選択肢を複数回使う場合などに有効だと思います。

kurattyodiary.hatenablog.com

目次

選択肢用のリストを作成するメリット

前回と同じ内容ですが再掲。
選択肢用のリストを作成するメリットとして以下のことが考えられます。
1.選択肢の管理が簡単
2.参照値列の上限を回避できる
3.別用途でも使いまわせる

SharePointで選択肢用のリストを用意する

新規作成画面の時と同じ選択肢用のリストを使用します。

選択した値を保存する際は1行テキストを使え!

選択した値を保存するSharePointリストを用意します。
選択した値を保存する列は必ず「1行テキスト」にしてください。
理由は、別リストから選択した値を正常に登録させるためです。

編集画面にコンボボックスを追加する

下記手順に従い、コンボボックスを追加してください。


1.編集画面で「DataCardValue○」をクリックする。
2.「Visible」を false にして、DataCardValue○ を非表示にする。


3.「DataCard」内に ComboBox を追加する。
4.「Items」に [@選択肢リスト].Title と入力する。
5.複数選択させない場合は「SelectMultiple」を false にする。
6.「DefaultSelectedItems」に下記コードを入力する。

Filter([@選択肢リスト],タイトル=DataCardValue3.Text)


7.「DataCard」をクリックする。
8.「Update」に ComboBox〇.Selected.タイトル と入力することでコンボボックスで選択した値をSharePointに登録します。
 ※同じDataCard内のコンボボックスを選択すること。

【Azure】AI + Machine Learning のサービス一覧

はじめに

こんにちは、くらっちです。
仕事で Azure OpenAI Service に触れる機会があり、同じ「AI + Machine Learning」には他にどんなサービスがあるのか気になり各サービスの概要を調べてみました。
似てるけど利用目的が異なるためサービスが分かれていたりしてちょっと分かりづらい。
少しでも理解のお役に立てれば嬉しいです。

目次

AI + Machine Learning のサービス

下記サービスは、2023/09/10 時点のサービスです。
今後各サービスの統廃合により名称や機能に変化があるかもしれません。

Azure AI services multi-service account

複数のAI関連サービスを統合し、統一されたアカウント管理と課金をするアカウントタイプ。
様々なAIサービスを使用する際の効率性と柔軟性を向上させるために提供されています。

Azure AI Video Indexer

ビデオおよびオーディオ コンテンツを分析し、豊富な分析情報を生成するためのツール。
映像や動画ファイルから価値ある情報を抽出し、検索・分析・カスタムアプリケーションに統合するために設計されている。
ディープ検索、動画コンテンツ作成、不適切なコンテンツからユーザーの保護などが可能。
Azure Media Services と Azure AI Services (Face、Translator、Azure AI Vision、Speech など) の上に構築された Azure AI サービスの一部

Azure Machine Learning

機械学習モデルの開発、トレーニング、デプロイ、監視、スケーリングなどをサポート。
機械学習プロジェクトを簡素化し効率化する。

Azure OpenAI

Microsoft AzureクラウドプラットフォームとOpenAIの技術を組み合わせたサービス。
人工知能(AI)および機械学習(ML)の機能を提供するプラットフォーム
Azure OpenAI は、プライベート ネットワーク、リージョンの可用性、有害コンテンツからのフィルター処理が提供される。

Bot services

チャットボットを作るためのサービス。
Azure AI Bot Serviceは対話をするロボットを作るのに使い、Azure OpenAIは文章を理解して文章を書いたりするのに使用する。
どちらもAIに関連しているけど、目的が違うらしい。。

情報の高度な検索と分析を可能にするサービス。
構造化データおよび非構造化データをインデックス化し、検索・分析・情報の抽出を行う。

Azure Cognitive Search は、下記のアプリケーション シナリオに適している。
 ・インターネットから分離されたコンテンツを検索する。
 ・様々な種類のコンテンツを検索対象にする。
 ・関連性のチューニング、同意語マッピング、オートコンプリートなどの検索関連機能を実装する。
 ・ Azure Cosmos DB などに格納されたテキスト ファイル、画像ファイルなどを検索可能にする。
 など。

Computer vision

画像処理と認識のためのサービス。
画像内の情報を自動的に抽出、分析、認識することができる。

Content moderator

テキスト、画像、ビデオなどのコンテンツを自動的に分析して不適切なコンテンツを検出する。
適切なフィルタリングおよびモデレーションのためのツールを提供。

Custom vision

独自の画像識別子モデルを構築、デプロイ、改良できるようにする画像認識サービス。
機械学習Computer vision技術を利用して、独自の画像分類アプリケーションを開発するために設計されている。
画像識別子は視覚特性に従って画像にラベルを適用し、各ラベルは分類または物体を表す。
Image Analysis 4.0 に移行することで最新のテクノロジでカスタム画像識別子モデルを作成できる。

Document intelligence

大量の文書を自動的に処理して、テキストやドキュメントの構成情報などを抽出・分析を実行するためのツールとリソースを提供。
事前構築済みのモデルとして「請求書」「領収書」「名刺」「契約」などが用意されている。

Face API

顔認識と顔分析を実行するツール。
顔の検出・顔の識別・年齢推定・性別識別・感情分析・顔の類似性比較など、顔に関連するタスクを自動的に実行できるようにする。

Immersive reader

テキストの音声読み上げなど、テキストの読解を支援する。
Azure Cognitive Services の上に構築されている。
主な機能は下記の通り。
 ・テキストの音声読み上げ
 ・テキストのカスタマイズ(フォントやサイズ、行間、背景色の修正)
 ・単語の強調表示(キーワードの協調や単語の意味を表示)
 ・言語翻訳
 ・画像をテキストに変換 などがある。

Language service

この言語サービスは Azure AI サービス (Text Analytics、QnA Maker、LUIS) を統合したもの。
テキストベースで個人情報など機密性の高い情報を識別、分類、編集やカテゴリ分けをする。
例えば以下のようなことが可能。
 ・キーフレーズの抽出
 ・事前に定義されたカテゴリに語句を分類  ・言語や方言の検出・識別
 ・要約処理
 ・感情分析
 ・会話理解(重要事項の抽出など)
 ・質疑応答 など

Personalizer

ユーザーエンゲージメントの向上とコンテンツのパーソナライズ化を実現するための効果的なツール。
ユーザーごとに最適な提案を生成しコンテンツをカスタマイズする。
ユーザーの反応を学習し、提案を最適化するための強化学習アルゴリズムを使用。リアルタイムでユーザーの行動を評価し、提案をリアルタイムに最適化。異なる提案戦略を比較評価し、最適な戦略を特定。
個別の提案生成、強化学習アルゴリズムの利用、リアルタイム評価と最適化、ABテストと評価する

Speech service

音声認識および音声合成のサービス。
音声テキスト変換、テキスト音声変換(テキスト読み上げ)、音声翻訳、話者認識が可能。
Azure Speech Service は音声データの処理に特化。音声認識音声合成に焦点を当てている。
一方、Immersive Reader はテキストの読解支援に特化。教育および読解のサポートに使用。

Translator

テキスト、音声、画像などさまざまな形式のコンテンツを異なる言語に翻訳する。
翻訳できるドキュメント⇒PDF、CSV、HTML、xlsx、msg、pptx、docx、txtなどは可能。

Bonsai

産業用アプリケーションに自動で学習するAIを使うためのローコード プラットフォーム。
Bonsaiの利用には、Azure サブスクリプションに次のリソース コストが課金される。
 ⇒Azure Container Registry、Azure Container Instances、Azure Storage、Azure Monitor

Anomaly detector

Azure AI 異常検出サービスで、REST APIで構成されている。
時系列データの監視や異常の検出をバッチ検証やリアルタイム推論で行うことが可能。

Metrics advisor

データの監視と時系列データにおける異常検出を実行するサービス
Anomaly Detector をベースに構築されている。
Anomaly Detector に、サービス管理のためのユーザーインターフェースを備えた監視機能が追加されている。

以下のことが可能。
 ・リアルタイム監視⇒異常の検出
 ・異常の識別・診断⇒アラート通知
 ・異常の根本原因分析に役立てる

Azure Synapse Analytics

旧名称はAzure SQL Data Warehouse。
Azureのデータワーキングプラットフォームで、データの統合・分析・可視化を行うための統合環境を提供する。



今回は、各サービスの概要をまとめてみました。
個人的に気になるサービスについては一層詳しく見ていきたいと思います。

【PowerApps】コンボボックスの選択肢は別リストを使うのがオススメ!

はじめに

こんにちは、くらっちです。
PowerAppsでアプリを作っていると、選択肢項目が必要な場面って多いですよね。
データベースにSharePointリストを利用しているのであれば選択肢列を使えばいいのですが、同じ選択肢を複数項目で用意したい場合は管理が大変です。
参照値列は1リストで使えるのが12個までという制限があるし、ちょっと避けたい。
そんなときは、SharePointに選択肢用の別リストを作りましょう!
今回は新規作成画面での実装方法について解説します。

目次

選択肢用のリストを作成するメリット

選択肢用のリストを作成するメリットとして以下のことが考えられます。
1.選択肢の管理が簡単
2.参照値列の上限を回避できる
3.別用途でも使いまわせる

SharePointで選択肢用のリストを作成する

最初に、選択肢用のリストを作成しましょう。
選択肢を管理するためのリストを新規作成して「タイトル列」に選択肢を入力します。

選択した値を保存する際は1行テキストを使え!

次に、選択した値を保存するSharePointリストです。
選択した値を保存する列は必ず「1行テキスト」にしてください。
理由は、別リストから選択した値を正常に登録させるためです。

PowerAppsでコンボボックスを追加する

事前準備はできました。ここからPowerAppsアプリ側の手順を説明します。

1.「DataCardValue○」をクリックします。
2.「Visible」を false にして「DataCardValue○」を非表示にします。

3.DataCard内にComboBoxを追加します。
4.「Items」に [@選択肢リスト].タイトル を入力します。
5.複数選択させない場合は「SelectMultiple」を false にしてください。

コンボボックスで選択した値をリストに登録する

最後に、SubmitFormで選択した値をリストに保存するための操作を行います。

6.ComboBox 追加した DataCard をクリックします。
7.「Update」に [ComboBox1.Selected.タイトル] と入力してコンボボックスで選択した値をSharePointリストに登録します。


今回は新規作成画面における手順を解説しました。
編集画面も同じように選択肢の設定にはコツが必要です。
編集画面の手順は下記リンクからどうぞ。

kurattyodiary.hatenablog.com


Microsoft GraphAPIを使ってみよう。-実践 編-

はじめに

こんにちは、くらっちです。
前回記事でMicrosoft GraphAPIを利用するためのアプリ登録手順を説明したので、今回は登録したアプリを使って PowerShell で GraphAPI を利用する手順を説明します。

※前回記事はこちら
kurattyodiary.hatenablog.com

目次

クライアント資格情報による認証

Microsoft Graph にアクセスする際は認証が必要になります。
その認証方法は下記の4パターンです。
 ・デバイスコードによる認証
 ・認証コードによる認証
 ・パスワードによる認証
 ・クライアント資格情報による認証

今回は「クライアント資格情報による認証」に絞って紹介します。
この認証で、サインインを必要とせずMicrosoft Graphに対して認証することができます。
実行時にサインインを求められないため「自動化されたタスクやスクリプト」に最適です。

例として「自組織のすべてのグループ」を取得するためのサンプルを用意しました。
PowerShellで下記ソースコードを実行すると「自組織のすべてのグループ」を取得できます。
※<>内は登録したアプリの情報に修正してください。

サンプルコード

#######################GraphAPI接続 start
$clientid = "<アプリケーション(クライアント)ID>"
$tenantName = "<アプリを登録したテナントのドメイン> 例(sampledomain.onmicrosoft.com)"
$clientSecret = "<クライアント シークレット>"
  
$ReqTokenBody = @{
    Grant_Type    = "client_credentials"
    Scope         = "https://graph.microsoft.com/.default"
    client_Id     = $clientID
    Client_Secret = $clientSecret
} 
 
$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody
#######################GraphAPI接続 end

#######################GraphAPIで情報取得
$apiUrl = 'https://graph.microsoft.com/v1.0/Groups/'
$Data = Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $apiUrl -Method Get
$Groups = ($Data | select-object Value ).Value
$Groups | Format-Table DisplayName, Description -AutoSize

解説

アクセストークン取得

前回登録したアプリでアクセストークを取得します。
アクセストークンには、アプリ自体とアプリに付与されているアクセス許可に関する情報が含まれており、このアクセストークンを取得することでGraph APIを利用可能にします。

2行目~13行目でアクセストークンを取得します。
 2行目:Azure ADで登録したアプリの「アプリケーション(クライアント)ID」を入力。
 3行目:「アプリを登録したテナントのドメイン」を入力します。
 4行目:Azure ADで登録したアプリの「クライアント シークレット」を入力します。
 ※今回クライアント シークレットは直書きしていますが、パスワードと同じ扱いをする必要があるため、実稼働する場合は暗号化するなどしてください。

$clientid = "<アプリケーション(クライアント)ID>"
$tenantName = "<アプリを登録したテナントのドメイン> 例(QiitaTest2020.onmicrosoft.com)"
$clientSecret = "<クライアント シークレット>"


6行目~11行目で「クライアント資格情報による認証」を実施します。

$ReqTokenBody = @{
    Grant_Type    = "client_credentials"
    Scope         = "https://graph.microsoft.com/.default"
    client_Id     = $clientID
    Client_Secret = $clientSecret
} 


13行目でアクセストークンを取得します。

$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody

Graph APIの指定

17行目:Graph APIを指定します。指定するGraph APIは下章の手順に従って確認します。

$apiUrl = '<Graph API>' 例('https://graph.microsoft.com/v1.0/Groups/')

ソースコードに記載するGraph APIを探す方法

1.Graph Explorer にアクセスします。
2.左側メニューの「Sample queries」で、利用するAPIをキーワード検索します。
3.左側メニューから利用するAPIをクリックします。
4.画面上部にGraphAPIの使用例が表示されるのでコピーします。

※「自分の組織内のすべてのグループ」の場合
 左側メニューから list all groups in my organization を選択します。
 画面上部には https://graph.microsoft.com/v1.0/groups と表示されます。

Graph APIの実行

18行目:Graph APIを実行します。

$Data = Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $apiUrl -Method Get

19行目:Graph APIを通して取得したデータから、「Value」のみを抽出します。
20行目:Valueから「表示名」列と「説明」列を抽出します。

$Groups = ($Data | select-object Value ).Value
$Groups | Format-Table DisplayName, Description -AutoSize

取得結果

実行した結果、こんな感じ。

displayName           description
-----------           -----------
テストチーム5        説明文5
テストチーム2        説明文2
PowerShell作成チーム1 説明文
テストチーム3        説明文3
テストチーム4        説明文4

取得した結果はソート順、抽出条件、表示件数を指定していません。
20行目を下記のどれかに変更することでソート順、抽出条件、表示件数を調整できます。

# オプション例--------------------------------
# フィルター
$Groups | Where-Object {$_.description -match "^説明文*"} | Format-Table DisplayName, Description -AutoSize
# ソート順変更(-Descending:降順、未入力:昇順)
$Groups | Sort-Object Description -Descending | Format-Table DisplayName, Description -AutoSize
# 表示数変更(-First:先頭から〇個、-Last:末尾から〇個)
$Groups | select-Object -First 3 | Format-Table DisplayName, Description -AutoSize
# フィルター 表示数 表示列(左から順に実行されていく、フィルターと表示数の定義が逆になると結果も変わってしまう)
$Groups | Where-Object {$_.description -match "^説明文*"} | select-object -first 3 | Format-Table DisplayName, Description -AutoSize

参考ページ

リストグループ(MS公式サイト)
CONNECT AND NAVIGATE THE MICROSOFT GRAPH API WITH POWERSHELL
PowerShellでMicrosoft Graph APIを使用する