PowerShell 用のマイクロソフト グラフ SDK を使用して Workplace 365 ライセンス レポートを生成する方法
価格が上昇したときにライセンスを確認する時間
9月9日、私は説明しました PowerShell スクリプトを変換する手順 2022 年 6 月 30 日に動作を停止する Azure AD コマンドレットから、PowerShell 用 Microsoft グラフ SDK の同等のコマンドレットに対する操作が行われます。その後、インタラクティブスクリプトでSDKを使用する際に関連する問題のいくつかを説明しました。与えられた 2022 年 3 月に期限を予定している Office 365 および Microsoft 365 ライセンスの価格上昇に関するマイクロソフトの発表では、テナント内のライセンスセットを監査し、アカウント間のライセンスの配布についていくつか質問する良い時期です。そのためには、ライセンスレポートが必要です。
このようなレポートを生成する例は、来年6月に動作を停止するコマンドレットに基づいて存在します(ここに1つのバージョンがあります) を使用して、SDK コマンドレットを使用してライセンス レポートを生成する手順を説明します。
ステージ 1: テナントのライセンス データを抽出する
レポートを生成する基本的な手順は、2 つの段階で行います。まず、次の 2 つのデータ (CSV) ファイルを作成します。
- テナントで使用される製品ライセンス (SKU)。
- 製品ライセンスに属するサービスプラン。サービスプランは、Exchange オンラインやチームのような Office 365 E3 のような製品ライセンスにバンドルされています。
すべてのテナントが異なるため、いくつかのコード(GitHub から入手できます。)をクリックしてこれらのファイルを生成します。グラフに接続し、ベータプロファイルを選択してライセンスデータが利用可能であることを確認し、 ゲット・Mgサブスクライブスク コマンドレットを使用して、テナントのライセンス データを取得します。次に、製品のリスト (SKU) を CSV にエクスポートしてから、製品をループ処理してサービスプランを抽出し、2 番目の CSV にエクスポートします。
コネクトMgグラフ -テナントId xxxxxxx-14fc-43a2-9a7a-d2e27f4f3478
Mgプロファイルベータを選択
[Array]$Skus = ゲット-MgSubscribedSku
# テナントで使用されるすべての製品 SKU の CSV を生成します。
$Skus |スクーID、スクーパート番号|を選択します。エクスポート Csv -NoType 情報 c:tempリストオブスクス.Csv
# テナント内の SKU で使用されるすべてのサービスプランの一覧を生成します。
$SPData = [System.Collections.Generic.List[Object]]::新しい()
ForEach ($Skusの$S) {
ForEach ($S.サービスプランの$SP) {
$SPLine = [PSCustomObject][Ordered]@{
サービスプラン ID = $SP。サービスプランId
サービスプラン名 = $SP。サービスプラン名
表示名 = $SP。サービスプラン名 }
$SPData.追加($SPLine)
}
}
$SPData |サービスプラン Id – 一意の|を並べ替えます。エクスポート-csv c:Tempサービスプランデータ.csv -いいえ型情報
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
繋ぐ–Mgグラフ –テナントID xxxxxxx–14fc–43a2–9a7a–d2e27f4f3478 選ぶ–Mgプロファイル Beta [Array]$スク = 取得–MgSubscribedSku # テナントで使用されるすべての製品 SKU の CSV を生成します。 $スク | 選ぶ スクイド, スクーパートナンバー | 輸出–CSV –いいえ型情報 c:一時リストオブスク.CSV # テナント内の SKU で使用されるすべてのサービスプランの一覧を生成します。 $SPデータ = [System.Collections.Generic.List[Object]]::新機能() フォーリーチ ($S で $スク) { フォーリーチ ($SP で $S.サービスプラン) { $スプライン = [PSCustomObject][Ordered]@{ サービスプランId = $SP.サービスプランId サービスプラン名 = $SP.サービスプラン名 ディスプレイナムe = $SP.サービスプラン名 } $SPデータ.足す($スプライン) } } $SPデータ | ソート サービスプランId –ユニーク | 輸出–csv c:一時サービスプランデータ.csv –いいえ型情報 |
このコードは 2 つのファイルを生成します。ただし、生成されたデータにはライセンスとサービスプランとコード名を識別するGUIDが含まれているため、ファイルを使用するには、それらを使用する前にいくらかのマッサージが必要です。たとえば、6fd2c87f-b296-42f0-b197-1e91e994b900 は、コード名が ENTERPRISEPACK の Office 365 E3 を識別する GUID であり、3fb82609-8c27-4f7b-bd51-3063471e は、例えば計画です。これは、コードBPOS_S_TODO_3、Office 365 E5 に含まれる To Do サービス プランです。
これらの値をレポートで使用することもできますが、ユーザーフレンドリな (またはユーザーが理解できる) 名前を付けたいのも良いでしょう。したがって、CSV ファイルを編集して、ユーザーフレンドリ名を含む DisplayName という列を追加します。図 1 は、サービス計画データを保持する CSV ファイルの編集を示しています。

マイクロソフトが使用する値を解釈することは、それ自体に芸術です。ザ 製品名とサービス プランのライセンス ページ 貴重なリソースですが、時には使用中の製品やサービスプランに関する知識に基づいて推測の問題になることがあります。
ファイルの編集が完了したら、レポート スクリプトで使用されるファイル名と一致するようにファイル名を変更します。これらは:
- c:tempSkuDataComplete.csv: 製品データ
- c:tempサービスプランデータ完了.csv: サービスプランデータ。
もちろん、スクリプト コードを一致するように更新する場合は、任意の名前を使用できます。
ステージ 2: レポートの生成
レポートの作成手順は簡単です。
- 以前と同じ Microsoft グラフに接続します。
- 入力データファイルが使用可能であることを確認し、使用できない場合は終了します。
- を使用して Azure AD ユーザー アカウントのセットを取得します。 ゲット・Mgユーザー コマンドレット。
- ユーザー アカウントのセットをループします。
- ライセンスされたアカウントごとに (リソースや共有メールボックスに使用されるアカウントなど、ライセンスは必要ありません)、ライセンス データを抽出し、無効になっているサービス プランがライセンスに含まれるかどうかを確認します。入力データファイルに対して情報をチェックして、人間にわかりやすい名前を付けます。
- ライセンス情報を PowerShell リストに記録します。
- ユーザー アカウントを処理した後、ライセンス情報を含む HTML レポートと CSV ファイルを作成します。
メインループは次のとおりです(以下のことができます 完全なスクリプトを GitHub からダウンロードする):
ForEach ($Usersの$User) {
([string]::IsNullOrWhiteSpace($User.割り当てられたライセンス) -eq $False) { # 一部のライセンスがある場合にのみアカウントを処理します
書き込みホストの「処理」$User。表示名
[array]$LicenseInfo = $Null; [array]$DisabledPlans = $Null
ForEach ($User割り当て済みライセンスの$License) {
($SkuHashTable.ContainsKey($License.SkuId) -eq $True) { # SKU ハッシュ テーブルで一致するものが見つかりました
$LicenseInfo += $SkuHashTable.アイテム($License.SkuId) }
その他 { # 何もしないので、SkuID を出力します
$LicenseInfo += $License }
# ライセンス内の無効なサービスプランを報告
([string]::IsNullOrWhiteSpace($License.DisabledPlans) -eq $False ) { # ライセンス内の無効なサービス プランを確認する
ForEach ($License.DisabledPlans の$DisabledPlan) { { 無効になっているサービスプランを試して見つける
($ServicePlanHashTable.ContainsKey($DisabledPlan) -eq $True) { # サービスプランハッシュテーブルで一致するものが見つかりました
$DisabledPlans += $ServicePlanHashTable.Item($DisabledPlan) }
Else { # 何もしない、だから、サービスプランIDを出力します
$DisabledPlans += $DisabledPlan }
} # End ForEach 無効プラン
} # 無効なプランをチェックする場合は終了
} # エンド・フォー・ライセンス
# レポート情報
[string]$DisabledPlans = $DisabledPlans -join “, "
[string]$LicenseInfo = $LicenseInfo -join (“, “)
$ReportLine = [PSCustomObject][Ordered]@{
ユーザー = $User.表示名
UPN = $User.ユーザー プリンシパル名
国 = $User.国
部門 = $User.部門
タイトル = $User.役職
ライセンス = $LicenseInfo
“無効なプラン" = $DisabledPlans }
$Report.追加($ReportLine)
} #end アカウントがライセンスされている場合
その他 { $UnlicensedAccounts++}
} # エンド ForEach ユーザー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
フォーリーチ ($利用者 で $ユーザー) { もし ([string]::空白を使用します。($利用者.割り当てられたライセンス) –eq $偽) { #一部のライセンスがある場合にのみアカウントを処理します 書く–ホスト 「処理」 $利用者.表示名 [array]$ライセンス情報 = $ヌル; [array]$無効プラン = $ヌル フォーリーチ ($ライセンス で $利用者.割り当てられたライセンス) { もし ($スクハッシュテーブル.キーを含む($ライセンス.スクイド) –eq $真) { # SKU ハッシュ テーブルで一致するものが見つかりました $ライセンス情報 += $スクハッシュテーブル.アイテム($ライセンス.スクイド) } 然も無くば { #何もしない、ので、SkuIDを出力 $ライセンス情報 += $ライセンス } # ライセンス内の無効なサービスプランを報告 もし ([string]::空白を使用します。($ライセンス.無効プラン) –eq $偽 ) { # ライセンスで無効なサービスプランを確認 フォーリーチ ($無効プラン で $ライセンス.無効プラン) { #試してみて、無効になっているサービスプランを見つける もし ($テーブル.キーを含む($無効プラン) –eq $真) { # サービスプランハッシュテーブルで一致するものが見つかりました $無効プラン += $テーブル.アイテム($無効プラン) } 然も無くば { # 何もしない、ので、サービスプランIDを出力します $無効プラン += $無効プラン } } #終了ForEach無効プラン } #無効なプランをチェックする場合は終了 } # エンド・フォー・ライセンス # レポート情報 [string]$無効プラン = $無効プラン –接続 “, “ [string]$ライセンス情報 = $ライセンス情報 –接続 (“, “) $レポートライン = [PSCustomObject][Ordered]@{ 利用者 = $利用者.表示名 アップン = $利用者.ユーザープリンシパル名 国 = $利用者.国 部 = $利用者.部 タイトル = $利用者.役職 ライセンス = $ライセンス情報 “無効なプラン" = $無効プラン } $報告.足す($レポートライン) } #end アカウントがライセンスされている場合 然も無くば { $無免許アカウント++} } # エンド ForEach ユーザー |
図 2 は、スクリプトによって生成されたライセンス情報を示しています。ご覧のとおり、Azure AD アカウントの国と部門のプロパティを含め、それらのプロパティに基づいて情報を並べ替えることができます。これは PowerShell コードであるため、Azure AD ユーザー アカウントで使用できるプロパティを、レポートに含まれるセットに簡単に追加できます。

図 3 は、レポートの HTML バージョンを示しています。

他の他のレポートとは別に、このようなレポートは、Azure AD に格納されているユーザー情報の欠陥も強調しています。図 3 では、いくつかのアカウントに国のプロパティが存在しませんが、一部は役職を持たないことがわかります。これらの不備は、Office 365 内のさまざまな場所に表示される情報に影響を与えます。 ユーザー プロファイル カード とチームで利用可能なユーザーの組織ビュー。
レポートの実行
ライセンス レポートの生成は、四半期ごとまたは半年ごとに行うものです。その場合は、対話型の Graph SDK 接続を使用してスクリプトを実行しても問題ないでしょう。一方、より規則的な出力が必要な場合は、スクリプトの実行に使用する Azure AD に新しい登録済みアプリを作成することを検討してください。 (アプリのみのアクセス).
このコードは PowerShell であり、ライセンス レポートの生成の背後にある原則を調査して説明するために記述したコードがあります。何をすべきかを知ったので、あなたの想像力が暴動を実行し、ライセンスデータを利用する興味深い方法の種類を教えてください。
ディスカッション
コメント一覧
まだ、コメントがありません