🐦

Azure AD管理用PowerShellモジュールを再整理する【2021年版】

2021/07/04に公開

これはなに?

AzureADの管理をコマンド(CUI)環境で行おうとした場合、対応するPowerShellモジュールが複数存在します。

これらのモジュールは

  • 名前だけ見ると、どれが最新か分かり辛い
  • 新しい方のモジュールが必ずしも古い方のモジュールの上位互換でない(古い方のモジュールでしかできないことがある)場合がある
  • (古いモジュールは)Windows版PowerShellしか動かないなど、実行環境に制約がある

といった課題があります。

普段からAzure AD管理が仕事のメインな方には暗黙の常識かもしれません。

が、私は最近Azure AD管理が仕事の片手間にしか関わらなかったせいか、久しぶりにこの辺を触ろうとしたら
「一体どれがなんなんだか・・・」
と頭を抱える羽目に。昔の記憶も引っ張り出しつつ改めて整理します。

MSOnline (Azure AD v1)

まだMicrosoft365の名前がOffice365だった頃、ライセンス割り当てでお馴染みだったPowerShellモジュールです。

Azure ADの管理者としてやりたいことは割と揃ってたんですが、いかんせん実行環境が「Windows版PowerShell」じゃないと動かないのがネック。
(スクリプトをサーバーレスで実行しようにも、よくあるサーバーレス環境のPowerShellはPowerShellでもクロスプラットフォーム版。MSOnlineコマンドは動かない)

Azure ActiveDirectory (MSOnline)

ユーザー情報取得コマンド例

Get-MsolUser

Msolで始まるコマンド群がこの世代の特徴です。

Azure AD for Graph (Azure AD v2)

Azure ADの機能拡張に伴い、対応コマンドも拡充させるために新たに開発されたPowerShellモジュール。
つまりはMSOnlineの後継・・・のはず。なのだが、困ったことにMSOnlineの機能全ては揃っていないという状態に。

Azure Active Directory の PowerShell モジュール

というわけで今後は基本的に Azure AD v2 コマンドをご利用くださいと案内したいところなのですが、、、完全に MSOL コマンドで提供していたものをカバーしているわけではないため、残念なのですが (大変申し訳ないのですが)、従来の MSOL コマンドも併用していく必要があります。

中の人のブログにここまで書かれてしまう残念さ。

PowerShellモジュールもWindows環境じゃないと動かないのも相変わらず。

ユーザー情報取得コマンド例

Get-AzureADUser

Msolの代わりにAzureADで始まるコマンドへ。

# Microsoft Graph PowerShell SDK(第三世代)

Azure AD v2 PowerShellがそのうちMSOnlineの完全上位互換になるまで機能拡充されるのか・・・と思った矢先。
Azure AD Graph APIが非推奨になりMicrosoft Graph APIへの切り替えが行われたことに伴い、Azure AD v2 PowerShellも非推奨になりました。
Microsoft Graph APIのPowerShell SDKが2021年現在最新のAzureAD管理PowerShellモジュールとなります。

Automate and manage Azure AD tasks at scale with the Microsoft Graph PowerShell SDK

なおこの世代から、クロスプラットフォーム版のPowerShellでも動くようになってます。
とはいうものの、大元となるMicrosoft Graph APIが充実してきたため、管理スクリプト的に使いたいならそもそもPowerShellじゃなくAPI叩いた方が早いんじゃないかという・・・。

Microsoft Graph PowerShell SDK

ユーザー情報取得コマンド例

Get-MgUser

Msol、AzureADときて、Mgで始まるコマンドが2021年現在最新のモジュールなわけですね。

おわりに

この記事で紹介したAzure ADのPowerShellモジュールは、世代によってコマンドや認証方法、取得結果が全く異なります。

そのため、ネットでAzure AD PowerShell管理に関する資料を探すときはどのPowerShellモジュールを前提にその記事が書かれたのかを必ず確認するようにしましょう。

Discussion