2025/11/18 Azure Active Directory の 全ユーザー取得
学内のAzure Active Directoryからユーザー一覧を確認してみたい
前回: 学内のMicrosoftアカウント全てをリストで確認
REST API
Microsoft GraphのGraph APIで取得できる
Graph API を使った開発の時は、Microsoft が公開しているGraph Explorerが便利。
https://developer.microsoft.com/en-us/graph/graph-explorer
Sign In ボタンで認証すると、自分が所属する組織内での操作を実行できるようになる
ユーザー一覧
既定動作として、100ユーザーごとでページングされる
$top クエリパラメータでページサイズを999まで拡大できるが、それ以上のユーザがいる場合は、ページをたどっていく必要がある。手軽に使うのは厳しい気がする。
https://graph.microsoft.com/v1.0/users
クエリパラメータで、検索条件などを指定することができる
$filter 特定の文字列をメールアドレスに含むユーザーのみを抽出
例: fooを含むもののみ抽出
https://graph.microsoft.com/v1.0/users?$filter=startswith(mail,'foo')
ユーザーの特定のプロパティ(列)のみを選択
例: mailとdisplayNameのみ
https://graph.microsoft.com/v1.0/users?$filter=startswith(mail,'foo')&$select=mail,displayName
ページングの挙動が面倒だったので、 jqなどで処理することを念頭に Azure CLI を使うことにする。
Azure CLI
WSL 上の Ubuntu に Azure CLI をインストールした
https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli-linux?view=azure-cli-latest&pivots=apt#install-azure-cli
ログイン
$ az login --allow-no-subscriptions
今回は Subscription が存在しないテナントへのアクセスなので. allow-no-subscriptions オプションを付けておく
ユーザー一覧
$ az ad user list
けっこう時間がかかる
https://learn.microsoft.com/ja-jp/cli/azure/ad/user?view=azure-cli-latest#az-ad-user-list
フィルター(--filter)
filter については、REST API と同じ記法が使えそう
$ az ad user list --filter="startswith(mail,'foo')"
クエリ(--query)
jmespath記法でクエリを書ける。
フィルタ処理も書けそうだが、--filterがよいだろうか?
結論: 学部生の抽出
$ az ad user list --query='[].{mail: mail, name: displayName}' --filter="startswith(mail, 'b22')" -o yaml
これでだいたい良い感じ
ポータルサイトなどで学籍番号で表示される箇所に名前を表示する拡張機能を作っておく