Powershell でMicrosoft365(AzureAD)アカウントを一括登録するスクリプトを作成してみた。(Microsoft Graph版)

スポンサーリンク

大量のM365アカウントを作成する機会があった。手作業で一つずつ作成するのは時間がかかるため、Powershellスクリプトで一括登録する。なお、本業はプログラマではないのでスクリプト構文とかは素人。

作成するユーザの一覧のcsvファイルを用意

作成するユーザ一覧の csv ファイルを下記の項目で、任意のフォルダに account.csv とファイル名で作成する。

ID氏名passwd
aabbcc山田 太郎12345678
ddeeff山田 花子9876543

Powershell スクリプトを作成

下記のパワーシェルスクリプトを作成して .ps1 ファイルとして保存し、account.csv と一緒のフォルダに置く。作成されるユーザは下記の項目設定がされるようにする。

・表示名 … csv の氏名を設定
・氏 … csv の氏名から取得
・名 … csv の氏名から取得
・ライセンスの割り当て … Get-MgSubscribedSku コマンドで割り当てたいライセンスを取得する。Where 句で割り当てが必要なライセンスを絞る
・強力なパスワード要件はオフとしている。
・初回ログイン時パスワード強制変更するようにする。

※ スクリプト内の $Dom 変数や $sku1 変数はご利用環境に合わせて編集してください。

スクリプト内でAzureADに接続する時に使うクレデンシャルファイルはこちらを参考に作っておく。

 # 作業フォルダの定義
$scriptname = $MyInvocation.MyCommand.Name
$path = $PSScriptRoot
# 作業フォルダに移動
cd $path

#ログ取得
if (!(Test-Path .\log)){
    mkdir .\log
    Write-Output ("logフォルダを作成しました。")
}
$logfile = ".\log\" + $scriptname +"_"+ (Get-date -Format "yyyy-MMdd-HHmmss") + ".log"
Start-Transcript $logfile -Append

# AzureAD 接続
$cre = Import-Clixml -path C:\work\cred.xml
Connect-MgGraph -Scopes "User.ReadWrite.All"
Import-Module -Name Microsoft.Graph.Users

# CSVリストを取得
$Lists = Import-Csv -Encoding Default ".\account.csv"

#UPNのドメイン部分の定義
$Dom = "@tec-memo.com"

#割り当てライセンスのSkuIdを取得
$sku1 = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'OFFICESUBSCRIPTION_XXXXXX'
$sku2 = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'STANDARDWOFFPACK_XXXXXX'
$Licenses = @(
    @{SkuId = $sku1.SkuId},
    @{SkuId = $sku2.SkuId}
    )

$count = 0
# フォルダ作成
foreach($l in $Lists){
    $count ++
    #UPN定義
    $Upn = $l.ID + $Dom

#   ユーザ作成
    New-MgUser -DisplayName $l.氏名 `
        -AccountEnabled `
        -MailNickname $l.ID `
        -GivenName ($l.姓) `
        -Surname ($l.名) `
        -UserPrincipalName $Upn `
        -UsageLocation "JP" `
        -PasswordPolicies "DisablePasswordExpiration,DisableStrongPassword" `
        -PasswordProfile @{ "Password" = $l.Passwd ; "forceChangePasswordNextSignIn" = $true}

# ライセンス付与
Set-MgUserLicense -UserID $Upn -AddLicenses $Licenses  -RemoveLicenses @()

    Write-Output("[" + $count +"]/[" + $Lists.Count + "]  " + $l.ID + " を登録しました。")
}

# Graph から切断
Disconnect-MgGraph
# ログ停止
Stop-Transcript

コメント

タイトルとURLをコピーしました