Entra

Microsoft365アカウントの認証方法登録情報を取得する

多要素認証、セルフパスワードリセットに使用する認証方法の登録情報を一括取得する方法について記載する。現在どの程度登録が進んでいるかを確認したい時などに使用してほしい。

検証環境について

動作確認した検証環境は以下の通り。

OS:Microsoft Windows 11 Enterprise
OSbuildバージョン:10.0.22621
PowerShellのバージョン:7.4.0

GraphPowershellのモジュール名とバージョン
Microsoft.Graph.Authentication 2.13.1
Microsoft.Graph.Identity.DirectoryManagement 2.13.1

サインインアカウントの権限はグローバル管理者。

使用するコマンド

Get-MgUserAuthenticationEmailMethod

使用例

Get-MgUserAuthenticationEmailMethod -UserId ****@****.onmicrosoft.com

取得できる情報例

Id                                   EmailAddress
--                                   ------------
3ccfcfc8-8683-106f-45cc-3ca9be4aa18f ****@365ps.jp

Get-MgUserAuthenticationPhoneMethod

使用例

Get-MgUserAuthenticationPhoneMethod -UserId ****@****.onmicrosoft.com

取得できる情報例

Id                                   PhoneNumber     PhoneType SmsSignInState
--                                   -----------     --------- --------------
3079e48a-120b-4351-817c-87b0820088f7 +81 090****1234 mobile    notAllowedByPolicy

Get-MgUserAuthenticationMicrosoftAuthenticatorMethod

使用例

Get-MgUserAuthenticationMicrosoftAuthenticatorMethod -UserId ****@****.onmicrosoft.com

取得できる情報例

Id                                   CreatedDateTime DeviceTag              DisplayName    PhoneAppVersion
--                                   --------------- ---------              -----------    ---------------
49568f64-78db-39e0-903c-2b140aa18217                 SoftwareTokenActivated iPhone 12 mini 6.8.4

全てのアカウントの認証情報の招待情報を取得する

各認証情報で使用されるメールアドレスや携帯番号の確認をする場合は、以下スクリプト実行することで詳細情報の確認が可能。

#コマンド実行日時を取得する
$yyyyMMddFFFFF = Get-Date -Format "yyyyMMdd_FFFFF"

#CSVの保存先 windowsOSの場合、デスクトップに保存する
$csvSavePath = "$env:USERPROFILE\Desktop"

#保存するCSVのファイル名
$csvFileName = "allUserAuthenticationInfoList_${yyyyMMddFFFFF}.csv"

#取得した情報を格納する配列を宣言する
$result = @()

#実行数管理の変数
$count = 0

#GraphPowerShellに接続する
Connect-MgGraph `
    -Scopes User.Read.All,UserAuthenticationMethod.Read.All `
    -NoWelcome

#全てのユーザーを取得する
$allUserList = Get-MgUser -All

#取得したユーザー分繰り返す
foreach($user in $allUserList){
    #メールアドレス認証情報を取得する
    $emailMethod = Get-MgUserAuthenticationEmailMethod `
        -UserId $user.Id

   #IDの値がNullでない場合(=認証方法の情報がある場合)結果を格納する
    if($emailMethod.id -ne $null){
        $result += [PSCustomObject]@{
            userId = $user.UserPrincipalName
            id = $emailMethod.Id
            AuthenticationMethodType = "Email"
            AuthenticationMethodInfo = $emailMethod.EmailAddress
        }
    }

    #SMS認証、電話認証の情報を取得する
    $phoneMethodList = Get-MgUserAuthenticationPhoneMethod `
        -UserId $user.Id

    #IDの値がNullでない場合(=認証方法の情報がある場合)結果を格納する
    if($phoneMethodList.id -ne $null){
        foreach($phoneMethod in $phoneMethodList){
            $result += [PSCustomObject]@{
                userId = $user.UserPrincipalName
                id = $phoneMethod.Id
                AuthenticationMethodType = $phoneMethod.PhoneType
                AuthenticationMethodInfo = $phoneMethod.PhoneNumber
            }
        }
    }

    #MicrosoftAuthenticator認証の情報を取得する
    $authenticatorMethod = Get-MgUserAuthenticationMicrosoftAuthenticatorMethod `
        -UserId $user.Id

    #IDの値がNullでない場合(=認証方法の情報がある場合)結果を格納する
    if($authenticatorMethod.id -ne $null){
        $result += [PSCustomObject]@{
            userId = $user.UserPrincipalName
            id = $authenticatorMethod.Id
            AuthenticationMethodType = $authenticatorMethod.DeviceTag
            AuthenticationMethodInfo = $authenticatorMethod.DisplayName
        }
    } 
    $count = $count + 1
    $Completed = [Math]::Round(($count / $allUserList.Count) * 100,2)
    Write-Progress -Activity "$Completed%完了" -PercentComplete $Completed
}

#取得した情報を並び替えし、CSVファイルとしてエクスポートする
$result | Sort-Object userId,AuthenticationMethodType | `
Export-Csv -Encoding utf8 `
    -NoTypeInformation `
    -Path "${csvSavePath}\${csvFileName}"

#GraphPowerShellから切断する
Disconnect-MgGraph

取得できる情報例

"userId","id","AuthenticationMethodType","AuthenticationMethodInfo"
"****@****.onmicrosoft.com","3ccfcfc8-9383-446f-83cc-3ab9b7c1918f","Email","****@gmail.com"
"****@****.onmicrosoft.com","3989e48a-750b-4051-897c-87b0820828f7","mobile","+81 08012345678"
"****@****.onmicrosoft.com","30fb1c27-b3a6-4ee3-b68b-584f918f4995","SoftwareTokenActivated","iPhone SE (2nd generation)"

情報登録の有無のみの簡易的な情報を取得する

認証情報の登録状況のみ確認し携帯番号等の詳細情報が不要な場合は、以下スクリプトを実行することで、簡易的な登録情報を取得することが可能。

#コマンド実行日時を取得する
$yyyyMMddFFFFF = Get-Date -Format "yyyyMMdd_FFFFF"

#CSVの保存先 windowsOSの場合、デスクトップに保存する
$csvSavePath = "$env:USERPROFILE\Desktop"

#保存するCSVのファイル名
$csvFileName = "allUserAuthenticationInfoList_${yyyyMMddFFFFF}.csv"

#GraphPowerShellに接続する
Connect-MgGraph -Scopes AuditLog.Read.All -NoWelcome

#レポート情報を取得する
$report =  Get-MgReportAuthenticationMethodUserRegistrationDetail | `
    Select-Object UserDisplayName,UserPrincipalName,LastUpdatedDateTime,`
        IsAdmin,IsMfaCapable,IsMfaRegistered,IsPasswordlessCapable,`
        IsSsprCapable,IsSsprRegistered,IsSystemPreferredAuthenticationMethodEnabled

#取得した情報を並び替えCSVファイルとしてエクスポートする
$report | Sort-Object @{Expression = 'IsAdmin'; Descending = $true },`
    @{Expression = 'UserPrincipalName'; Ascending = $true }| `
    Export-Csv -Encoding utf8 `
        -NoTypeInformation `
        -Path "${csvSavePath}\\${csvFileName}"

#GraphPowerShellから切断する
Disconnect-MgGraph

取得できる情報例

"UserDisplayName","UserPrincipalName","LastUpdatedDateTime","IsAdmin","IsMfaCapable","IsMfaRegistered","IsPasswordlessCapable","IsSsprCapable","IsSsprRegistered","IsSystemPreferredAuthenticationMethodEnabled"
"User001","User001@****.onmicrosoft.com","2024/02/17 11:44:33","True","False","False","False","True","True","False"
"User002","User002@****.onmicrosoft.com","2024/02/17 11:44:33","True","False","False","False","True","True","False"
"User003","User003@****.onmicrosoft.com","2024/02/17 11:44:33","True","False","False","False","True","True","False"

問い合わせフォーム

リンク切れのご報告や、記載内容に不備がありましたら、お手数をおかけしますが
以下お問い合わせフォームからご報告をお願い致します。
コマンドの仕様確認やエラー内容の確認、対処方法については、ご契約されているMicrosoftかCSPへお問い合わせください。
※いただきました内容は確認させていただきますが、必ずしも回答をお約束するものではございません。

    SharePointPowerShellを使用してサイトにサイトコレクション管理者としてユーザーを一括追加する前のページ

    GraphPowershellを使用して使用されていないチームを一括でアーカイブ化する次のページ

    関連記事

    1. ドメインが複数表示されている画像

      Entra

      GraphPowerShellから独自ドメインのDNSレコードを一括取得する

      新規構築の場合は、複数のドメインを登録する必要がある場合があ…

    2. Entra

      GraphPowerShellからユーザーを一括作成する

      Graph Powershellのコマンド、New-MgUserを使用…

    3. Entra

      GraphPowerShellを使用してアカウントの部署情報を一括更新する

      Microsoft365のアカウントのプロパティ情報を一括更…

    4. Entra

      GraphPowerShellを利用してMicrosoft365管理者アカウントを一括取得する

      GraphPowerShellを使用して管理アカウントを一括…

    最近の記事

    PAGE TOP