こんにちは。サイオステクノロジーの木村です。
こちら の記事によると、今後 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-MsolUser | New-MgUser |
-UserPrincipalName <String> | -UserPrincipalName <String> |
-BlockCredential <Boolean> | -AccountEnabled <SwitchParameter>
※ BlockCredential とは、true/false の意味合いが逆となる。サインイン禁止に指定したい場合は以下のように指定する。 |
-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 コマンドでは、現時点ではライセンスの付与ができません。今後の機能の拡充に期待します。