前回「[Microsoft 365]多要素認証(二要素認証)でSMSを使用する際の電話番号をPowershellコマンドで一括登録する方法を検証してみた 〜New-MgUserAuthenticationPhoneMethod〜
の続きの検証となります。

今回はユーザー毎の多要素認証の有効化を一括で設定する検証となります。

<検証環境>
クライアントOS:Windows 10 Pro 21H1

手順としては以下のサイトを参考にしました。
ユーザーごとの Azure AD Multi-Factor Authentication を有効にしてサインイン イベントのセキュリティを確保する


検証

前回の検証時に多要素認証の有効化をGUI(Microsoft 365管理センター)から設定する手順は簡単に紹介していますので、ここでは割愛します。

まずは使用するコマンドについて確認していきます。
モジュールのインストール
> Install-Module MSOnline

Powershellによる365への接続
> Connect-MsolService

多要素認証(MFA)有効化設定
> $st = New-Object -TypeName Microsoft.Online.Administration.StrongAuthenticationRequirement
> $st.RelyingParty = "*"
> $st.State = "Enabled"
> $sta = @($st)
> Set-MsolUser -UserPrincipalName <ユーザープリンシパル名> -StrongAuthenticationRequirements $sta

確認コマンド
> $AllUser = Get-MsolUser
> $AllUser | Select-Object UserPrincipalName,DisplayName,@{Label="StrongAuthenticationRequirementsState";Expression={($_.StrongAuthenticationRequirements | ForEach-Object{$_.State})}} | Sort-Object StrongAuthenticationRequirementsState
(注)確認コマンドが長くなっていますが、合計2行です。

↓↓実際に使用してみた感じ↓↓
01-Powershellコマンド

02-Powershellコマンド

03-Powershellコマンド

04-実施コマンド
正常にコマンドが完了した場合は特に何も返ってこないようですね。

ここで確認コマンドを試してみると・・・・
04-確認コマンド
う〜〜ん、単純に「StrongAuthenticationRequirements」と指定しただけではオブジェクト情報しか表示出来ませんね。
こんな時は面倒ですが、オブジェクトの中身を更に指定しないとダメですね(^_^;)

一例としてはこんな感じになるかと思います。
05-確認コマンド
無効の場合には「空欄」、有効の場合には「Enabled」、強制の場合には「Enforced」という値を返すようですね!
※それぞれの違いについては、冒頭に紹介したサイトに記載があります。


ではコマンドがわかったので、実際にスクリプトを作成していきます。

↓↓作成したスクリプトと準備するCSVファイルはこんな感じになりました↓↓


Enable-StrongAuthenticationState.ps1

#環境変数の設定
$CurrentFolder = Split-Path $MyInvocation.MyCommand.Path -Parent
$CSVFilePath = $CurrentFolder + "\AuthenticationPhoneInfo.csv"
$OutputLogFilePath = $CurrentFolder + "\StrongAuthenticationState.log"

$CSVファイルの読み込み
$AllUserInfo = Import-Csv -Path $CSVFilePath -Encoding Default

#Powershellで接続
Connect-MsolService

#「有効化」するためのオブジェクト作成
$st = New-Object -TypeName Microsoft.Online.Administration.StrongAuthenticationRequirement
$st.RelyingParty = "*"
$st.State = "Enabled"
$sta = @($st)

#一括設定
foreach($UserInfo in $AllUserInfo){
    
    $UserName = $UserInfo.UserPrincipalName
    Write-Host "${UserName}にて多要素認証を有効化します. `r`n" -ForegroundColor Yellow
    Set-MsolUser -UserPrincipalName $UserName -StrongAuthenticationRequirements $sta

}

#設定後の全ユーザーの状態を確認
$AllUser = Get-MsolUser
$OutputUserInfo = $AllUser | Select-Object UserPrincipalName,DisplayName,@{Label="StrongAuthenticationRequirementsState";Expression={($_.StrongAuthenticationRequirements | ForEach-Object{$_.State})}} | Sort-Object StrongAuthenticationRequirementsState
$OutputUserInfo | Export-Csv -Path $OutputLogFilePath -Encoding UTF8 -NoTypeInformation

Write-Host "処理が完了しました.`r`n" -ForegroundColor Green

pause


AuthenticationPhoneInfo.csv

UserPrincipalName,PhoneNumber
testuser01@~,+81 09012345678
test01@~,+81 09098765432
test100@~,+81 08011119999
test101@~,+81 08022228888
※このファイル自体は前回の検証で使用したものと同じにしてます。
 SMS認証の作成をしたら、そのまま有効化もするというのが通常の流れかと思うので。


<CSVファイルの例>
10-一括作成コマンド用CSVファイル
(注)「Import-CSV」コマンド時に文字コードを「Shift-JIS」で指定してますので、エクセルで作成・編集したものを使用可能です。ただし、日本語が入っていなければ「UTF-8」でも問題ないような気がします。

<実際に実行した画面>
10-スクリプト実行
作成したスクリプトとCSVファイルを同一フォルダ内に配置して、Powershellとして実行します。

11-スクリプト実行

13-結果ログ
実行完了後は同じフォルダに設定確認用ログが出力されます。

<出力された確認ログ(StrongAuthenticationState.log)>
12-結果ログ


一括での有効化が確認出来たので、今回の検証もこんなところで終わりたいと思いますっ( ´ー`)フゥー...
スポンサードリンク