社員の部門移動に伴い、所属しているMS365の以下、グループを洗い出す必要があります。
・MS365グループ ・セキュリティグループ ・メールが有効なセキュリティグループ
毎月100名近くの社員が移動するためその度に必要となり工数増加及び対応メンバーの負荷が増えています。一括で複数ユーザが所属しているグループを抽出する方法を教えてください。
※PowerShellのコマンド実行などを想定
【現在の方法】
・entra管理センターにログイン、ユーザから対象者を検索。
画面上から所属グループを選択し、作業Excelに貼り付け。
・貼り付け後、各グループ毎に各管理台帳のExcelにコピペして洗い出し
【検証状況】
デスクトップ調査をもとに、以下コマンドを実行しましたが、複数行出るものの、対象のグループ名や紐づくID、メールアドレス等は取得できませんでした。
★★★★★★★★★★★★★★★★★★★★★★★★
===============================================
Get-M365GroupMembership.ps1
Microsoft Graph PowerShell で Email 列をキーに所属グループを一括出力
===============================================
▼ 1. Graph 接続
Write-Host "Microsoft Graph に接続中..."
Connect-MgGraph -Scopes "User.Read.All","Group.Read.All" | Out-Null
▼ 2. 入出力パス設定(必要に応じて変更)
$inputPath = "C:\Users\kmorikawa\Desktop\アカウント改善PJT\202510_社員の権限一括洗い出し\Input\TransferList.csv"
$outputPath = "C:\Users\kmorikawa\Desktop\アカウント改善PJT\202510_社員の権限一括洗い出し\Output\GroupMembershipList.csv"
出力ファイル初期化
if (Test-Path $outputPath) { Remove-Item $outputPath }
New-Item -Path $outputPath -ItemType File | Out-Null
▼ 3. 異動者リスト読み込み
$users = Import-Csv $inputPath -Delimiter "," # 区切りがタブなら "`t"
▼ 4. 各ユーザーのグループ情報取得
foreach ($user in $users) {
if (-not $user.Email -or [string]::IsNullOrWhiteSpace($user.Email)) {
Write-Warning "Emailが空の行をスキップしました: $($user.DisplayName)"
continue
}
$email = $user.Email.Trim()
Write-Host "処理中: $($user.DisplayName) ($email)..."
try {
# EmailをキーにuserPrincipalName/mail属性の両方で検索
$userObj = Get-MgUser -Filter "startswith(userPrincipalName,'$email')" -Property Id,DisplayName,Mail
if (-not $userObj) {
$userObj = Get-MgUser -Filter "startswith(mail,'$email')" -Property Id,DisplayName,Mail
}
if ($userObj) {
$groups = Get-MgUserMemberOf -UserId $userObj.Id -All
foreach ($group in $groups) {
# グループ種別分類
$type = if ($group.GroupTypes -contains "Unified") {"M365 Group"}
elseif ($group.MailEnabled -and $group.SecurityEnabled) {"Mail-enabled Security Group"}
elseif ($group.SecurityEnabled) {"Security Group"}
else {"Other"}
# 結果出力
[PSCustomObject]@{
EmployeeID = $user.EmployeeID
DisplayName = $user.DisplayName
Email = $email
GroupName = $group.DisplayName
GroupType = $type
MailEnabled = $group.MailEnabled
SecurityEnabled = $group.SecurityEnabled
} | Export-Csv -Path $outputPath -Append -NoTypeInformation -Encoding UTF8
}
}
else {
Write-Warning "ユーザー未検出: $email"
}
}
catch {
Write-Warning "エラー: $email - $_"
}
}
▼ 5. 完了通知
Write-Host "`n処理完了しました。結果: $outputPath"
★★★★★★★★★★★★★★★★★★★★★★★★
<モデレーター注>
この質問は「Microsoft System Center | その他」に投稿されましたが、Microsoft Q&A(ja-jp)ではサポートしていない質問内容なので「監視対象外」に変更しました。