皆さんこんにちは。国井です。
Azure ADのPowerShellもVersion 2が出てきており、
そろそろ実務でも使う機会が出てきているので、このあたりで一度、主なコマンドレットをまとめておきたいと思います。(というか、自分用?)
■まずはAzure AD PowerShell v2の実装
以下のサイトでも紹介されているように、Install-ModuleコマンドレットでAzure AD PowerShell v2はインストールできます。
びっくりするくらい面倒な操作は一切不要。便利な世の中になったものですね。
https://www.powershellgallery.com/packages/AzureAD/2.0.0.115
Install-Module -Name AzureAD -RequiredVersion 2.0.0.115
■Azure AD に接続
ここからはAzure AD PowerShell v1と比較しながら見ていきましょう。
まずAzure ADをPowerShellから操作するときは接続操作が必要です。
(上段がv1の操作、下段がv2の操作です)
$cred = Get-Credential
Connect-MsolService -Credential $cred
$cred = Get-Credential
Connect-AzureAD -Credential $cred
■ユーザー一覧の確認
こちらはAzure ADのユーザー一覧を参照するときのコマンドレットです。
Get-MsolUser
Get-AzureADUser
■CSVファイルに基づくユーザーの作成
ユーザーを作成するときは、v1だとNew-MsolUser、v2だとNew-AzureADUserコマンドレットを使うのですが、CSVファイルで作成しておいたユーザー一覧を流し込んで作成するときは以下のとおりになります。ちなみに、v1とv2では必須パラメーターが異なるので、用意しておくべきCSVファイルも異なってきます。
例えば、v1だとCSVで指定したパスワードをそのまま流し込むことができたり、ライセンスの割り当てができたりするのですが、v2だとパスワードは事前にMicrosoft.Open.AzureAD.Model.PasswordProfileというオブジェクトを呼び出して、パスワードを登録しなければならないなど、v1に比べると面倒なことが増えてます(必須パラメーターも増えてますし)。
username,displayname,location,password,AccountSkuId
kunii@adfs.jp,国井傑,JP,P@ssw0rd,contoso:ENTERPRISEPACK
Import-Csv -Path <CSVファイルのパス> | foreach {New-MsolUser -DisplayName $_.displayname-UserPrincipalName $_.username -UsageLocation $_.location -LicenseAssignment $_.AccountSkuId -Password $_.Password}
username,displayname,location,mailnickname
kunii@adfs.jp,国井傑,JP,kunii
$PasswordProfile=New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
$PasswordProfile.Password="P@ssw0rd"
Import-Csv -Path <CSVファイルのパス> | foreach {New-AzureADUser -DisplayName $_.displayname -UserPrincipalName $_.username -UsageLocation $_.location -MailNickName $_.mailnickname -PasswordProfile $PasswordProfile -AccountEnabled $true}
■グループ一覧の確認
こちらはAzure ADのユーザー一覧を参照するときのコマンドレットです。
Get-MsolGroup
Get-AzureADGroup
■新しいグループの作成
v1ではグループを作成するときにグループ名だけ指定すれば出来上がりですが、v2ではメールが有効なグループ(Office 365のグループ)にするか?、セキュリティが有効なグループにするか?など指定しなければならないパラメーターが増えています。
New-MsolGroup -Displayname <グループ名>
New-AzureADGroup -DisplayName <グループ名> -MailEnabled $false -SecurityEnabled $true -MailNickName <メールニックネーム>
■グループにメンバーを追加
グループにメンバーを追加するときには、ユーザーの属性をベースに自動的にメンバーを追加・削除できるようにしたいですよね?Azure AD Premiumを買えば、そんな問題はすぐに解決できるのですが、地道にPowerShellでやりたい人はこちらからどうぞ。
ちなみに、例文では[利用場所]属性がJPだったら、、という条件の時にグループのメンバーになるように設定しています。
Get-MsolUser | Where-Object {$_.usageLocation -match "JP"} | Add-MsolGroupMember -objectid <グループ名>
$group=Get-AzureADGroup |Where-Object {$_.Displayname -match <グループ名>}
Get-AzureADUser | Where-Object {$_.usageLocation -match "JP"} | foreach{Add-AzureADGroupMember -ObjectID $group.ObjectID -RefObjectID $_.ObjectID}
■ライセンスの確認
ライセンス割り当てをするときは、ライセンス名を確認しておかないといけません。なので、こちらのコマンドレットでどうぞ。
Get-MsolAccountSku
Get-AzureADSubscribedSku
■ユーザーにライセンスを割り当て
確認したらライセンスを割り当てるときは、v1だとSet-MsolUserLicense、v2だとSet-AzureADUserLicenseコマンドレットを使います。ただ、v2の場合、Get-AzureADSubscribedSkuコマンドレットで確認したライセンス名をそのまま指定することはできず、型の変換をする必要があります。
Set-MsolUserLicense -userprincipalname "<ユーザー名>" -addlicenses test:ENTERPRISEPACK
# 型の定義
$license = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
# $licenseに追加するライセンスのSKU IDを登録
$license.SkuId = '<SKU ID>'
$licenses.AddLicenses = $license
# $licensesに削除するライセンスのSKU IDを登録
$licenses.RemoveLicenses = '<SKU ID>'
# ライセンスを割り当て
Set-AzureADUserLicense -ObjectId "<ユーザー名>" -AssignedLicenses $licenses
■パスワードのリセット
おひとり様のパスワードリセットだったらブラウザーから操作したほうが簡単だと思いますが、念のため。
Set-MsolUserPassword -UserPrincipalName "<ユーザー名>" -NewPassword "P@ssw0rd" -ForceChangePassword $false
$password=ConvertTo-SecureString -AsPlainText -String "P@ssw0rd" -Force
Set-AzureADUserPassword -ObjectId "<ユーザー名>" -Password $password -ForceChangePasswordNextLogin $false
■ユーザー一律のパスワードを再設定
ユーザー全員のパスワードを一律で設定する場面というのは、Office 365の管理画面からCSVファイル経由でユーザーをまとめて作成した時なんかが考えられます。Office 365の管理画面からCSVファイル経由でユーザーを作成すると、パスワードはランダムなものが割り当てられてしまうので、それをしたくない時なんかに使うことになります。
v2の場合、Set-AzureADUserPasswordコマンドレットから平文のパスワードを指定できないので、事前にConvertTo-SecureStringコマンドレットを使ってパスワードを暗号化(変換)しています。
Get-MsolUser | Set-MsolUserPassword -NewPassword "P@ssw0rd" -ForceChangePassword $false
$password=ConvertTo-SecureString -AsPlainText -String "P@ssw0rd" -Force
Get-AzureADUser | Set-AzureADUserPassword -Password $password -ForceChangePasswordNextLogin $false
■Azure ADのポリシー作成
Azure ADのポリシーが何か?という話は別の機会にすることにして、具体的に利用する場面はADFSサーバーから発行されるトークンのライフタイムを短くしたいときなどに使います。詳しくは以下のサイトでご覧ください。(このコマンドレットはv2限定です)
https://docs.microsoft.com/ja-jp/azure/active-directory/active-directory-configurable-token-lifetimes
New-AzureADPolicy -Definition @('{"TokenLifetimePolicy":{"Version":1, "MaxAgeSingleFactor":"until-revoked"}}') -DisplayName "OrganizationDefaultPolicyScenario" -IsOrganizationDefault $true -Type "TokenLifetimePolicy"
■Azure ADのポリシーに値を設定
作成したポリシーに値を設定していくコマンドレットです。
Set-AzureADPolicy -Id <ObjectId FROM GET COMMAND> -DisplayName "OrganizationDefaultPolicyUpdatedScenario" -Definition @('{"TokenLifetimePolicy":{"Version":1,"MaxAgeSingleFactor":"2.00:00:00"}}')
■Azure ADから切断
v1にはなかった、Azure ADの切断もv2なら用意されています。今までだったらコンソール自体を終了することでしか切断できなかったので、なにげにうれしい。
Disconnect-AzureAD
v2のコマンドレットを使ってオブジェクトを指定するときはユーザー名やグループ名ではなく、オブジェクトIDで指定します。ところが、オブジェクトIDの代わりにユーザー名やグループ名を指定しても問題ないコマンドレットもあるんですよね。ですので、今回のチートシートにはオブジェクトIDを使わなくて良いものに関しては、できるだけユーザー名やグループ名を指定するようにしました。
アプリケーション管理系のものとかが含まれていませんが、順次増やしていけたらと思います。
■参考資料 (今日、紹介できなかったアプリケーション管理系のものが掲載されています)
https://vincentlauzon.com/2017/02/02/automating-azure-ad/
https://blogs.msdn.microsoft.com/edutech/administration/script-bulk-assign-users-to-saas-application-using-graph-api-adal/