どうもミツシマです。

前回までSharePoint Online上のファイル操作等をPowershellで操作する方法を検証していた。
今回はOffice365ユーザーをPowershellで一括で登録(追加)する方法について検証してみたいと思う。

検証環境は以下の通り
PC:Windows10 Pro


〜事前準備〜

Office365のユーザー登録というのは正確には、「Azure Active Directory」のユーザー登録ということである。
その為、Powershellで操作するためには
①「Microsoft Online Services サインイン アシスタント」のインストール
②「Azure Active Directory」用モジュールのインストール
の2つが事前準備として必要である。
(2021/08/02追記)
通常のWindows 10であれば、①の手順は不要です!
その為、②の手順だけで足りる事がほとんどです!!


↓↓↓参考にしたサイト↓↓↓
Office 365 PowerShell への接続
<Microsoft PowerShell の Microsoft Azure Active Directory モジュールとの接続>

上記サイトを確認するともう一つ方法があり、
「Graph 用 Azure Active Directory PowerShell モジュールに接続する」という説明があるが、こちらは後から出たモジュールで今回の検証では、初期からあるモジュールの「MSOline」を使用したいと思う。

モジュールの違いについては下記サイトが参考になりそうだ
Azure Active Directory の PowerShell モジュール
※違うモジュールは今後検証してみようと思う。


ちなみにこのモジュールを使用するための前提条件はこんな感じのようだ
・ .NET Framework: バージョン 4.5.2 以降 (*1)
・ PowerShell: バージョン 5.0 以降 (*1)
・ OS: Windows 7 SP1 (*2)、 Windows Server 2008 R2 以降

*1  .NET Framework および PowerShell のバージョンについては、厳密に言うとこれを満たしていなくても動作するバージョンもありますが、古いバージョンだと問題が生じることがあるため上記を満たすようにします。
*2 クライアント OS で利用する場合には 32 bit 環境ではなく 64 bit 環境の必要があります。


通常のWindows10Pro等であれば恐らく上記要件を満たしているので大丈夫だと思われる。


それでは早速準備。
以下のサイトから「Microsoft Online Services サインイン アシスタント」モジュールをダウンロードしてインストールする。
<https://www.microsoft.com/ja-jp/download/details.aspx?id=41950>


その後、Powershellコマンドを管理者権限で起動し、「Install-Module MSOnline」を実行する。
正しくモジュールがインストール出来れば完了である。
※Nugetのバージョンが古いと失敗することもあるみたい。。。


その後、試行錯誤して完成したスクリプトがこちら↓↓↓


〜Add-MsolUsers.ps1〜

#環境変数の設定
$CurrentFolder = Split-Path $MyInvocation.MyCommand.Path -Parent
$ImportCSVPath = $CurrentFolder + "\Add-MsolUsers.csv"
#$LicenceInfo = "<ドメイン名>:O365_BUSINESS_PREMIUM"
#$UsageLocationInfo = "JP"

#モジュールのインポート(必要に応じて実行.通常はPCで一回でも実行すれば以降は不要)
#Import-Module MSOnline

#MSO認証するための管理者情報を格納
$Cred = Get-Credential

#MSOへログイン
Connect-MsolService -Credential $Cred

Import-Csv -Path $ImportCSVPath -Encoding Default | ForEach-Object { New-MsolUser `
 -UserPrincipalName $_.UserPrincipalName `
 -Password $_.Password `
 -LastName $_.LastName `
 -FirstName $_.FirstName `
 -DisplayName $_.DisplayName `
 –LicenseAssignment $_.License `
 -Title $_.Title `
 -Department $_.Department `
 -PhoneNumber $_.PhoneNumber `
 -MobilePhone $_.MobilePhone `
 -FAX $_.FAX `
 -PostalCode $_.PostalCode `
 -State $_.State `
 –City $_.City `
 -StreetAddress $_.StreetAddress `
 -Country $_.Country `
 -UsageLocation $_.UsageLocation `
 -StrongPasswordRequired $false `
 -ForceChangePassword $false `
 -PasswordNeverExpires $true `
}


#パラメータ説明 「上から順番に」
#ユーザー名 (必須パラメータ)
#パスワード
#姓
#名
#表示名 (必須パラメータ) 
#ライセンス付与 ※ここでは必須パラメータとなり、CSV上で空白だとエラーとなる
#役職 
#部署 
#電話番号 
#携帯電話番号 
#FAX番号 
#郵便番号 
#都道府県 
#市区町村 
#番地 
#国 (だいたい日本) 
#利用地域 (必須パラメータ) 日本であれば「JP」 
#PWの複雑性の有効化/無効化(ここでは無効にしている) ※ただし、8文字以上という条件は無効に出来ない.更にWeb画面(GUI)からの変更には適用されず、複雑なPW必須!!
#初回ログイン時にパスワード変更を要求するかどうか(ここでは要求しないようにしている) 
#パスワードの有効期限を無効化するかどうか(ここでは無期限にしている)


スクリプト中で使用しているCSVがこんな感じ↓↓↓

〜Add-MsolUsers.csv〜

UserPrincipalName,Password,LastName,FirstName,DisplayName,License,Title,Department,Office,PhoneNumber,MobilePhone,Fax,PostalCode,State,City,StreetAddress,Country,UsageLocation
test02@<ドメイン名>.onmicrosoft.com,Pass1234,test,02,test 02,<ドメイン名>:O365_BUSINESS_PREMIUM,課長,開発課,TEST営業所,03-1234-5678,000-0000-0000,03-9876-5432,123-4567,東京都,TEST市,1-2-3,日本,JP

(注)長くて改行されているように見えるが、2行!!


〜解説〜

まず「Add-MsolUsers.csv」にて必要となるパラメータを設定している。
この中で必須となるのが「UserPrincipalName,」・「DisplayName」・「License」である。
※厳密には「License」はなくてもいいパラメータであるが、今回は「New-MsolUser」コマンド内で引数として使用しているので必須としている。ライセンスを付与したくない場合には「-LicenseAssignment」引数を削除すればOK

パスワードも必須じゃないが、普通はつけるだろう。(定義されない場合には自動作成される)
自動生成を臨む場合にも「-Password 」引数を削除すればOK。
ちなみに「-StrongPasswordRequired」を「$false」にしないと複雑性のあるパスワードが要求されるので満たしていない時はユーザー作成に失敗する!!
(注)更にたとえ「$false」にしたとしても8文字以上は必須なので注意が必要

他の引数は空白でも大丈夫なので、引数をそのまま残しておいても大丈夫のはず。。(間違っていたらごめんなさい!コメントで指摘下さい!!)

あとはcsvファイルを保存するときはUTF-8で保存した方が文字化けしなくていいかも。
(自分が検証した限りではUTF-8でもshift-JISでも文字化けしなかったが、この辺りは使用しているpowershellのバージョンによりけりな可能性が大。)


今度はスクリプト自体の解説。
まずOffice365(AzureAD)に接続するために
$Cred = Get-Credential
Connect-MsolService -Credential $Cred
を実行している。
この時、ダイアログが出るので管理者情報を入力する。
後はパラメータ通りに作成するために「New-MsolUser」コマンドで作成している。

ちなみにテナントのライセンス情報を確認したい場合には
Get-MsolAccountSku」で確認出来る。
※この情報がライセンス付与には必要!!


以上。そんなに難しくはないはず。

そしていつものことだが、作成したら削除するコマンドも作成してみた↓↓↓


〜Remove-MsolUsers.ps1〜

#環境変数の設定
$CurrentFolder = Split-Path $MyInvocation.MyCommand.Path -Parent
$ImportCSVPath = $CurrentFolder + "\Add-MsolUsers.csv"


#モジュールのインポート(必要に応じて実行.通常はPCで一回でも実行すれば以降は不要)
#Import-Module MSOnline

#MSO認証するための管理者情報を格納
$Cred = Get-Credential

#MSOへログイン
Connect-MsolService -Credential $Cred

#ユーザーの一括削除
Import-Csv -Path $ImportCSVPath -Encoding Default | ForEach-Object { Remove-MsolUser -UserPrincipalName $_.UserPrincipalName -Force }


先程作成の時に使用したCSVファイルのユーザーを一括削除するように構成。
注意点としては「-Force」引数を使用しているので、警告なしに削除される。


それぞれスクリプトを使用した時の画面↓↓↓
MSOユーザー操作-画面2


こんな感じで今回の検証は終了しようと思う。


P.S.何か違っていたりした場合にはコメントが欲しいです!!一人で検証しているので他の人がどのようにやっているのか興味あります!!!(^o^)





スポンサードリンク