Microsoft Graph PowerShell でユーザー作成(MSOnline との比較)

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

こんにちは。サイオステクノロジーの木村です。

こちら の記事によると、今後 MSOnline PowerShell モジュールは非推奨となる予定となっており、MSOnline PowerShell モジュール を使用している場合は、Microsoft Graph PowerShell SDK への移行が推奨されています。
そこで今回は、Microsoft Graph PowerShell SDK で「ユーザーの作成」を行う方法について、MSOnline PowerShell モジュールと比較しながら方法を記載します。

尚、Microsoft Graph PowerShell SDK で「ユーザーのライセンス操作」を行う方法については、以下の記事に記載しておりますので併せてご覧ください。
『Microsoft Graph PowerShell でライセンス操作』

Microsoft Graph PowerShell とは

Microsoft Graph PowerShell は、Microsoft Graph APIのAPIラッパーとして機能し、PowerShell コマンドの実行にて Microsoft Graph API を 呼び出せるようにした PowerShell モジュールです。
公式ドキュメントは こちら

Microsoft Graph PowerShellモジュールのインストール

PowerShell を管理者で起動し、以下のコマンドを実行してインストールします。


 Install-Module Microsoft.Graph

Microsoft Graphへの接続(管理者の資格情報を使用)

Microsoft Graph PowerShell SDK のコマンドを実行するには、まず Microsoft Graph へ接続する必要があります。
管理者の資格情報をもとに Microsoft Graph へ接続する手順は以下になります。

1. PowerShellを起動し、以下のコマンドを実行します。
(パラメータ Scopes には、ユーザーの操作を行うために、User.ReadWrite.All のアクセス許可を指定します。)


 Connect-MgGraph -Scopes "User.ReadWrite.All"

2. サインイン画面が表示されますので、管理者のユーザー名とパスワードを入力し、「サインイン」をクリックします。

3. 「承諾」をクリックします。

4. 認証情報を正しく入力しサインインすると接続が完了します。

5. 以下のコマンドを実行しモジュールのインポートを行います。


 Import-Module -Name Microsoft.Graph.Users

Microsoft Graphへの接続(サービス プリンシパルを使用)

サインイン画面を表示し、管理者の資格情報を入力する方法ですと、画面にアカウント名・パスワードを手入力しなければならず、スクリプトなどで自動で接続を行うことはできません。
以下に記載するサービス プリンシパルを使用する方法では、画面にアカウント名・パスワードを手入力する必要がなく、スクリプトなどで自動で接続することができます。
サービス プリンシパルを使用する方法では、証明書を発行したアプリケーションにアクセス許可を付与し、アプリケーション経由で認証および操作を行います。

アプリケーションの登録

アプリケーションをAzureADに登録します。以下の手順で行います。

1. 管理者でAzureポータル(https://portal.azure.com/)にログインします。

2. メニューより「Azure Active Directory」をクリックします。

3. 「アプリの登録」をクリックし「+新規登録」をクリックします。

4. アプリケーションの登録ページで、以下を入力し「登録」をクリックします。

  • 名前:任意の名称
  • サポートされているアカウントの種類:この組織ディレクトリのみに含まれるアカウント
  • リダイレクトURI(省略可能):Web、テキストボックスは空欄

5. 表示された [アプリケーション (クライアント) ID] と [ディレクトリ (テナント) ID] の値をメモしておきます。

6. 「API のアクセス許可」をクリックし、 「+アクセス許可の追加」をクリックします。

7. 「Microsoft Graph」をクリックします。

8. 「アプリケーションの許可」 をクリックし、[User.ReadWrite.All] を選択して [アクセス許可の追加] をクリックします。

9. <テナント名>に管理者の同意を与えます」をクリックします。

10. 「はい」をクリックします。

11. 状態が「<テナント名>に付与されました」と表示されれば、アプリケーションの登録は完了です。

12. アプリケーションに登録する証明書を用意し、Microsoft Graph に接続する環境にインストールします。
自己証明書を使用する場合は、PowerShell にて、以下のコマンドで自己証明書の作成とインストールができます。


 #証明書の作成
 $mycert = New-SelfSignedCertificate -Subject "<証明書のSubject>" `
   -CertStoreLocation "<証明書ストア>" -NotAfter <有効期限> `
   -KeyExportPolicy Exportable -KeySpec Signature

 #エクスポート(CERファイル)
 $mycert | Export-Certificate -FilePath <CERファイル名>

 #作成した証明書の拇印
 $mycert | Select Thumbprint


 #証明書の作成
 $mycert = New-SelfSignedCertificate -Subject "TestApp01" `
   -CertStoreLocation "cert:\CurrentUser\My" -NotAfter (Get-Date).AddYears(1) `
   -KeyExportPolicy Exportable -KeySpec Signature

 #エクスポート(CERファイル)
 $mycert | Export-Certificate -FilePath ".\mycert1.cer"

 #作成した証明書の拇印
 $mycert | Select Thumbprint

13. 先の手順で登録したアプリケーションのページにて、「証明書とシークレット」をクリックし、「証明書のアップロード」をクリックします。

14. 登録したい証明書を指定し、「追加」をクリックします。

15. アプリケーションに証明書が追加されます。

Microsoft Graphへの接続

PowerShellを起動し、以下のコマンドを実行して接続します。
接続後、ユーザー操作に必要なモジュールをインポートします。


 Connect-MgGraph -Clientid "<登録したアプリのアプリケーション (クライアント) ID>" `
   -TenantId "<アプリを登録したテナントのディレクトリ (テナント) ID>"  `
   -CertificateThumbprint "<証明書の拇印>"

 #必要なモジュールのインポート
 Import-Module -Name Microsoft.Graph.Users


 Connect-MgGraph -Clientid "78ff1c4a-xxxx-0000-xxxx-179f8f1a8013" `
   -TenantId "30377ae5-xxxx-0000-xxxx-4569432250b1" `
   -CertificateThumbprint "1606C825A0000EE0Exxxxxx81462AD8D80xxxxxx"

 #必要なモジュールのインポート
 Import-Module -Name Microsoft.Graph.Users

ユーザー作成

MSOnline PowerShell モジュールでは、ユーザー作成は以下のコマンドにより行います。
 コマンド:New-MsolUser
これに対し、Microsoft Graph PowerShell SDK では、ユーザー作成は以下のコマンドにより行います。
 コマンド:New-MgUser

※ MSOnline PowerShell モジュールのコマンドに対応する Microsoft Graph PowerShell SDK のコマンドについては、こちら の公式ドキュメントに記載があります。

パラメータ

「New-MsolUser」と「New-MgUser」では、パラメータ名に違いがあるものがあります。また、パラメータへ指定する値の型が違い、指定の方法が異なるものもあります。
「New-MsolUser」に対応する「New-MgUser」のパラメータについて下表に記載します。

New-MsolUserNew-MgUser
-UserPrincipalName <String>-UserPrincipalName <String>
-BlockCredential <Boolean>-AccountEnabled <SwitchParameter>

※ BlockCredential とは、true/false の意味合いが逆となる。サインイン禁止に指定したい場合は以下のように指定する。
 -AccountEnabled:$False
尚、SwitchParameter のため、true にしたい場合は $true は記載しなくて良い。

-City <String>-City <String>
-Country <String>-Country <String>
-Department <String>-Department <String>
-DisplayName <String>-DisplayName <String>
-Fax <String>-FaxNumber <String>
-FirstName <String>-GivenName <String>
-LastName <String>-Surname <String>
-MobilePhone <String>-MobilePhone <String>
-Office <String>-OfficeLocation <String>
-PasswordNeverExpires <Boolean>-PasswordPolicies  <String>
(DisablePasswordExpiration)
-PhoneNumber <String>-BusinessPhones <String[]>
-PostalCode <String>-PostalCode <String>
-PreferredLanguage <String>-PreferredLanguage <String>
-State <String>-State <String>
-StreetAddress <String>-StreetAddress <String>
-StrongPasswordRequired <Boolean>-PasswordPolicies <String>
(DisableStrongPassword)
-Title <String>-JobTitle <String>
-UsageLocation <String>-UsageLocation <String>
-AlternateEmailAddresses <String[]>-OtherMails <String[]>
-ForceChangePassword <Boolean>-PasswordProfile  <IMicrosoftGraphPasswordProfile>
(forceChangePasswordNextSignIn)
-Password <String>-PasswordProfile  <IMicrosoftGraphPasswordProfile>
(Password)

※ 上記以外にもパラメータはあります。詳細は、以下の各コマンドの公式ドキュメントを参照してください。
 New-MsolUser は、こちら
 New-MgUser は、こちら

実行コマンド例

MSOnline PowerShell モジュールにて、New-MsolUser コマンドでユーザーを作成する際は、例えば以下のようにコマンドを実行します。


 New-MsolUser -UserPrincipalName "sample@xxxxx.onmicrosoft.com" `
  -BlockCredential $false `
  -City "Minato-ku" `
  -Country "日本" `
  -Department "ps" `
  -DisplayName "Sei Mei" `
  -Fax "00-0000-0000" `
  -FirstName "Mei" `
  -LastName "Sei" `
  -MobilePhone "111-1111-1111" `
  -Office "Tokyo" `
  -PasswordNeverExpires $true `
  -StrongPasswordRequired $false `
  -PhoneNumber "22-2222-2222" `
  -PostalCode "106-0047" `
  -State "Tokyo" `
  -StreetAddress "Minamiazabu" `
  -Title "Manager" `
  -UsageLocation "JP" `
  -Password "password" `
  -ForceChangePassword $true;

上記コマンドを、Microsoft Graph PowerShell SDK の New-MgUser コマンドに置き換えると以下のようになります。


New-MgUser -UserPrincipalName "sample@xxxx.onmicrosoft.com" `
 -AccountEnabled `
 -City "Minato-ku" `
 -Country "日本" `
 -Department "ps" `
 -DisplayName "Sei Mei" `
 -FaxNumber "00-0000-0000" `
 -GivenName "Mei" `
 -Surname "Sei" `
 -MobilePhone "111-1111-1111" `
 -OfficeLocation "Tokyo" `
 -PasswordPolicies  "DisablePasswordExpiration,DisableStrongPassword" `
 -BusinessPhones "22-2222-2222" `
 -PostalCode "106-0047" `
 -State "Tokyo" `
 -StreetAddress "Minamiazabu" `
 -JobTitle "Manager" `
 -UsageLocation "JP" `
 -PasswordProfile @{ "Password"="password"; "forceChangePasswordNextSignIn" = $true } `
 -mailNickname "sample";

Microsoft Graphからの切断

以下のコマンドを実行すると、接続を切断できます。


 Disconnect-MgGraph

その他

記載内容は執筆時(2022年5月)時点の情報です。Microsoft Graph PowerShell SDK は、随時機能追加中との情報があるため、今後機能について変更される可能性があります。
『Microsoft Graph PowerShell でライセンス操作』 の記事に記載したように、New-MsolUser コマンドでは、ユーザー作成と同時にライセンスの付与ができていましたが、New-MgUser コマンドでは、現時点ではライセンスの付与ができません。今後の機能の拡充に期待します。

アバター画像
About 木村 29 Articles
Azureなどのクラウドでの稼働を主としたアプリケーション開発を行なっています。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

2人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる